こんにちは、Androidアプリを作成しています。アプリケーションを難読化するようにProguardを設定しています。ただし、クラスローダーを使用して、アプリケーションにさまざまな拡張機能を動的にロードします。 Proguardが特定のクラス名を難読化しないようにする方法を教えてください。
Proguard.cfgで-keepnames
オプションを使用します
マニュアルを参照してください https://www.guardsquare.com/en/proguard/manual/usage#keepoptions :
-keepnames
class_specification
-keep,allowshrinking
class_specificationの短縮形縮小段階で削除されない場合、名前が保持されるクラスおよびクラスメンバーを指定します。たとえば、Serializableインターフェイスを実装するクラスのすべてのクラス名を保持して、処理されたコードが元のシリアル化されたクラスと互換性を保つようにすることができます。まったく使用されていないクラスは引き続き削除できます。難読化する場合にのみ適用されます。
これにより、クラス名がそのまま保持されます。
-keepnames class com.somepackage.*
ProGuardを変更したくないすべての人のための便利なヒントanyクラス名:
# please KEEP ALL THE NAMES
-keepnames class ** { *; }
このようにして、不要なものを捨てながら、読み取り可能なスタックトレースを取得します。 :-)
保持する複数のクラス名を指定する方法に関心がある場合は、これらのクラスをコンマで区切ることができます。例:
-keepnames class com.foo.**,com.bar.** { *; }
また、これを使用して否定を使用することもできます。通常、難読化される独自のクラスのため、OSサードパーティライブラリを保持できます。
-keepnames class !com.foo.**,!com.bar.** { *; }
Proguard Documentation を参照してください。