Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

gradle/proguard

proguardとfatjar

proguardを使って難読化した後、fatjar化する。もちろん、依存ライブラリの難読化などはしない。

apply plugin: 'java'  

// グループ
group = "sample"

/** バージョン */
version = 0.8

// 全ソースがUTF-8であることを指定する
//[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
  options.encoding = 'UTF-8'
}

// Javaソースのバージョン
sourceCompatibility = 1.8

// 生成クラスのバージョン
targetCompatibility = 1.8

def NO_JAR = 'build/normal.jar'
def OB_JAR = 'build/obfuscated.jar'
def OB_MAP = 'build/ob-map.txt'
def OB_FAT = 'build/ob-fat.jar'
def NO_FAT = 'build/no-fat.jar'
def MAIN_CLASS = "sample.Main'
def APP_NAME = "sample"

// 依存を取得する場合のリポジトリ
repositories {
  maven {
    url CENTRAL_REPOSITORY
  }
  maven {
    url INHOUSE_REPOSITORY
  }
}

// ソースの指定
sourceSets {
  main {
    java {
      srcDir '....src'
    }
    resources {
      srcDir '....src'
    }
  }
}

// 依存ライブラリの指定
dependencies {
  compile group: 'javax.inject', name: 'javax.inject', version: '1'
  ....    
}

jar {
  // 出力先ファイル
  destinationDir = file('.')
  archiveName = NO_JAR 
  
  // マニフェスト
  manifest {
    attributes 'Implementation-Title': APP_NAME, 'Implementation-Version': version
    attributes "Main-Class" : MAIN_CLASS
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude '.readme'
  }
}
 
// proguard外部ツール設定
buildscript {
  repositories {
    maven {
      url CENTRAL_REPOSITORY
    }
  }
  dependencies {
    classpath 'net.sf.proguard:proguard-gradle:5.3.2'
  }
}

// 難読化する
task obfuscation(type: proguard.gradle.ProGuardTask, dependsOn: jar) {
  injars  NO_JAR
  outjars OB_JAR
  libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
  libraryjars "${System.getProperty('java.home')}/lib/ext/jfxrt.jar"
  libraryjars configurations.compile
  
  dontwarn 'javax.annotation.**'
  dontwarn 'org.apache.**'
  ....
  
  
  //dontwarn
  dontnote
      
  keep 'public class sample.Main { \
    public static void main(java.lang.String[]); \
  }'
  printmapping OB_MAP
  renamesourcefileattribute 'SourceFile'
  keepattributes 'Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod'

}

// ノーマルなfatjarを作成する
task noFat(type: Jar) {

  // 出力先ファイル
  destinationDir = file('.')
  archiveName = NO_FAT 
  
  // 入力ファイル
  from { 
    configurations.compile.collect { zipTree(it) };
  }
  with jar
  
  // マニフェスト
  manifest {
    attributes 'Implementation-Title': APP_NAME, 'Implementation-Version': version
    attributes 'Main-Class': MAIN_CLASS
  }
}

// 難読化fatjarを作成する
task obFat(type: Jar, dependsOn: [obfuscation]) { 

  // 難読化されていないクラスとリソースを削除しておく。難読化バージョンはOB_JARから取得される
  doFirst {
    delete 'build/classes'
    delete 'build/resources'
  }  
  
  // 出力先ファイル指定
  destinationDir = file('.')
  archiveName = OB_FAT   
  
  // 入力ファイル
  from { 
    (configurations.compile.collect { it } + file(OB_JAR)).collect { zipTree(it) }
  }
  with jar
  
  // マニフェスト
  manifest {
    attributes 'Implementation-Title': APP_NAME, 'Implementation-Version': version
    attributes 'Main-Class': MAIN_CLASS
  }
}