In meiner Android App möchte ich einige Funktionen mit eingeschaltetem Proguard testen.
Ich muss es nicht wirklich "debuggen", aber ich möchte, dass Proguard ausgeführt wird, wenn ich in Eclipse auf "Ausführen" drücke. Ich möchte die Binärdatei nicht jedes Mal exportieren (also im Release-Modus) und als apk speichern und zum Testen auf das Gerät bringen.
Gibt es eine Möglichkeit, Proguard auf diese Weise auszuführen?
Aktualisieren:
Dies scheint möglich zu sein, wenn Sie Eclipse nicht verwenden . Da der Fragentitel Eclipse nicht enthält, gibt es mehrere richtige Antworten auf diese Frage.
Antworten:
Alte Antwort:
http://developer.android.com/tools/help/proguard.html
ProGuard wird nur ausgeführt, wenn Sie Ihre Anwendung im Release-Modus erstellen. Sie müssen sich also nicht mit verschleiertem Code befassen, wenn Sie Ihre Anwendung im Debug-Modus erstellen.
Wenn Sie Ihre Anwendung im Release- Modus erstellen , indem Sie entweder Ant Release ausführen oder den Export-Assistenten in Eclipse verwenden, überprüft das Build-System automatisch, ob die
proguard.config
Eigenschaft festgelegt ist. Wenn dies der Fall ist, verarbeitet ProGuard automatisch den Bytecode der Anwendung, bevor alles in eine APK- Datei gepackt wird. Das Erstellen im Debug-Modus ruft ProGuard nicht auf, da das Debuggen dadurch umständlicher wird.Update: 13-3-2016
Dies ist mit dem neuen Gradle-Build-System möglich. Sie müssen Set
minifyEnabled
zutrue
Ihrer build.gradle Datei. Im Allgemeinen läuft Pro-Guard im Release- Modus. Es stehen andere Optionen zur Verfügung, z. B. das Verkleinern von Ressourcen. Sie finden einige nützliche Informationen unter http://tools.android.com/tech-docs/new-build-systemSchauen Sie sich auch @ an
http://developer.android.com/tools/building/configuring-gradle.html
android { ... buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
quelle
Wenn Sie den gesamten Erstellungsprozess für Sie vereinfachen möchten, sollten Sie zu Gradle und Android Studio IDE wechseln.
Dann können Sie Ihrer build.gradle-Datei ganz einfach Folgendes hinzufügen, um ProGuard auszuführen:
android { buildTypes { release { } debug { minifyEnabled true proguardFile 'proguard-android.txt' zipAlignEnabled true } } }
Dadurch wird ProGuard auf Ihrem Debug-Build ausgeführt, der mit der Datei "proguard-android.txt" konfiguriert ist, die im Stammordner Ihres Projekts abgelegt werden soll. Außerdem wird Ihre apk zip-ausgerichtet (entfernen Sie einfach "zipAlignEnabled true", wenn Sie nicht möchten, dass dies geschieht). Wenn Sie dasselbe für Ihren Release-Build tun möchten, fügen Sie einfach diese drei Zeilen unter "Release" hinzu.
Etwas abseits des Themas: Dinge wie das Hinzufügen von Abhängigkeiten, das Signieren Ihrer apk oder das Hinzufügen anderer benutzerdefinierter Aufgaben zu Ihrem Erstellungsprozess sind mit gradle ebenfalls viel unkomplizierter. Darüber hinaus können Sie Ihre apk nicht nur über die Android Studio IDE erstellen, sondern auch über einen einfachen Befehl in der Befehlszeile (z. B. ./gradlew assembleDebug). Wenn Sie also in einem Team arbeiten, ist der Einrichtungsprozess für neue Mitglieder nur einen "./gradlew assembleDebug" entfernt. Ohne dass eine IDE-Konfiguration erforderlich ist. Das Importieren Ihres Projekts einschließlich aller Abhängigkeiten ist so einfach wie ein Ein-Klick-Vorgang
BEARBEITEN: Ab Gradle Android Build Tools Version 0.14.0 haben sich die Eigenschaftsnamen geändert ( http://tools.android.com/tech-docs/new-build-system ):
Ich habe den obigen Code aktualisiert.
quelle
In Bezug auf benutzerdefinierte Ant-Builds (und basierend auf Victors Antwort) funktioniert das Hinzufügen der folgenden Dateien zu meiner build.xml-Datei für mich:
<target name="-debug-obfuscation-check"> <!-- enable proguard even in debug mode --> <property name="proguard.enabled" value="true"/> <!-- Secondary dx input (jar files) is empty since all the jar files will be in the obfuscated jar --> <path id="out.dex.jar.input.ref" /> </target>
Beachten Sie, dass ich die Datei out.dex.jar.input.ref überschreiben (tatsächlich voreingestellt) musste. Andernfalls wird bei der späteren Ausführung von dx versucht, nicht disjunkte Jars zusammenzuführen und die DexException auszulösen: Mehrere Dex-Dateien definieren Xxx.
quelle
Es ist möglich, wenn Sie mit Ant bauen. Siehe Android Maßarbeit mit Ant , wie Sie Ihr Projekt mit Ameise zu bauen. Überschreiben Sie dann einfach in der build.xml des Projekts das Ziel "-debug-obfuscation-check" und setzen Sie proguard.enabled auf true:
<target name="-debug-obfuscation-check"> <!-- proguard is never enabled in debug mode --> <property name="proguard.enabled" value="true"/> </target>
quelle
Mit Android Studio können Sie die
-dontobfuscate
Option in Ihrer Proguard-Regeldatei verwenden, und der Debugger funktioniert einwandfrei. Ich bin mir nicht sicher, ob es auch mit Eclipe funktioniert.quelle