2016-03-07 12 views
6

Wenn ich nicht meine App minify ich erreiche die maximale Anzahl der Methoden und den Aufbau der Dex-Datei fehlschlägt. Dies kann vermieden werden, indem minify in build.gradle aktiviert wird. Der Nachteil ist jedoch, dass jetzt der Code verschleiert wird. Das ist OK für den Release-Build, aber es ist problematisch für einen Debug-Build.Minify Android-App, aber nicht verschleiern

Gibt es eine Möglichkeit zu sagen, Gradle eine Debug-Build zu minimieren, aber nicht verschleiern?

Antwort

19

Ja, Sie können ProGuard verwenden, um Debug-Builds zu minimieren.

Der Schlüssel ist die Verwendung der Option -dontobfuscate in der ProGuard-Konfiguration für den Debug-Build.

Verwenden Sie diese Einstellung in build.gradle:

buildTypes { 
    release { 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 
      'proguard-rules.pro' 
    } 
    debug { 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 
      'proguard-rules.pro', 
      'proguard-rules-debug.pro' 
    } 
} 

Schreiben Sie Release ProGuard Konfiguration proguard-rules.pro.

Verwenden Sie die gleiche Konfiguration für die Freigabe und das Debuggen. Auf diese Weise stellen Sie sicher, dass kein notwendiger Code entfernt wird. Und Debug Minification bricht den Build nicht.

Fügen Sie zusätzliche ProGuard-Konfigurationsdatei proguard-rules-debug.pro für Debug-Build hinzu. Es sollte Regeln enthalten, die nur zum Debuggen verwendet werden. In diesem Fall wird nur hinzufügen:

-dontobfuscate 
2

Eine einfache Lösung ist minifyEnabled true und useProgaurd false in der Build-Konfiguration hinzuzufügen. Aber Code Schrumpfung wird nicht empfohlen für Debug baut aus offiziellen docs Beachten Sie, dass Code Schrumpfung verlangsamt die Build-Zeit, so sollten Sie es vermeiden, auf Ihrer Debug-Build wenn möglich zu verwenden. Referenz https://developer.android.com/studio/build/shrink-code.html

1

Antwort Tomik ist technisch korrekt, aber es unterstützt nicht Instant Run Verwendung für Ihre baut. Wie in den official guide on code-shrinking wies darauf hin:

Code aktiviert mit Instant-Run schrumpf Wenn Code schrumpft wichtig ist Sie während schrittweise Ihre App bauen, versuchen, den experimentellen Code shrinker, die in die Android-Plugin für Gradle gebaut sind. Dieser Shrinker unterstützt Instant Run im Gegensatz zu ProGuard.

Sie können das Android Plugin Shrinker mit den gleichen Konfigurationsdateien wie ProGuard konfigurieren. Der Android-Plug-In-Verkleinerer verschleiert oder optimiert jedoch nicht Ihren Code - er entfernt nur nicht verwendeten Code. Sie sollten es also nur für Ihre Debug-Builds verwenden und ProGuard für Ihre Release-Builds aktivieren, damit der APK-Code Ihrer Version verschleiert und optimiert wird.

android { 
    buildTypes { 
     debug { 
      minifyEnabled true 
      useProguard false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 
        'proguard-rules.pro' 
     } 
} 

diese Weise wird der Code in Ihrem Debug-Build nicht optimiert erhalten noch verschleiert, sondern erhalten geschrumpft:

So ist die richtige Lösung für Setup bauen Sie Ihre Debug so sein würde. Dies gilt auch bei Verwendung von Instant Run.