8

クラス名を難読化するようにプロガードしたいと思います。Proguard.cfg にこの行があります

-keepclasseswithmembers class * {
public static <fields>;
}

-keepnames class * implements java.io.Serializable
-keep public class com.google.**

そして、難読化されていないのはクラス名であることに気付きました。したがって、jdguiを実行すると、com/test/abcd/ActualClass.java public class ActualClassName extends Activity などが表示されます

さらに、実際のクラス名を返すメソッドが表示されます。お気に入り

 ActualClassname aa();

そして、次のようなステートメントをインポートします

 import com.abcd.ActualClassName

Proguard でクラス名自体を難読化するにはどうすればよいですか。アダプターが難読化されていないのは、アクティビティだけではありません。難読化が行われていますが、クラス名はありません。

上記のルールは、クラス名が難読化されるのを防ぐものですか?

更新: 上記のルールを削除したため、Android から何も拡張しない Utility クラスは難読化されていません。アクティビティ派生クラスのように保持されているクラスから参照されるクラスのクラス名を保持することについて、暗黙のルールがあるかどうか疑問に思っていますか? 名前が難読化されていないクラスには、いくつかの共通点があります。

1) 静的メソッド 2) アクティビティから派生したものやシリアライズ可能なもののように保持される他の型のインポート。3) 他のクラスのパラメーターを持つメソッドがあります (一部は保持する必要がある場合があります)。

ただし、これらのユーティリティ クラスを維持するように特に要求しているところはありません。

4

2 に答える 2

2

がそれらを見つけられるようにするために、同じ完全修飾クラス名を保持する必要があるコードに表示されるクラスがいくつかあります。Activity上記の 1 つの例は、マニフェストで文字列として完全な名前で定義されているため、すべてのクラスです。がクラスの名前を変更すると、Android はそれらを見つけることができなくなります。

典型的な Proguard 構成は、次のようないくつかの重要な行を含む Android SDK の Proguard 構成を参照します。

-keep public class * extends android.app.Activity
于 2012-05-08T06:55:42.980 に答える
1

あなたの問題はあなたの最初の行から来ていると思います:「-keepclasseswithmembers」にはクラス名が含まれているため、あなたの場合、静的フィールドを持つクラスはその名前を保持します。単に「-keepclassmembers」に変更すると、クラス名が難読化されますが、静的フィールドはそのまま残ります(これはあなたがやりたいと思います)。

とはいえ、なぜこれをやりたいのかわかりません。静的変数名を保持しようとしている場合、静的フィールドにアクセスする方法を見て、クラス名も保持したくないでしょうか? すべての静的変数名を保持しようとしているのはなぜですか?

于 2012-05-08T06:40:12.470 に答える