16

AndroidStudio 1.2.1.1 と Gradle 1.2.3 で ProGuard を使用しています。

私のGradleのリリースビルドは次のように構成されています:

minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
shrinkResources true

クラスのプライベート フィールドを難読化したいと考えています。

これが私のproguard構成ファイルです(何度も試行した後)。

-allowaccessmodification
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''
-verbose
[...]

しかしandrodd、AndroidGuard から逆コンパイルした後、次のようになります。

private com.google.android.gms.common.api.GoogleApiClient googleApiClient;

googleApiClientこの難読化の使用が制限されていることは承知していますが、ProGuard による名前の変更を希望しています。その方法は?

こちらがレファレンスカードです。

の反対を行う方法はあります-keepclassmembernamesか?

4

1 に答える 1

12

これからの取得: 各フィールドを指定せずにプライベートフィールドを保持するようProGuardに指示する方法

ProGuardのドキュメントによると、ワイルドカードはどのフィールドにも一致します。

その上、否定記号 (!) を使用できます。( http://proguard.sourceforge.net/#manual/usage.html )

属性名には、?、*、および ** のワイルドカードを含めることができ、それらの前に ! を付けることができます。否定者。

私はこの分野の経験があまりないので、推測ですが、新しいコメントを書く方が簡単です。このようなものは仕事をするはずです(テストされていません):

-keepclassmembers class * { //should find all classes 
    !private <fields>;    
    <methods>;
    <init>; //and keep every field, method, constructor apart from private fields
}

このように使用できるかもしれませんが、最初に否定子でどのように機能するかわかりません:

-keepclassmembers class * { //should find all classes 
    !private <fields>;    
    *; //should exclude everything except private fields, which should be obfuscated.
}
于 2015-06-05T01:07:11.950 に答える