2013-06-11 9 views
8

Używam ProGuarda do zaciemniania mojego apk, ale nie ma zmian w nazwach klas i metod - są one takie same jak wcześniej. Zmieniane są tylko nazwy zmiennych.Jak powiedzieć ProGuardowi, aby zaciemnił nazwy metod i klas?

Większość z nich nie rozszerza zajęć takich jak Activity; jest trochę dziedzictwa w moim kodzie, ale jest w 100% napisane przeze mnie.

Używam d2j-dex2jar i jd-gui do sprawdzania wyników.

Niektóre zajęcia są wyłączone z powodu użycia GSON, tu jest mój PROGUARD-project.txt:

-keep class com.google.ads.** # Don't proguard AdMob classes 
-dontwarn com.google.ads.** # Temporary workaround for v6.2.1. It gives a warning that you can ignore 

# Add any classes the interact with gson 
-keep class com.revicostudio.gravityrun.playerdata.PlayerData 
-keep class com.revicostudio.gravityrun.playerdata.SettingsDescriptor 
-keep class com.revicostudio.gravityrun.playerdata.ShipStatus 
-keep class com.revicostudio.gravityrun.descriptors.ShipDescriptor 
-keep class com.revicostudio.gravityrun.descriptors.Ships 
-keep class com.revicostudio.gravityrun.game.galaxies.Galaxies 

-keep public class com.badlogic.** {*;} 



##---------------Begin: proguard configuration common for all Android apps ---------- 
-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontskipnonpubliclibraryclassmembers 
-dontpreverify 
-verbose 
-dump class_files.txt 
-printseeds seeds.txt 
-printusage unused.txt 
-printmapping mapping.txt 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-allowaccessmodification 
-keepattributes *Annotation* 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 
-repackageclasses '' 

-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 
-dontnote com.android.vending.licensing.ILicensingService 

# Explicitly preserve all serialization members. The Serializable interface 
# is only a marker interface, so it wouldn't save them. 
-keepclassmembers class * implements java.io.Serializable { 
    static final long serialVersionUID; 
    private static final java.io.ObjectStreamField[] serialPersistentFields; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 

# Preserve all native method names and the names of their classes. 
-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); 
} 

# Preserve static fields of inner classes of R classes that might be accessed 
# through introspection. 
-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

# Preserve the special static methods that are required in all enumeration classes. 
-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keep public class * { 
    public protected *; 
} 

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 
##---------------End: proguard configuration common for all Android apps ---------- 

##---------------Begin: proguard configuration for Gson ---------- 
# Gson uses generic type information stored in a class file when working with fields. Proguard 
# removes such information by default, so configure it to keep all of it. 
-keepattributes Signature 

# For using GSON @Expose annotation 
-keepattributes *Annotation* 

# Gson specific classes 
-keep class sun.misc.Unsafe { *; } 
#-keep class com.google.gson.stream.** { *; } 

# Application classes that will be serialized/deserialized over Gson 
-keep class com.google.gson.examples.android.model.** { *; } 

##---------------End: proguard configuration for Gson ---------- 
+0

Czy włączono funkcję proguard w trybie zwolnienia ?. Możesz także wyodrębnić pliki z pliku apk i sprawdzić, czy twoje pliki java są zaciemnione. – Raghunandan

+1

Zgaduję, że tak, ponieważ istnieją ukryte nazwy zmiennych, więc program proguard działa. –

Odpowiedz

7

Jeśli masz ten problem z komponentami (aktywność, usług lub BroadcastReceivers) zajęcia to jest OK.

Program Proguard nie zaciemnia nazwanych składników.


A jeśli odbywają się zajęcia, które zdefiniowane jako

-keep class com.revicostudio.gravityrun.playerdata.PlayerData 
-keep class com.revicostudio.gravityrun.playerdata.SettingsDescriptor 
-keep class com.revicostudio.gravityrun.playerdata.ShipStatus 
-keep class com.revicostudio.gravityrun.descriptors.ShipDescriptor 
-keep class com.revicostudio.gravityrun.descriptors.Ships 
-keep class com.revicostudio.gravityrun.game.galaxies.Galaxies 

także ich nazwa nie może zostać zmieniona, ponieważ keep opcji.


Zrób spróbuj usuwania -keep public class * { public protected *; } linię

+0

Jest jedna czynność dla AndEngine i prawie wszystko. Reszta zajęć jest w 100% niestandardowa. –

+0

@AdrianAdamczyk zobacz moją edycję ... mam rację do tej pory? –

+0

Klasy te nie mogą być zaciemniane z powodu serializacji GSON, ale istnieje wiele innych klas, które powinny zostać zaciemnione, a nie są - te, które zawierają część logiczną gry –

2

Jakiś czas nazwa klasy zaciemniania nie działają przyczyną „butterknife” Więc dodać poniżej zasad w pliku PROGUARD.

# Butterknife 
-dontwarn butterknife.internal.** 
-keep class butterknife.** { *; } 
-keep class **$$ViewInjector { *; } 
-keepclasseswithmembernames class * { 
    @butterknife.InjectView <fields>; 
} 
-keepclasseswithmembernames class * { 
    @butterknife.OnClick <methods>; 
    @butterknife.OnEditorAction <methods>; 
    @butterknife.OnItemClick <methods>; 
    @butterknife.OnItemLongClick <methods>; 
    @butterknife.OnLongClick <methods>; 
} 

UWAGA: Używaj powyższych zasad tylko, gdy używasz "noża maściowego".

stare instrukcje
1

butterknife jest zdefiniowany kod dla PROGUARD powoduje ten problem, jeśli używasz butterknife i starszej wersji jak w wersji 7, upewnij się, że nie ma tej linii w swoich proguared zasad

-keepnames class * { @butterknife.Bind *;} 

Jest powodując, że wszystkie nazwy klas nie będą zaciemniane.

Skorzystaj z poniższej konfiguracji dla noża maślanego, jest lepszy i bardziej odporny na przyszłość w porównaniu z inną propozycją.

# ButterKnife 
-keep class butterknife.** { *; } 
-dontwarn butterknife.internal.** 
-keep class **$$ViewBinder { *; } 

-keepclasseswithmembernames class * { 
    @butterknife.* <fields>; 
} 

-keepclasseswithmembernames class * { 
    @butterknife.* <methods>; 
} 
Powiązane problemy