Wie zu sagen, ProGuard zu verschleiern Methode und class-Namen?
Ich bin mit ProGuard zu verschleiern meine apk, aber es gibt keine änderungen in der Klasse und Methode Namen - Sie sind die gleichen wie zuvor. Nur Variablen-Namen geändert werden.
Meisten von Ihnen nicht verlängert Klassen wie Aktivität; es gibt einige Vererbung in meinem code, aber es ist 100% von mir selbst geschrieben.
Ich bin mit d2j-dex2jar und jd-gui zu überprüfen, Ergebnisse.
Einige Klassen sind ausgeschlossen, weil der GSON-Nutzung, hier ist meine 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 ----------
- haben Sie aktiviert proguard im release-Modus?. Sie können auch extrahieren Sie die Dateien aus dem apk und überprüfen Sie, ob Ihre java-Dateien werden verschleiert
- ich vermute ja, denn es sind die verborgenen Variablen-Namen, so proguard ausgeführt wird
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie dieses problem haben, mit Komponenten (Aktivitäten, Dienstleistungen oder BroadcastReceivers) Klassen, dann ist das OK.
Proguard nicht verschleiern die Namen der Komponenten.
Und wenn Sie sich um die Klassen, die definiert, wie
AUCH Ihr name kann nicht geändert werden, weil der
keep
option.Machen Sie einen Versuch mit dem entfernen
-keep public class * { public protected *; }
Linie-keep public class * { public protected *; }
Linie...Einige Zeit Klasse name Verschleierung nicht funktionieren, weil der "butterknife"
So fügen Sie die unten angeführten Regeln in Ihrem proguard-Datei.
HINWEIS: Verwenden Sie den oben genannten Regeln nur, wenn Sie mit "butterknife".
Butterknife alten Anweisungen definiert code für proguard verursacht dieses Problem, wenn Sie mit butterknife und eine ältere version, z.B. version 7, stellen Sie sicher, dass Sie nicht über diese Zeile in deiner proguared Regeln
Dadurch verursacht wird, dass alle class-Namen nicht verschleiert.
Unter config für butterknife, ist besser und zukunftssicher zu vergleichen, um einen anderen Vorschlag.