2015-05-29 21 views
14

Używam ProGuard w AndroidStudio 1.2.1.1 z Gradle 1.2.3.Zasłanianie pól prywatnych za pomocą ProGuard

My Gradle prasowa build jest skonfigurowany tak:

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

Chciałbym prywatnych pól klas być ukrywane.

Oto mój plik PROGUARD config (po wielu próbach) już teraz:

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

Ale w końcu, po decompiling z androdd od AndroidGuard z:

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

Wiem użycie tego zaciemniania jest ograniczone, ale chciałbym zmienić nazwę na ProGuard na googleApiClient. Jak to zrobić? To jest .

Czy jest jakiś sposób, aby zrobić coś przeciwnego niż -keepclassmembernames?

+0

jest googleApiClient jedynym unobfuscated pole lub czy jest takie samo dla wszystkich pól? –

+1

Chciałbym to dla wszystkich prywatnych pól. – shkschneider

Odpowiedz

8

Pierwsze z tego: How to tell ProGuard to keep private fields without specifying each field

Według ProGuard documenation wildcard pasuje do każdego pola .

Do tego możesz użyć negatorów (!). (http://proguard.sourceforge.net/#manual/usage.html)

Nazwy atrybutów mogą zawierać?, * Oraz ** symbole wieloznaczne i mogą być poprzedzone! negator.

Nie jestem tak doświadczony w tej dziedzinie, więc raczej jest to domysł, ale łatwiej jest pisać w nowym komentarzu. Coś jak to powinno załatwić sprawę (nie testowane):

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

może być można używać tak, ale nie wiem, jak to działa z pierwszego na negator:

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

Użyłem klasy -keepclassmembers my.package {! Private ; chronione ; publiczny ; ; } 'i dostałem to, co chciałem: pola z nazwami' a', 'b',' c' itd. Wiedziałem, że ma to związek z negatorami, dzięki za doprowadzenie mnie do właściwego użycia. Udoskonalę moje osobiste wykorzystanie, ale to jest odpowiedź, której szukałem. – shkschneider

+0

Oto mój ostatni plik ProGuard, który działa błąd Androida # 78377: https://gist.github.com/shkschneider/a1c81780cd1f35a7037d – shkschneider

+0

Dziękuję za odpowiedź i za nagrodę! Cieszę się, że udało Ci się wypracować na podstawie moich wskazówek, również dzięki za oddanie na github, to było dla mnie również dobre doświadczenie. – czupe

Powiązane problemy