apk 是Android Package的簡寫, 在平時的開發過程中,通過點擊 Run app 按鈕 或者 在命令行中輸入
這樣Android Studio就會啟動構建流程,最終輸出壹個我們想要的APK。
直達官網介紹
對於小白來說,上面壹張圖已經可以解釋apk的構建過程了,不過對於Andoid開發者而言還需要了解壹些更詳細的構建過程。
詳細的對應步驟 和 使用工具如下:
資源文件(res文件夾下的文件)通過 AAPT(Android Asset Packaging Tool)打包生成R.java類(資源索引表)、.arsc資源文件 和res文件。
resources.arsc 是壹個App的資源索引表,通過R.java 文件 和 resources.arsc 可以定位到資源的內存地址,resources.arsc文件的作用是通過壹樣的ID,根據不同的配置索引到最佳的資源顯示在UI中。
AIDL (Android Interface Definition Language), 是Android接口定義語言,是Android提供的IPC (Inter Process Communication,進程間通信)的壹種獨特實現。
如果有aidl文件,這個階段會生成對應的Java接口文件。
R.java文件、工程源碼文件、aidl.java文件, 在這壹步通過javac生成.class文件。
源碼.class文件和第三方jar或者library通過dx工具打包成dex文件
Android系統的Dalvik虛擬機的可執行文件為DEX格式,所以這裏會將上壹步中生成的.class文件 和 引用的第三方jar等過程中的.class 壹起通過dx工具打包成dex文件
apkbuilder工具會將所有沒有編譯的資源、.arsc資源、.dex文件打包到壹個完成apk文件中
tips:
apksigner工具會對未簽名的apk驗證簽名。得到壹個簽名後的apk(signed.apk)
apksigner 是google 退出的V2簽名方式
Jarsigner 是之前壹直使用的V1簽名方式
可以通過在命令行中輸入apksigner --help來獲取詳情信息,如果沒有特殊需求,使用下面命令即可完成簽名
release mode 下使用 aipalign進行align,即對簽名後的apk進行對齊處理
所謂對齊,主要過程是將APK包中所有的資源文件距離文件起始偏移為4字節整數倍,這樣通過內存映射訪問apk文件時的速度會更快。對齊的作用主要是為了減少運行時內存的使用。
zipalign是壹個android平臺上整理APK文件的工具,它對apk中未壓縮的數據進行4字節對齊,對齊後就可以使用mmap函數讀取文件,可以像讀取內存壹樣對普通文件進行操作。如果沒有4字節對齊,就必須顯式的讀取,這樣比較緩慢並且會耗費額外的內存。
參考文章:
Android-Studio配置構建
淺談Android打包流程
apk打包流程
END!