Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I'm using ProGuard in AndroidStudio 1.2.1.1 with Gradle 1.2.3.

My Gradle's release build is configured like so:

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

I would like the private fields of classes to be obfuscated.

Here is my proguard config file (after many tries) as of now:

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

But I end up, after decompiling with androdd from AndroidGuard, with:

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

I know the use of this obfuscation is limited, but I would like googleApiClient to be renamed by ProGuard. How to do so?

Here is the refcard.

Is there any way to do the opposite of -keepclassmembernames?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
355 views
Welcome To Ask or Share your Answers For Others

1 Answer

Getting from this: How to tell ProGuard to keep private fields without specifying each field

According to ProGuard documenation the wildcard matches any field.

Top of that, You can use negators (!). (http://proguard.sourceforge.net/#manual/usage.html)

Attribute names can contain ?, *, and ** wildcards, and they can be preceded by the ! negator.

I am not so experienced in this field, so rather it is a guess, but easier to write in a new comment. Something like this should do the job (NOT TESTED):

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

May be you can use like this, but do not sure how it works with a negator first:

-keepclassmembers class * { //should find all classes 
    !private <fields>;    
    *; //should exclude everything except private fields, which should be obfuscated.
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...