2012-10-17 12 views
18

Come impedire al "processo di creazione" di Android di ottimizzare le immagini .png?Disabilita risorsa/immagine/ottimizzazione PNG Android

Ho un progetto Android con le seguenti directory res:

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

Queste directory contengono molti file .png. Ottimizzo le dimensioni PNG con PNGOUTWin e la dimensione complessiva è ridotta di oltre il 20%. Quando costruisco il file .apk, le immagini sono "ottimizzate" dal processo di creazione e la dimensione complessiva è ora del 10% sopra la dimensione iniziale o del 30% sopra la dimensione ottimizzata di my/PNGOUTWin.

Il mio obiettivo è ridurre la dimensione .apk, anche se influirà sulle prestazioni finali, i requisiti di memoria, ecc. Come impedire al "processo di generazione" di ottimizzare le immagini .png?

Ho scelto Android 2.2 e versioni successive.

P.S .: Attualmente sto costruendo il mio progetto Android da Eclipse, ma passerò alla generazione automatica successiva (Ant?).

Nota sulle immagini JPG: JPG non funziona, perché non hanno trasparenza.

risposta

1

Come accennato nella documentazione Android: http://developer.android.com/guide/topics/graphics/2d-graphics.html#drawables

Nota: risorse immagine inserita in res/drawable/possono essere ottimizzate automaticamente con compressione delle immagini senza perdita di dati dallo strumento aapt durante il processo di compilazione . Ad esempio, un PNG a colori reali che non richiede più di 256 colori può essere convertito in un PNG a 8 bit con una tavolozza di colori . Ciò si tradurrà in un'immagine di uguale qualità ma che richiede meno memoria . Pertanto, tenere presente che i file binari dell'immagine inseriti in questa directory possono cambiare durante la creazione.

Quindi, se si desidera ridurre le dimensioni della vostra applicazione si dovrebbe ridurre sia il colore approfondita dei file PNG (questo aiuta molto) o passare a file .JPG, ove possibile.

+1

File PNG a 8 bit con canale alfa: belle ombre, molti colori, la dimensione 200x200 sembra brutta. Non perfetto. Attualmente usa Photoshop + Web Image Guru + PNGOUTWin postprocess. –

+1

JPG non funzionerà perché non hanno trasparenza. –

+0

Sì, non è possibile avere effetti di sfumatura, effetti di ombreggiatura, ecc. Come in PNG in JPG, quindi ho solo accennato a usare jpg laddove possibile. –

0

Google ha recentemente introdotto uno new PNG processor in aapt 0.9.1 in Strumenti di sviluppo SDK per Android che corregge questo problema delle dimensioni PNG aumentate dopo l'ottimizzazione di apt.

Con questo aggiornamento, è ora possibile per Android Studio & Gradle per passare tra i processori PNG con la seguente modifica nel build.gradle file di configurazione:

android { 
    .. 
    .. 

    aaptOptions.useAaptPngCruncher = false 
} 

Con l'aggiunta di questa linea, aapt utilizza il nuovo processore PNG in cui controlla se i file PNG "ottimizzati" sono più piccoli dei file PNG originali. Sono riuscito a ridurre 4,8 MB nel mio APK compilato e non ho riscontrato bug/problemi con la nuova configurazione di build.

AGGIORNAMENTO: è stato ritirato nelle versioni successive di Android Studio. Si prega di fare riferimento alla risposta fornita da ChrisG.

+0

Penso che sia fin d'ora, usare la risposta di @ChrisG – for3st

1

Android Studio: Dal Gradle Android 1.0.0 plug-in:

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

Eclipse: Ignorare il compito scricchiolio di scrivere questo nella vostra build.xml:

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

Infine c'è un modo ufficiale per disabilitare il cruncher PNG con Gradle che non è stato ancora menzionato qui:

  1. Modifica build.gradle principale per richiedere Gradle versione 1.1.3 (o più recente):

    buildscript { 
        repositories { 
         mavenCentral() 
        } 
        dependencies { 
         classpath 'com.android.tools.build:gradle:1.1.3' 
        } 
    } 
    
  2. In build.gradle del singolo apps, Android sezione {}, inserire:

    aaptOptions { 
        cruncherEnabled = false 
    } 
    

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

+1

Wow, questo ha tagliato circa 1 minuto di tempo di compilazione per i miei build di debug – for3st

+1

È possibile farlo solo per la compilazione di debug? Forse può ridurre i tempi di costruzione –

6

Specificando PNG crunchin g è ora una buildtype proprietà ed è disabilitata per default su build di debug:

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

Nota: E 'disponibile da Android Studio 3.0 Canary 5.

+0

Grazie. Dopo un sacco di tempo perso la tua unica risposta mi ha aiutato. –

+0

Radura per aiutarti. Grazie :) – pRaNaY