Questa risposta è riassunta da Removing Unused Resources che spiega come utilizzare minifyEnabled e shrinkResources, che sono coperti in modo più approfondito al Official document page.
E 'un problema comune per le librerie di terze parti per includere le attività che il vostro percorsi di codice applicazione non utilizza, ed è estremamente importante per rimuovere tali attività al fine di produrre piccoli file APK per gli utenti. Per fortuna, l'ultima versione di Gradle e Android Studio fornisce una soluzione per aiutare.
Impostando minifyEnabled e shrinkResources true nella configurazione Gradle, il sistema andrà avanti togliendo risorse inutilizzate dalla vostra applicazione.
android {
...
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
E 'importante notare che la rimozione di risorse inutilizzate richiede l'minifyEnabled bandiera da impostare. Questo flag (come menzionato in Removing unused code) attiverà ProGuard per rimuovere i percorsi di codice che non vengono utilizzati dall'applicazione. Questo è un passo importante nella rimozione delle risorse dalle librerie incluse. Se i percorsi di codice non vengono rimossi, il compilatore continuerà a credere che le risorse siano referenziate da un codepath esistente e non le rimuoveranno correttamente.
Vale la pena notare che questo è un sistema piuttosto esteso. Ad esempio, guarderà attraverso specifiche costanti di stringa nel codice, oltre a varie risorse res/raw alla ricerca di qualsiasi URL sotto forma di file:///….
da conservare. Andrà anche al punto di analizzare anche i file CSS, HTML e JavaScript.
Ora, ci possono essere casi qui di falsi positivi o falsi negativi. Le risorse potrebbero essere tagliate o mantenute quando si desidera il comportamento contrario. (Per essere onesti, il restringimento delle risorse tende ad essere troppo superficiale ...) Per regolare questo, è possibile aggiungere gli strumenti : mantenere gli strumenti e : scartare gli attributi per definire il comportamento desiderato, per convenzione in un file res/raw/keep.xml
.
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep= "@layout/l_used*_c, @layout/l_used_b*"
tools:discard="@layout/unused2"
/>
fonte
2015-10-13 20:59:53
Per le persone che utilizzano retrolambda - se la risorsa fa riferimento alla classe con espressioni lambda utilizzate in esso - la risorsa verrà rimossa in modo da frenare la build. Quindi, per ora shrinkResources deve essere impostato su false anche per la variante di release – curioushikhov
@Colt McAnlis rimuoverà anche le lingue non utilizzate? possiamo usare resConfigs "en" in defaultConfig per rimuovere le lingue inutilizzate –