2016-11-20 1 views
9

Ich habe in diesem Problem, wo MinifyEnabled und shrinkResources geben mir suboptimale Ergebnisse in dem Sinne, dass; wenn ich aufgenommen haben,Entfernen von nicht verwendeten Assets aus 3rd-Party-Bibliothek

'com.google.android.gms:play-services-places:9.6.1' 

ich nicht In-API Google Sign bin mit noch, erhalte ich viele Zeichen in Bildern. sign_in_images

Wie kann ich sie von meinem APK loswerden? Sie scheinen ein gutes Stück KB hinzuzufügen.

Ich benutze proguard mit Minify und Schrumpf Ressourcen wie oben erklärt.

+0

Bitte beachten Sie diesen Link erhalten Sie die Antwort http://StackOverflow.com/a/40742213/4069985 –

+1

Es gibt nichts eingebaut dafür. Sie können versuchen [dieses Gradle-Skript] (https://Stackoverflow.com/a/34525498/115145), obwohl ich es noch nicht geschossen habe. – CommonsWare

+0

@SrinivasKeerhipprakasam danke – Hades

Antwort

4

Es gibt ein Detailthema here bei Android Entwickler Benutzerhandbuch.

Grundsätzlich haben Sie viele Möglichkeiten, um die Größe Ihrer apk tatsächlich zu reduzieren, indem Sie Ihre Ressourcen schrumpfen. Ich habe in Kürze über sie diskutiert, und ich denke, Enable strengen Referenzprüfungen unten diskutiert sollte Ihr Problem lösen, aber Sie können alle verfügbaren Optionen zur weiteren Verringerung Ihrer apk Größe betrachten.


Customizing Ressourcen, die

zu halten, wie der Doc sagt, verwenden Sie die unten xml bei res/raw/keep.xml, zu entscheiden, was zu halten und was nicht zu halten:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools" 
    tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*" 
    tools:discard="@layout/unused2" /> 

Und Ruhe wird von Build-System gepflegt werden (Dies ist nützlich, wenn Sie verschiedene Build-Varianten verwenden).


aktivieren strenge Referenzprüfungen

Wenn Sie Ihren Code oder Ihrer Bibliothek referenzieren Ressourcen wie unten haben:

getResources().getIdentifier("image1", "drawable", getPackageName()) 

Dann verhält sich defensiv in diesem Fall Ressource shrinker von Ausfall- und Marken Alle Ressourcen mit einem übereinstimmenden Namensformat werden möglicherweise verwendet und können nicht entfernt werden.

Also, in den res/raw/keep.xml folgenden

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:tools="http://schemas.android.com/tools" 
    tools:shrinkMode="strict" /> 

Hinzufügen dies Ihr Problem lösen soll.


Entfernen Sie nicht verwendete alternative Ressourcen

Ressourcen Shrinker keine alternative Ressourcen entfernen, wie alternative ziehbar Ressourcen für unterschiedliche Bildschirmdichten, alternative String-Ressourcen für verschiedene Sprachen, usw.

So, Sie können selbst auswählen, was Sie behalten möchten, z. B. aus Ihrer Build-Datei: Sie möchten die Zeichenfolgen in 'en' locale beibehalten:

android { 
    defaultConfig { 
     ... 
     resConfigs "en", "fr" 
    } 
} 

Dies kann die Größe erheblich reduzieren.


Wenn noch Ressourcen von Ressource shrinker gehalten werden, dann schließen Sie diese manuell die erste diskutiert Methode verwenden, und sehen, ob und bauen richtig, wenn nicht Grund Ressourcen für die Aufbewahrung von Ressourcen shrinker wird, kompiliert wird, dann klar geworden, von der Ausnahme beim Bauen geworfen.

Hoffe es hilft!

+0

Ich habe all diese Methoden ausprobiert. Nichts hat geklappt. – Hades

3

Wenn nichts anderes hilft, um das Build-System automatisch erkennen ungenutzte Ressourcen zu machen, könnten Sie ausdrücklich diese ohne versuchen wollen über die packagingOptions DSL wie:

android { 
    packagingOptions { 
     exclude '/**/common_google_signin*.png' 
    } 
} 
3

Möglicherweise gibt es einige Möglichkeiten zu app Größe zu reduzieren und entfernen ungenutzte Vermögenswerte.

Sie können nicht verwendete Assets aus der Projektbibliothek (':lib') löschen.

Wenn Sie @aar Datei importiert haben, als Sie so etwas wie dieses

compile ('com.facebook.android:facebook-android-sdk:[email protected]'){ 
    exclude module: 'support-v4' 
} 

tun können Wir haben aber nicht mehr benötigte Dateien in @aar Datei als alternative Art und Weise finden, die zu ersetzen, dass @aar zu (':lib'), von dort Vermögen entfernen.

Verwandte Themen