AndroidStudio打包的apk體積比Eclipse大,如何解決?

將Eclipse的項目代碼遷移到了AndroidStudio,發現AndroidStudio打出來的簽名包2.6MB,但是Eclipse的只有1.5MB,請問有什麼辦法解決嗎?

--------------------------------------------------------------------------------

項目中比較大的差別是將老舊的support-v4包換成了依賴:compile com.android.support:appcompat-v7:23.1.1

--------------------------------------------------------------------------------

build.gradle部分如下:

———————————————————————————————————————————

Eclipse也沒有進行混淆。我把兩個包解壓查看文件,主要是as打包的class.dex的體積變大了一倍,其他還有一些資源文件多了v11,v14這種兼容性文件夾。


在release 的buildTypes下將 minifyEnabled 改為 true。

minifyEnabled不僅會對代碼作混淆而且還會去精簡無用的代碼。

再者,雖然,你已經開啟了shrinkResources,但這個配置項的生效依賴於minifyEnabled。


根據開發中的實踐結果主要有以下幾種方法:

1.移除項目中未使用的資源,通過項目名稱--&>右鍵--&>Refactor--&>Remove Unuse Resource 可以找出項目中未使用的類文件以及資源文件,配合CVS使用,重複幾次操作效果會更佳。

2.圖片資源進行壓縮,TinyPNG – Compress PNG images while preserving transparency 和 Compress PNG Images Online 都是免費的在線圖片壓縮網站,一般可以減少70%以上的圖片大小。

3.使用ProGuard混淆代碼,ProGuard 會自動處理應用的位元組碼,然後再將所有內容打包到.apk文件中,能夠混淆代碼並能減小應用大小。文檔地址 https://developer.android.com/studio/build/shrink-code.html?hl=zh-cn

4.使用Vector Drawables代替一些為了適應不同屏幕而添加的多種尺寸的圖標,為了適應不同的屏幕解析度,我們往往會使用多種尺寸的icon放在相應的drawable文件夾下(mdpi, hdpi, xhdpi, xxhdpi),而Vector Drawables能做到放大而不失真。

5.如果可以,盡量使用Xml繪製背景圖

6.除了必須的資源,可以考慮安裝之後下載,如啟動圖片等

7.合理的引入Library,有時項目中引入了一個Library,可能只會用到其中一部分方法或一種控制項,但是我們卻要把整個Library引入進來,這樣做感覺很不划算。應該嘗試換一種Library替代或者自己抽取其中有用的部分。

8.應用組件化,需要該模塊時進行下載安裝

9.儘可能使用系統定義的字元串或者圖片資源(前提是,引用系統資源在不同SDK表現效果穩定)

10.使用拆分機制(apk splits),參考Android開發--如何減小Apk文件的大小,apk體積增加最大的一次是引入一家合作公司的看監控視頻的SDK包,其中的處理視頻碼流的.so包文件,因為要適配不同的處理架構(armeabi,armeabi-v7a ,x86...),文件會增大很多。apk splits能很好的解決這種問題。https://developer.android.com/google/play/publishing/multiple-apks.html?hl=zh-cn

參考:1. Android開發--如何減小Apk文件的大小

應該還有很多方法可以進行優化,歡迎大家補充~


shrinkResources true

minifyEnabled true

然後打包是就說找不到依賴的jar資源


推薦閱讀:

idea怎麼取消自動保存,自動導入會自動import .*怎麼辦?
Android studio2.0的到來。?
如何向Android Studio里導入從Github上面下載的Project?
Android studio更新到2.2後,編輯module下的build.gradle文件就卡死?
Android studio中「import org.apache.http.Header;」沒用?

TAG:Android開發 | Android | AndroidStudio |