私はこれをカバーする応答を見逃してしまった場合は申し訳ありませんが、私は似たものを見つけることについて勤勉に努力しました。Proguard keepclassmembersはクラスを保持します
私はProguardの動作に本当に混乱しています。私が間違ったドキュメントを読んでいるのか、動作が間違っているのか疑問です。
クラスが保持されている場合、注釈付きのフィールドとメンバーをクラス内に保持したいと考えています。
-keepclassmembers class com.mycompany.** {
@com.mycompany.**
public com.mycompany.** *;
@com.mycompany.**
public void *(com.mycompany.**);
}
(この設定はGUIで構築されたが、私は、私はそれをやっているか見て考えていた)ProGuardのドキュメントが
-keepclassmembers [、修飾子を、言う:だから私はそうのような
keepclassmembers
を使用しました...] class_specification保存するクラスメンバをクラスが保持されている場合に指定します。たとえば、すべてのシリアル化フィールドと、Serializableインターフェイスを実装するクラスのメソッドを保持することができます。
いいね。しかし、私は出力に期待しないクラスを取得しています。 -whyareyoukeeping class com.company.MyServiceImpl
?
com.mycompany.MyServiceImpl
is invoked by com.mycompany.MyServiceImpl: void handleEvent(com.mycompany.MyEvent) (34:35)
is kept by a directive in the configuration.
handleEvent
だけので、クラス全体を維持する正当な理由ではないようですが、それが唯一の私は考えることができると思うのですMyServiceImpl
、内の別のメソッドを呼び出します。
keepclassmembers
は、「そのクラスが保持されているだけでなく」指定されたメンバーを含むクラスに「keep
」を強制的に表示するのはなぜですか?しかし、より直接的に、Proguardが既に他のルールを介して保管しているクラスで、公開注釈付きイベントリスナーを保持する方法はありますか?
私は次のように実行可能なものになりました。 -keepclassmembers、allowobfuscationクラスcom.mycompany。** {@ com.mycompany。**; } -keepclassmembers、allowshrinking、allowoptimization、allowobfuscationクラスcom.mycompany。** {@ com.mycompany。** ; } 「許可」修飾語は魔法のソースだと思いますが、その組み合わせは困惑しています。それは指令全体を元に戻すようです。 これは、将来何人かの人に数時間を節約できるアイデアを提供したいと考えています。 –
Justin