web-dev-qa-db-ja.com

Proguardはクラス名を保持しますか?

こんにちは、Androidアプリを作成しています。アプリケーションを難読化するようにProguardを設定しています。ただし、クラスローダーを使用して、アプリケーションにさまざまな拡張機能を動的にロードします。 Proguardが特定のクラス名を難読化しないようにする方法を教えてください。

26
Nik

Proguard.cfgで-keepnamesオプションを使用します

マニュアルを参照してください https://www.guardsquare.com/en/proguard/manual/usage#keepoptions

-keepnames class_specification

-keep,allowshrinking class_specificationの短縮形

縮小段階で削除されない場合、名前が保持されるクラスおよびクラスメンバーを指定します。たとえば、Serializableインターフェイスを実装するクラスのすべてのクラス名を保持して、処理されたコードが元のシリアル化されたクラスと互換性を保つようにすることができます。まったく使用されていないクラスは引き続き削除できます。難読化する場合にのみ適用されます。

37
Zaid Daghestani

これにより、クラス名がそのまま保持されます。

-keepnames class com.somepackage.* 
30
tarkeshwar

ProGuardを変更したくないすべての人のための便利なヒントanyクラス名:

# please KEEP ALL THE NAMES
-keepnames class ** { *; }

このようにして、不要なものを捨てながら、読み取り可能なスタックトレースを取得します。 :-)

7
mreichelt

保持する複数のクラス名を指定する方法に関心がある場合は、これらのクラスをコンマで区切ることができます。例:

-keepnames class com.foo.**,com.bar.** { *; }

また、これを使用して否定を使用することもできます。通常、難読化される独自のクラスのため、OSサードパーティライブラリを保持できます。

-keepnames class !com.foo.**,!com.bar.** { *; }

Proguard Documentation を参照してください。

0
k_o_