目錄
1、Android 編譯打包流程
2、Apk包瘦身
1、Android 編譯打包流程及APK構(gòu)成
1.1女揭、Android 編譯打包流程
(1)、通過Java編譯器對工程本身的java代碼進行編譯栏饮,產(chǎn)出為.class文件吧兔。這些java代碼有三個來源:app的源代碼;由資源文件生成的R文件(aapt工具)抡爹;以及有aidl文件生成的java接口文件(aidl工具)掩驱。
(2)、通過dex工具將上一步生成的.class文件和依賴的第三方庫的.class冬竟,生成Delvik虛擬機可執(zhí)行的.dex文件欧穴。
(3)、通過apkbuilder工具將.dex文件和編譯后的資源文件生成未經(jīng)簽名對齊的apk文件泵殴。(這里編譯后的資源文件包括兩部分涮帘,一是由aapt編譯產(chǎn)生的編譯后的資源文件,二是依賴的三方庫里的資源文件)笑诅。
(4)调缨、通過Jarsigner和zipalign對apk文件進行簽名和對齊,生成最終的apk文件吆你。
1.2弦叶、APK構(gòu)成
2、Apk包瘦身
2.1妇多、資源瘦身
對于圖片資源
2.1.1伤哺、使用更高壓縮率的文件格式
(使用Shape XML、Color 者祖、WebP替代PNG立莉,JPG。WebP尤其對大圖片有用)
2.1.2七问、更深度的資源壓縮
圖片質(zhì)量:TinyPNG深度壓縮
圖片尺寸:ReSize蜓耻,針對大圖、套圖
2.1.3械巡、Lint去除未引用資源
2.2.3刹淌、對于drawable圖片只保留3倍圖饶氏。
2.2.4、對資源的id和路徑進行壓縮芦鳍。使用andresguard嚷往,對resources.arsc文件進行壓縮,就是讓資源id名稱變短了柠衅。
2.1.5皮仁、去除無用的語言資源,例如appcompat庫中會包含多國的語言資源菲宴,但是我們的app只需要支持中文贷祈,可以使用resConfig去除不會使用的語言資源。
2.1.6喝峦、開啟shrinkResources未使用的資源(前提是是開啟混淆)势誊。因為只有開啟混淆移除未經(jīng)使用的代碼之后,才知道哪些資源是真正被有用的代碼所引用的谣蠢。
2.1.7粟耻、MR時引入流水線,流水線中對提交代碼中的資源文件大小進行控制
2.2眉踱、代碼瘦身
2.2.1挤忙、內(nèi)部代碼清理
(1)、合并功能相同的代碼(utils)谈喳。定期清理已廢棄册烈、未引用代碼
(2)、合并擴展重復的輪子婿禽,提高模塊復用性(titlebar)
注意反射以及AOP對類/方法的調(diào)用赏僧,會誤認為未引用
2.2.2、外部依賴清理
(1)扭倾、移除無用的jar包或依賴
(2)淀零、移除功能重復的框架,例如視頻播放庫膛壹,OkHttp&Volley窑滞,F(xiàn)resco&glide,避免共存
2.2.3恢筝、開啟minifyEnabled混淆代碼,去掉沒用引用的代碼巨坊。
2.2.4撬槽、review機制審核代碼質(zhì)量
2.3、native瘦身
去除不必要的硬件平臺對應的so文件趾撵,根據(jù)我們的統(tǒng)計侄柔,我們用戶的手機大部分都是armeabi架構(gòu)共啃,x86機型占比極低,只有幾個暂题,所有我們只需要保留armeabi對應的so文件移剪,另外x86架構(gòu)是可兼容armeabi平臺對應的so文件指令的。通過build.gradle內(nèi)abiFilters配置薪者。
ndk {
abiFilters 'armeabi', 'armabi'
}
Android中的so文件簡介
.so文件是一種文件格式纵苛,可以類比.java或者.class文件格式。
.so文件是與平臺相關(guān)的二進制機器碼言津,與ABI(Application Binary Interface)相對應攻人,一個ABI表示相應的CPU的指令集與內(nèi)存頁管理,也對應于不同的運行環(huán)境悬槽,所以so是有不同的系統(tǒng)版本的怀吻。
隨著Android系統(tǒng)的快速發(fā)展,搭載Android的硬件平臺也早已多樣化了(對比WinTel聯(lián)盟初婆,直到2012年才新發(fā)展了Windows RT來適配ARM平臺蓬坡,2015年的Win10才進入 Raspberry Pi 2這類基于ARM的新型設備中),現(xiàn)在已經(jīng)運行在7個ABI:armeabi磅叛,armeabi-v7a (armeabi-v7a-hard)屑咳,arm64-v8a,x86宪躯,x86_64乔宿,mips 和 mips64。
2.4访雪、資源動態(tài)下發(fā)
(1)详瑞、重量級的資源(拍攝頁資源,大圖片)
(2)臣缀、H5插件坝橡,需開發(fā)成熟的Hybrid方案
(3)、Native插件精置,需對項目進行插件化
1计寇,https://blog.csdn.net/u011889786/article/details/56686492
2,https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=208135658&idx=1&sn=ac9bd6b4927e9e82f9fa14e396183a8f#rd