私は2つの一般的な解決策があるように思われることを発見しました:
- リフレクションAPI[ Retroguard、Jobfuscate ]を介して参照されるものを難読化しないでください
- リフレクションAPI呼び出しの文字列を難読化された名前に置き換えます。
これらのソリューションは、同じプロジェクト内の呼び出しに対してのみ機能します。クライアントコード(別のプロジェクト内)は、リフレクションAPIを使用して非公開APIメソッドにアクセスすることはできません。
2の場合、Reflection APIがコンパイル時に既知の文字列で使用されている場合にのみ機能します(プライベートメソッドのテスト?)。そのような場合、 dp4jは、難読化後にリフレクションコードを挿入するソリューションも提供します。
Proguard FAQを読んで私はそれが言うとき2がそうでなければ常に働いたかどうか疑問に思いました:
ProGuardは、Class.forName( "SomeClass")やSomeClass.classなどの構成を自動的に処理します。参照されるクラスは縮小フェーズで保持され、文字列引数は難読化フェーズで適切に置き換えられます。
可変文字列引数を使用すると、通常、可能な値を判別することはできません。
Q:太字のステートメントはどういう意味ですか?例はありますか?