2013-06-11 8 views
8

Ich verwende ProGuard, um meine apk zu verschleiern, aber es gibt keine Änderungen in Klassen- und Methodennamen - sie sind die gleichen wie zuvor. Nur Variablennamen werden geändert.Wie kann ProGuard Methoden- und Klassennamen verschleiern?

Die meisten von ihnen erweitert Klassen wie Activity nicht; Es gibt einige Vererbung in meinem Code, aber es ist 100% von mir selbst geschrieben.

Ich verwende d2j-dex2jar und jd-gui, um Ergebnisse zu überprüfen.

Einige Klassen wegen Gson Nutzung, ist mein proguard-project.txt hier ausgeschlossen sind:

-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

haben Sie proguard im Freigabemodus aktiviert ?. Auch können Sie die Dateien aus apk extrahieren und überprüfen, ob Ihre Java-Dateien verschleiert sind – Raghunandan

+1

Ich rate ja, weil es Variablennamen verschleiert, so dass Proguard läuft –

Antwort

7

Klassen dann auf OK ist, wenn Sie dieses Problem mit Komponenten (Aktivität, Dienstleistungen oder BroadcastReceivers) haben.

Proguard verschleiert die Namen der Komponenten nicht.


Und wenn Sie über die Klassen nehmen, die als

definiert
-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 

können auch ihren Namen, weil der keep Option nicht geändert werden.


einen Versuch bilden mit -keep public class * { public protected *; } Linie

+0

Es gibt eine Aktivität für AndEngine, und es ist fast alles. Rest der Klassen sind 100% benutzerdefiniert. –

+0

@AdrianAdamczyk sehe meine Bearbeitung ... bin ich richtig bis jetzt? –

+0

Diese Klassen können aufgrund der GSON-Serialisierung nicht verschleiert werden, aber es gibt viele andere Klassen, die verschleiert werden sollten, und sie sind nicht - diejenigen, die Logikteil des Spiels enthalten. –

2

Einige Zeit Klassennamen Verschleierungs Entfernen nicht Ursache für „Buttermesser“ arbeiten So unten Regeln in Ihrem proguard Datei hinzufügen.

# 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>; 
} 

HINWEIS: Verwenden Sie die obigen Regeln nur, wenn Sie "Butterknife" verwenden.

1

butter alte Anweisungen definierten Code für proguard dieses Problem verursacht, wenn Sie Buttermesser und eine ältere Version wie die Version 7, stellen Sie sicher, dass Sie in Ihren proguared Regeln

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

Dies diese Zeile nicht haben verwenden ist wodurch alle Klassennamen nicht verschleiert werden.

Verwenden Sie unter Config für Butterknife, ist besser und zukunftssicher im Vergleich zu einem anderen Vorschlag.

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

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

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