javaFXプロジェクトをエクスポートして、作成されたjarファイルを難読化しようとしてハマった話。
結論から言うと、proguardで難読化した際にアノテーションが消えていたのが原因。対策としては、まず、下記の様な何もしない設定で難読化してみた。
# sample.pro
# 何もしない設定
-injars 'C:\******\input.jar'
-outjars 'C:\******\output.jar'
# 外部jar
-libraryjars 'C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar'
-libraryjars 'C:\****\*****.jar'
-libraryjars 'C:\****\*****.jar'
# 属性設定
-keepattributes *Annotation*, Signature, Exceptions, InnerClass
# クラス設定
-keep class * {
*;
}
これで動作しない場合は、jarファイルの設定が間違っている可能性がある。
動作する場合は、ここから難読化する部分を除いていく。
例えば、下記の様にパッケージごとに分類して、それぞれ個別に設定するなど。
$sample2.pro
# パッケージごとに個別設定
-injars 'C:\******\input.jar'
-outjars 'C:\******\output.jar'
# 外部jar
-libraryjars 'C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar'
-libraryjars 'C:\****\*****.jar'
-libraryjars 'C:\****\*****.jar'
# 属性設定
-keepattributes *Annotation*, Signature, Exceptions, InnerClass
# クラス設定
-keep class package1.* { *;}
-keep class package2.* { *;}
-keep class package3.* { *;}
-keep class package4.* { *;}