2016-03-07 7 views
6

Quando non eseguo il minify dell'app, raggiungo il conteggio del metodo massimo e non riesco a creare il file dex. Questo può essere evitato abilitando minify in build.gradle. Lo svantaggio, tuttavia, è che ora il codice viene offuscato. Questo è OK per la versione di rilascio, ma è problematico per una build di debug.Minimizza l'app per Android ma non la offusca

C'è un modo per dire a gradle di minimizzare una build di Debug ma non di offuscarla?

risposta

19

Sì, è possibile utilizzare ProGuard per ridurre le build di debug.

Il tasto consente di utilizzare l'opzione -dontobfuscate nella configurazione di ProGuard per la creazione del debug.

Utilizzare questa impostazione 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' 
    } 
} 

Scrivi la configurazione ProGuard disperdere proguard-rules.pro.

Utilizzare la stessa configurazione per rilascio e debug. In questo modo si garantisce che nessun codice necessario venga rimosso. E il debug minification non rompe la build.

Aggiungere il file di configurazione ProGuard aggiuntivo proguard-rules-debug.pro per la creazione del debug. Dovrebbe contenere regole usate solo per il debug. In questo caso solo aggiungere:

-dontobfuscate 
2

Una soluzione semplice è quella di aggiungere minifyEnabled true e useProgaurd false all'interno della configurazione di generazione. Ma il restringimento del codice non è consigliato per debug build da documenti ufficiali Si noti che il restringimento del codice rallenta il tempo di costruzione, quindi si dovrebbe evitare di usarlo nella propria build di debug se possibile. Riferimento https://developer.android.com/studio/build/shrink-code.html

1

risposta di Tomik è tecnicamente corretto, ma non supporta l'utilizzo Instant Run per la vostra build. Come sottolineato nella official guide on code-shrinking:

Abilita codice di restringimento con Run Immediata Se il codice contrazione è importante a voi mentre gradualmente costruire la vostra applicazione, provare il sperimentale strizzacervelli codice che è costruito nel plugin di Android per Gradle. Questo shrinker supporta l'esecuzione istantanea, a differenza di ProGuard.

È possibile configurare il Shrinker del plug-in Android utilizzando gli stessi file di configurazione come ProGuard. Tuttavia, il limitatore di plug-in Android non nasconde o ottimizza il codice: rimuove solo il codice inutilizzato. Quindi dovresti usarlo solo per le tue build di debug e abilitare ProGuard per i tuoi build di rilascio in modo tale che il codice APK di rilascio sia offuscato e ottimizzato.

Quindi la soluzione corretta sarebbe quella di configurare il debug in questo modo:

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

In questo modo il codice nel tuo build di debug non viene ottimizzato né offuscato, ma sarà ottenere ridotto. Questo vale anche quando si utilizza Instant Run.