2011-08-10 3 views
2

I持って、次のコード自分のアプリケーションのproguard.cfg(はい、私はまた、proguard.config=proguard.cfgbuild.propertiesを持っている):難読化を有効にするためにproguard.cfgに入れる必要はありますか?

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class * extends android.app.backup.BackupAgentHelper 
-keep public class * extends android.preference.Preference 
-keep public class com.android.vending.licensing.ILicensingService 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclasseswithmembernames class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembernames class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

はまだ、私は難読化されていないシンボルを含むAndroidマーケットからエラーレポートを見て驚きましたスタックトレース

私はProGuardのエクスポートされたバージョンをアップロードしていることを知っています。

+1

実際にProGuardを使用してビルドしていますか?そのファイルは十分ではありません。ProGuardがビルドログに表示されるはずです。あなたは、ビルドされたアプリケーションを見て、それが難読化されていることを確認する必要があります。 – ThomasW

+0

@ThomasWはい私です。プロジェクトには 'dump.txt'、' mapping.txt'、 'seeds.txt'、' usage.txt'の4つのファイルを持つ 'proguard'フォルダがあります。ファイル 'mapping.txt'は、ActivityクラスやPreferencesクラスのようないくつかのクラスを除いて、大部分のシンボルが単一の文字に難読化されていることを示しています。私は 'proguard.cfg'にそれらのための' -keep'文があることに気付きました。それが理由だろうか?返信+1。 – ateiob

+0

はい、あなたのアプリが正常に動作するためには、一部のクラスが残念ながら残っている必要があります。たとえば、ビュー・クラスは、XMLファイルを使用したレイアウトが機能するためには同じままにする必要があります。特定のクラスやメソッド名を期待する他のコードとやりとりするコードの部分は、難読化することはできません。内部的に使用されるコードで、難読化することができます。おそらくそれはあなたが見ているものですか? – ThomasW

答えて

2

あなたのスタックトレースがあなたのproguard.cfg--keep文で指定された難読化されていないクラス名やメソッドが含まれている場合は、その答えはあなたの質問の本文にある...

はまたによる課題へreflectionによってもたらされることに注意してください、ProGuardのは、自動的に次のように続けて:

  • にClass.forName( "工ass")
  • SomeClass.class
  • SomeClass.class.getField(「S omeField ")
  • SomeClass.class.getDeclaredField(" someField ")
  • SomeClass.class.getMethod(" のsomeMethod」、新しいクラス[] {})
  • SomeClass.class.getMethod( "のsomeMethod"、新しいですクラス[] {} A.class)
  • SomeClass.class.getMethod( "のsomeMethod"、新しいクラス[] {A.class、B.class})
  • SomeClass.class.getDeclaredMethod( "のsomeMethod"、新しいですクラス[] {})
  • SomeClass.class.getDeclaredMethod( "someMethod"、新しいクラス[] {A.class})
  • SomeClass.class.getDecl aredMethod( "のsomeMethod"、新しいクラス[] {A.class、B.class})
  • AtomicIntegerFieldUpdater.newUpdater(SomeClass.class、 "someField")
  • AtomicLongFieldUpdater.newUpdater(SomeClass.class、 "someField")
  • AtomicReferenceFieldUpdater.newUpdater(SomeClass.class、SomeType.class、 "someField")
また

noteつまり、あなたは何とかProGuardので生成されたファイルproguard/mapping.txt、すべてを非難読化できるツールReTraceを提供する場合。

つまり、難読化を有効にするためにproguard.cfgに何かを入れる必要はありません。デフォルトのオプションで十分です。理論的には、デフォルト--keepオプションの一部を削除するかもしれませんが、ProGuardののドキュメントは、具体的と述べている:適切な結果を得るために

が、あなたは少なくとも、あなたが処理している コードを多少理解しておく必要があります。 反射の多くを実行する難読化コードでは、の試行錯誤が必要な場合があります。特に、コードの内部についての必要な情報は が必要です。

関連する問題