私は2つの一般的な解決策があるように思われることがわかった: コードが難読化される場合、常にReflection APIを使用できますか?
- は、難読化された名前のリフレクションAPIの呼び出しで文字列を置換します。
これらのソリューションは、同じプロジェクト内の呼び出しでのみ機能します。クライアントコード(別のプロジェクト)は、非公開APIメソッドにアクセスするためにリフレクションAPIを使用できません。
2の場合、Reflection APIがコンパイル時に知られている文字列(プライベートメソッドのテスト?)で使用されている場合にのみ機能します。そのような場合には、dp4jは難読化の後に反射コードを注入する解決法も提供します。
ProGuardのが自動的に Class.forNameの( "工ass")と SomeClass.classなどの 構造を扱う:2がそうでなければ、常にそれが言うとき働いていた場合
はProguard FAQを読んで、私は疑問に思いました。参照された クラスは、縮退する フェーズで保持され、文字列引数は、難読化 フェーズで正しく置き換えられます( )。
可変文字列引数では、一般には の可能な値を決定することはできません。
Q:太字の文は何を意味しますか?どんな例?
大丈夫です。つまり、文字列はコンパイル時にはわかりません。つまり、このケースのサブセット(つまり、コンパイラーがそれを理解できないときはいつでも)です。 – simpatico
が正しい。実際、上記のサンプルは、理論的には反射を介して読み込まれるクラスの100を意味する可能性があります。 – MeBigFatGuy