My Androidプログラムにはclass A
、2つのstatic inner class
。それらは.dex
プロガードを適用した後。
public class A{
...
static class B{
...
}
static class C{
...
}
}
Proguard.flagsに次の行を追加しましたが、運が悪いようです。
-keep class com.xxx.A
-keep class com.xxx.A$*
ヒントはありますか?
InnerClasses
をkeep属性に追加してみてください。例えば:
-keepattributes Exceptions, InnerClasses, ...
また、次のように、アスタリスクを使用して "keep"呼び出しに本文を追加してみてください。
-keep class com.xxx.A$* {
*;
}
これは私の設定のためにやらなければならなかったことです
-keep class com.xxx.A { *; }
-keep class com.xxx.A$B { *; }
-keep class com.xxx.A$C { *; }
これは私のためにトリックをしました
-keepattributes InnerClasses
-keep class com.yourpackage.YourClass**
-keepclassmembers class com.yourpackage.YourClass** {
*;
}
ワイルドカードでは少しやり過ぎかもしれませんが、何も見逃さないようにしたかったのです。主なことは、クラスのkeepとクラスのkeepclassmembersにInnerClasses属性が必要なことです。
一部のパッケージのすべての内部クラスとメンバーを難読化したくない場合は、proguard-rules.proに行を追加できます
-keep class com.xxx.task.*$* {
*;
}
設定は正しいようです。クラス名のスペルを間違えていないことを再確認する必要があります。スペルが間違っている場合、ProGuardはそれについてのメモを印刷する必要があります。 -printseeds seeds.txt
を指定して、結果のファイルにクラスがリストされているかどうかを確認することもできます。リストされている場合、クラスも処理されたコードに含まれています。
Alexander Lucasが述べたように、これらのクラスのフィールドとメソッドを保持することもできます。これは要件によって異なります。