2012-05-08 17 views
6

proguardにクラス名を難読化したいと思います。私はProguard.cfgProguardにクラス名の難読化を指示する方法

-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など

また、実際のクラス名を返すメソッドがあります。

import com.abcd.ActualClassName 

などのような

ActualClassname aa(); 

、輸入文はどのように私はProGuardのは、クラス名自体を難読化するのですか。それは私の見ているアクティビティだけではなく、私のアダプターは難読化されていません。まあ、難読化は進んでいますが、クラス名はありません。

上記のルールは、クラス名が難読化されないようにするものですか?

更新:私は以来、上記のルールを削除し、Androidから何も拡張しないユーティリティクラスは難読化されていません。私は今、アクティビティの派生クラスのように保持されているクラスから参照されるクラスのクラス名を保持する暗黙のルールがあるのだろうか?名前が難読化されていないクラスには、共通するものがいくつかあります。

1)静的メソッド 2)アクティビティまたは直列化可能なもののように保持されている他の型のインポート。 3)他のクラスのパラメータを持つメソッドがあります(そのうちのいくつかは保持する必要があります)。

ただし、これらのユーティリティクラスを保存する必要がある場所は特にありません。

+0

。あなたはこの問題の解決策を見つけましたか? – lnreddy

答えて

1

あなたの問題は最初の行から来ていると思います: '-keepclasseswithmembers'にはクラス名が含まれているので、静的フィールドを持つクラスはその名前を保持します。単純に '-keepclassmembers'に変更すると、クラス名がわかりにくくなりますが、静的フィールドはそのまま残しておきます。

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

+0

私はその行を削除しました。私は今、保持されているものから拡張されていない、保持されているユーティリティクラスを見ています。それは、保管されているクラスで使用されているだけです。 –

+1

あなたは完全な.cfgファイルを置くことができますか? – alexc

3

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

典型的なProGuardの設定ファイルは、このようないくつかの重要な行が含まれますAndroidのSDKでProGuardの設定ファイルを参照します:私は同じ問題に実行しています

-keep public class * extends android.app.Activity 
+0

私はすべてのクラス名が保持されているのを見ています。私は以来、-keepclasseswithmembersを削除しましたが、依然として同じ結果になっていますか? –

+0

たとえば、私はユーティリティクラスを持っており、それは保持されています。したがって、あなたのAndroidプロジェクトで他のクラスを参照するか、他のクラスによって参照されるクラス名を保持する暗黙のルールがあるかもしれません。 –

+0

(単に第1の原則をチェックしています)、 'project.properties'の' proguard.config'の定義を解除しましたか? 、そして値は何ですか? –

関連する問題