Disable Android resource / image / PNG optimization

Maris B. picture Maris B. · Oct 17, 2012 · Viewed 20.6k times · Source

How do I prevent the Android "build process" from optimizing .png images?

I have an Android project with the following res directories:

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

These directories contain many .png files. I optimize PNG sizes with PNGOUTWin, and the overall size is reduced by more than 20%. When I build the .apk file, the images are "optimized" by the build process and the overall size is now 10% above the initial size, or 30% above my/PNGOUTWin optimized size.

My goal is to reduce the .apk size, even if it will affect the final performance, memory requirements, etc. How do I prevent the "build process" from optimizing .png images?

I'm targeting Android 2.2 and above.

P.S.: I am currently building my Android project from Eclipse, but I will switch to the automated build later (Ant?).

Note about JPG images: JPG will not work, because they do not have transparency.

Answer

ChrisG picture ChrisG · Apr 23, 2015

Finally there is an official way to disable the PNG cruncher with Gradle which hasn't been mentioned here yet:

  1. Edit main build.gradle to require gradle version 1.1.3 (or newer):

    buildscript {  
        repositories {  
            mavenCentral()  
        }  
        dependencies {  
            classpath 'com.android.tools.build:gradle:1.1.3'  
        }  
    }  
    
  2. In the individual apps's build.gradle, section android {}, insert:

    aaptOptions {  
        cruncherEnabled = false  
    }  
    

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