Wie ich weiß, gibt es einige Klassen, die nicht verschleiert werden sollten und deren Namen wie "Aktivitäten" beibehalten werden müssen. Ich möchte jedoch, dass andere Klassen und Pakete in meinem Code umbenannt werden. hier ist build.gradle
innerhalb app Ordner: Plugin anwenden: 'com.android.application'Android: Proguard-Konfiguration zum Verschleiern von Klassennamen und -methoden
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "apt.eve.good.morning"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
}
Ich benutze diese proguard Konfiguration für meine Anwendung (app\proguard-rules.pro
):
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-useuniqueclassmembernames
-verbose
-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
native <methods>;
}
# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
-allowobfuscations class *
# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontwarn android.support.**
# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep
-keep @android.support.annotation.Keep class * {*;}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <methods>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <fields>;
}
-keepclasseswithmembers class * {
@android.support.annotation.Keep <init>(...);
}
Es Optimierung tun, sondern als Ich habe innerhalb meines classes.dex nachgesehen, alle Klassennamen sind unverändert geblieben. Also ich möchte wissen, was ich in meiner Konfigurationsdatei verpasst habe, die Klassen-/Methoden-Namen nicht verschleiert?
P.S.1 Ich habe mehrere Fragen gesucht, aber ich kann mir nicht vorstellen, was hier falsch ist.
P.S.2 Ich habe mein Android-Studio richtig konfiguriert und Änderungen auf Proguard-Konfiguration gilt ohne kein Problem auf meiner freigegebenen .apk-Datei.
posten Sie Ihre gradle Build-Datei – petey
Wo sehen Sie Ergebnis der Verschleierung überprüfen:
Viele weitere Informationen finden Sie im „Shrink Ihren Code und Ressourcen“ Artikel finden Sie hier? Ich bin mir nicht 100% ig sicher, aber ich denke, in meinem Projekt sind die verschleierten '.dex'-Dateien in' build/intermediates/transforms/dex/** ', jede andere Klasse/dex in' build/** 'sieht so aus Ausgabe des Build-Schritts vor der Verschleierung. Letztendlich sollte das resultierende '.apk' /' .aar 'verschleiert werden. Wenn Sie also dieses entpacken und die Klassen nicht verschleiert sind, dann funktioniert etwas nicht wie erwartet. – Ped7g
@ Ped7g Ich benutze Dex2jar, um Dex in meiner apk in JAR-Datei zu konvertieren. Dann benutze ich [jd-gui] (http://jd.benow.ca/#jd-gui-overview), um JAR-Datei zu dekompilieren, und wenn ich nachschaue, gibt es keine Namensverschleierung in meinem Code. Alle Klassen und Pakete blieben mit demselben Namen. – VSB