it-swarm.com.de

Ist es möglich, Proguard im Debug-Modus zu verwenden?

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 Run in Eclipse 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 übertragen.

Gibt es eine Möglichkeit, Proguard auf diese Weise auszuführen?

pdate:

Es scheint, dass dies möglich ist, wenn Sie nicht mit Eclipse; Da der Fragentitel Eclipse nicht enthält, gibt es mehrere richtige Antworten auf diese Frage.

73
frankish

Alte Antwort:

http://developer.Android.com/tools/help/proguard.html

ProGuard wird nur ausgeführt, wenn Sie Ihre Anwendung im Freigabemodus erstellen, sodass Sie sich beim Erstellen Ihrer Anwendung im Debug-Modus nicht mit verschleiertem Code befassen müssen.

Wenn Sie Ihre Anwendung im Modus release erstellen, indem Sie entweder ant release ausführen oder Exportieren Wizard in Eclipse) verwenden, prüft das Build-System automatisch, ob das proguard.config Eigenschaft ist gesetzt. Wenn dies der Fall ist, verarbeitet ProGuard automatisch den Bytecode der Anwendung, bevor alles in eine .apk Datei gepackt wird. Durch das Erstellen im Debug-Modus wird ProGuard nicht aufgerufen, da das Debuggen dadurch umständlicher wird.

Aktualisierung: 13-3-2016

Mit dem neuen Gradle-Build-System ist dies möglich. Sie müssen minifyEnabled in Ihrer build.gradle Datei auf true setzen. Im Allgemeinen läuft Pro-Guard im Release Modus. Es gibt andere Möglichkeiten, wie zum Beispiel das Verkleinern von Ressourcen. Sie finden einige nützliche Informationen @ http://tools.Android.com/tech-docs/new-build-system

Schauen Sie doch auch mal bei

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'
    }
   }
 }
40
Raghunandan

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 einfach Folgendes hinzufügen, um ProGuard auszuführen:

Android {
    buildTypes {
        release {
        }
        debug {
            minifyEnabled true
            proguardFile 'proguard-Android.txt'
            zipAlignEnabled true
        }
    }
}

Dadurch wird ProGuard in Ihrem Debug-Build ausgeführt, der mit der Datei "proguard-Android.txt" konfiguriert ist, die im Stammverzeichnis Ihres Projekts abgelegt werden sollte. Und außerdem wird deine Apk auf Zip ausgerichtet (entferne einfach "zipAlignEnabled true", wenn du nicht willst, dass das passiert). 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-Datei oder das Hinzufügen anderer benutzerdefinierter Aufgaben zu Ihrem Build-Prozess sind mit gradle ebenfalls viel unkomplizierter. Darüber hinaus können Sie Ihre apk nicht nur über Android Studio IDE, sondern auch über einen einfachen Befehl in der Befehlszeile (zB ./gradlew assembleDebug) erstellen. Also, wenn Sie arbeiten In einem Team ist der Einrichtungsprozess für neue Mitglieder nur ein "./gradlew assembleDebug" entfernt. Es ist überhaupt keine IDE Konfiguration erforderlich. 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 ):

  • BuildType.runProguard -> minifyEnabled
  • BuildType.zipAlign -> zipAlignEnabled

Ich habe den obigen Code aktualisiert.

72
MrMaffen

In Bezug auf benutzerdefinierte Ant-Builds (und basierend auf Victors Antwort) funktioniert das Hinzufügen der folgenden Informationen 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 musste (tatsächlich voreingestellt). Andernfalls wird beim späteren Ausführen von dx versucht, nicht-disjunkte Jars zusammenzuführen und die DexException auszulösen: Mehrere Dex-Dateien definieren Xxx.

11
Joseph Johnson

Es ist möglich, wenn Sie mit Ant bauen. Lesen Sie Android Custom Build mit Ant , wie Sie Ihr Projekt mit Ant erstellen. Ü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>
7
Victor Ionescu

Mit Android Studio können Sie die Option -dontobfuscate In Ihrer Proguard-Regeldatei verwenden, und der Debugger funktioniert einwandfrei. Ich bin mir nicht sicher, ob es auch mit Eclipe funktioniert.

0
sealskej