2012-10-17 13 views
18

Wie verhindere ich, dass der Android-Build-Prozess .png-Bilder optimiert?Android-Ressource/Bild/PNG-Optimierung deaktivieren

Ich habe ein Android-Projekt mit den folgenden res Verzeichnisse:

- /res/ 
- /res/drawable 
- /res/drawable-hdpi 
- /res/drawable-hdpi-v5 
- /res/drawable-ldpi 
- /res/drawable-ldpi-v5 
- /res/drawable-mdpi 
- /res/drawable-mdpi-v5 

Diese Verzeichnisse viele .png Dateien enthalten. Ich optimiere PNG-Größen mit PNGOUTWin, und die Gesamtgröße wird um mehr als 20% reduziert. Wenn ich die .apk-Datei erstelle, werden die Bilder vom Build-Prozess "optimiert" und die Gesamtgröße liegt jetzt 10% über der ursprünglichen Größe, oder 30% über meiner/PNGOUTWin optimierten Größe.

Mein Ziel ist es, die .apk-Größe zu reduzieren, auch wenn es die endgültige Leistung, Speicheranforderungen usw. beeinträchtigt. Wie verhindere ich, dass der "Build-Prozess" .png Bilder zu optimieren?

Ich ziele auf Android 2.2 und höher.

P.S .: Ich baue gerade mein Android-Projekt von Eclipse, aber ich werde später zum automatisierten Build wechseln (Ant?).

Hinweis zu JPG-Bildern: JPG wird nicht funktionieren, weil sie keine Transparenz haben.

Antwort

1

Wie in der Android-Dokumentation erwähnt: http://developer.android.com/guide/topics/graphics/2d-graphics.html#drawables

Hinweis: Bild platziert Ressourcen in res/ziehbar/automatisch mit lossless Bildkompression durch das aapt Werkzeug während des Build-Prozesses optimiert werden. Zum Beispiel kann ein Echtfarben-PNG, das keine mehr als 256 Farben erfordert, in ein 8-Bit-PNG mit einer Farbe -Palette konvertiert werden. Dies führt zu einem Bild mit gleicher Qualität, das jedoch weniger Speicherplatz benötigt. Achten Sie darauf, dass die in dieses Verzeichnis platzierten Bildbinärdateien während des Builds geändert werden können.

Also, wenn Sie die Größe Ihrer Anwendung reduzieren möchten, sollten Sie entweder die Farbtiefe Ihrer PNG-Dateien reduzieren (dies hilft viel) oder wechseln Sie zu .JPG Dateien wo immer möglich.

+1

8-Bit-PNG-Dateien mit Alpha-Kanal - hübsche Schatten, viele Farben, Größe 200x200 sieht hässlich aus. Nicht perfekt. Derzeit mit Photoshop + Web Image Guru + PNGOUTWin Postprozess. –

+1

JPG funktioniert nicht, weil sie keine Transparenz haben. –

+0

Ja, Sie können keine Farbverlaufseffekte, Schatteneffekte etc .. wie in PNG in JPG, so nur ich erwähnte jpg verwenden, wo immer möglich. –

0

Google hat vor kurzem eine new PNG processor in aapt 0.9.1 in den Android SDK Build Tools eingeführt, die dieses Problem der erhöhten PNG-Größen nach einer aapt-Optimierung behebt.

Mit diesem Update ist es nun möglich für Android Studio & Gradle zwischen den PNG-Prozessoren mit folgenden Änderung in Ihrer build.gradle Konfigurationsdatei wechseln:

android { 
    .. 
    .. 

    aaptOptions.useAaptPngCruncher = false 
} 

Durch diese Zeile hinzufügen, aapt verwendet die neuer PNG-Prozessor, in dem geprüft wird, ob die "optimierten" PNG-Dateien kleiner sind als die ursprünglichen PNG-Dateien. Ich konnte 4,8 MB in meiner kompilierten APK reduzieren und habe keine Bugs/Probleme mit der neuen Build-Konfiguration festgestellt.

UPDATE: Dies wurde in späteren Versionen von Android Studio veraltet. Bitte beachten Sie die Antwort von ChrisG.

+0

Ich denke, das ist obselete ab sofort, verwenden Sie die Antwort von @ChrisG – for3st

1

Android Studio: Seit Gradle Android Plugin 1.0.0:

android { 
... 
    aaptOptions { 
    useNewCruncher false 
    } 
.... 
} 

Eclipse-: das Knirschen Aufgabe dies in Ihrem build.xml außer Kraft setzen zu schreiben: es

<target name="-crunch"> 
    <echo message="This will skip PNG optimization"/> 
</target> 
31

Schließlich ist eine offizielle Möglichkeit den PNG Cruncher mit Gradle zu deaktivieren, der hier noch nicht erwähnt wurde:

  1. bearbeiten Haupt build.gradle gradle Version 1.1.3 (oder neuer) erforderlich ist:

    buildscript { 
        repositories { 
         mavenCentral() 
        } 
        dependencies { 
         classpath 'com.android.tools.build:gradle:1.1.3' 
        } 
    } 
    
  2. In den einzelnen Anwendungen des build.gradle Abschnitt android {}, einfügen:

    aaptOptions { 
        cruncherEnabled = false 
    } 
    

Referenz: https://code.google.com/p/android/issues/detail?id=65335

+1

Wow, das nur etwa 1 Minute Bauzeit für meine Debug-Builds geschnitten – for3st

+1

Ist es möglich, es nur für Debug-Build zu tun? Vielleicht kann es Bauzeit reduzieren –

6

Angeben PNG crunchin g ist nun ein BuildType Eigenschaft und ist standardmäßig auf Debug baut deaktiviert:

android { 
    … 
    buildTypes { 
     release { 
      crunchPngs false // or true 
     } 
    } 
} 

Hinweis: Es ist von Android Studio 3.0 Canary 5 zur Verfügung.

+0

Danke. Nach viel Zeitverschwendung hat dir nur die Antwort geholfen. –

+0

Lichtung hilft Ihnen. Vielen Dank :) – pRaNaY