我日常在項目開發中,剛開始的APK包可能不太大,可是隨着時間的變遷,項目的迭代,慢慢的就回發現打出來的APK包愈來愈大,包每大一點可能用戶下載的慾望就小一些,因此在日常的項目迭代過程當中,對APK瘦身的工做也要持續進行,這篇文章就會記錄一下從幾個方面對apk進行瘦身java
咱們生成一個包,把包拖到Android studio中就能夠看到包的構成了android
apk的構成如上圖,下面具體看下各個部分都是什麼git
apk的構成咱們已經有了初步的瞭解,接下來咱們就能夠對apk進行瘦身優化了github
android {
buildTypes {
release {
minifyEnabled true
}
}
}
複製代碼
在proguard-rules.pro編寫混淆規則web
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
}
}
}
複製代碼
shrinkResources和minifyEnabled必須同時開啓纔有效api
(圖二)微信
如上面兩張圖所示,best.png圖片並無使用到,大小爲3.3K,屬於無用資源 ,在開啓 shrinkResources以後,發現best.png確實打包進apk中了,但大小變成了67B,具體內容是個小黑塊的佔位符架構
咱們經過Android studio提供的lint工具去排查沒有使用到的資源文件,而後讓無用的資源文件刪除掉 經過Analyze - Run Inspection By Name... 選項 ,而後輸入 unused resources來查找無用的資源文件工具
如上圖所示無用的資源文件就找到了就能夠對其進行刪除佈局
咱們經過Android studio提供的lint工具去排查沒有使用到的代碼,而後讓無用的代碼刪除掉 經過Analyze - Run Inspection By Name... 選項 ,而後輸入 unused declaration來查找無用的代碼
如上圖所示無用的代碼就找到了就能夠對其進行刪除
能夠經過如下幾種方式就圖片進行壓縮
不少點擊效果或者背景圖可能會使用到圖片,能夠換成shape進行代替實現,可以有效的減小apk大小
Android應用自己是支持國際化的,但國內的項目好多都是在國內使用,不須要國際化,這時候能夠對相關的String進行減法操做,使其只包含特定的語言(例如中文)
android {
defaultConfig {
...
//語言資源,只支持中文
resConfigs "zh-rCN"
}
}
複製代碼
如上圖所示經過resConfigs配置,打包進apk的語言就只有中文了
使用微信大神張紹文的AndResGuard工具對項目的資源文件進行混淆,在壓縮apk大小的同時,提高了反破解難度
具體的源碼和使用方法以下 [github.com/shwenzhang/…]
咱們在引入第三方sdk時,有不少sdk都有對應的so庫,且給到的so庫分好多架構(armeabi,armeabi-v7a,x86等等)
Android系統目前支持如下七種不一樣的CPU架構:ARMv5,ARMv7 (從2010年起),x86 (從2011年起),MIPS (從2012年起),ARMv8,MIPS64和x86_64 (從2014年起)
全部的架構設備x8六、x866四、armeabi-v7a、arm64-v8a都支持armeabi架構的.so文件,因此咱們能夠根據本身的業務需求選擇使用armeabi或者armeabi-v7a進行支持
好比 微信,QQ ,網易雲音樂等不少大的應用就只保留了armeabi-v7a
android {
defaultConfig {
ndk {
abiFilters 'armeabi','armeabi-v7a'
}
}
}
複製代碼
如上圖因此優化完成以後apk的lib包中就只有'armeabi','armeabi-v7a'兩種架構了
項目瘦身是一項曠日持久的工做,也只有就apk的構成有所瞭解以後才能更好的對apk進行瘦身,經過上面的步驟以後你的apk必定會有不同的變化