2012-10-17 100 views
18

如何防止Android「構建過程」優化.png圖像?禁用Android資源/圖像/ PNG優化

我有以下的資源目錄的Android項目:

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

這些目錄包含許多.png文件。我使用PNGOUTWin優化了PNG尺寸,整體尺寸減少了20%以上。當我構建.apk文件時,圖像由構建過程「優化」,整體尺寸現在比初始尺寸高10%,比我的/ PNGOUTWin優化尺寸高30%。

我的目標是減小.apk大小,即使它會影響最終性能,內存要求等。如何防止「構建過程」優化.png圖像?

我針對Android 2.2及以上版本。

P.S .:我目前正在從Eclipse構建我的Android項目,但稍後我會切換到自動構建(Ant?)。

關於JPG圖像的注意事項: JPG不起作用,因爲它們沒有透明度。

回答

1

由於Android文檔中提到:http://developer.android.com/guide/topics/graphics/2d-graphics.html#drawables

:放置在res /繪製的圖像資源/可與通過在 構建過程的AAPT工具無損圖像壓縮被自動優化。例如,不需要超過256種顏色的真彩色PNG可以轉換爲帶有顏色 調色板的8位PNG。這將產生相同質量的圖像,但其中 需要較少的內存。 所以請注意,在版本中,放置在 此目錄中的映像二進制文件可能會更改。

所以,如果你想降低您的應用程序的大小,你應該要麼減少你的PNG文件的色彩深度(這幫助了很多),或者切換到.jpg文件儘可能。

+1

8位PNG文件與alpha通道 - 漂亮的陰影,許多顏色,尺寸200x200看起來醜陋。不完美。目前使用Photoshop + Web Image Guru + PNGOUTWin後處理。 –

+1

JPG將無法正常工作,因爲它們沒有透明度。 –

+0

是的,你不能有漸變效果,陰影效果等..在JPG中的PNG,所以只有我提到儘可能使用JPG。 –

0

Google最近在Android SDK構建工具中引入new PNG processor in aapt 0.9.1,該工具修復了優化後的PNG大小增加問題。

安裝此更新,現在可以爲Android工作室&搖籃到PNG處理器之間有以下變化在你的build.gradle配置文件切換:

android { 
    .. 
    .. 

    aaptOptions.useAaptPngCruncher = false 
} 

通過加入這一行,AAPT使用新的PNG處理器,用於檢查「優化的」PNG文件是否小於原始PNG文件。我能夠在編譯的APK中減少4.8 MB,並且沒有遇到任何新構建配置的錯誤/問題。

更新:這在較新版本的Android Studio中已被棄用。請參考ChrisG提供的答案。

+0

我認爲這是obselete截至目前,使用@ChrisG – for3st

1

Android Studio中:由於搖籃Android插件1.0.0:

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

的Eclipse:覆蓋緊縮任務在你的build.xml寫這篇:

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

最後有一種官方的方式來禁用尚未在此處提到的Gradle的PNG cruncher:

  1. 編輯主要的build.gradle要求(或更新版本)gradle這個版本1.1.3:

    buildscript { 
        repositories { 
         mavenCentral() 
        } 
        dependencies { 
         classpath 'com.android.tools.build:gradle:1.1.3' 
        } 
    } 
    
  2. 在各個應用的的build.gradle,一款Android {},插入:

    aaptOptions { 
        cruncherEnabled = false 
    } 
    

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

+1

的答案這只是削減了約1分鐘的編譯時間爲我的調試版本 – for3st

+1

是否有可能只爲調試版本?也許它可以減少構建時間 –

6

指定PNG crunchin摹現在是一個BuildType財產,默認情況下禁用的調試版本:

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

注:這可以從Android Studio 3.0 Canary 5

+0

謝謝。浪費了很多時間之後,唯一的答案幫助了我。 –

+0

林間空地幫助你。謝謝 :) – pRaNaY