APK打包流程


APK結構

 

 

 apk是一個壓縮包,里面有lib,META-INF,classes.dex,res,resources.arsc文件夾和文件。下面看看它們各自的作用。

 

 

 

初略流程

 

 

 

 谷歌官方給出的打包流程圖。
先是把代碼編譯成Dex,然后是和資源文件整合成一個APK,再者加簽名,最后出來之前還要用zipalign工具優化一下。

細化流程

 

 

 

上面這個圖主要是有7個打包流程。

1.打包資源文件,生成R.java文件

aapt來打包res資源文件,生成R.java、resources.arsc和res文件。

  • res目錄

 

 

  • R.java文件
    R.java是我們在編寫代碼的時候會用到的,里面有靜態內部類,資源等。
  • resources.arsc文件
    resources.arsc這個文件記錄了所有的應用程序資源目錄的信息,包括每一個資源名稱、類型、值、ID以及所配置的維度信息。是一個資源索引表,在給定資源ID和設備配置信息的情況下能快速找到資源。

2.處理aidl文件,生成相應的Java文件

aidl(Android Interface Definition Language,Android接口描述語言),位於android-sdk/platform-tools目錄下。aidl工具解析接口定義文件然后生成相應的Java代碼接口供程序調用。如果項目沒用到aidl則跳過這一步。

3.編譯項目源代碼,生成class文件
Java Compiler階段。項目中所有的Java代碼,包括R.java和.aidl文件,都會變Java編譯器(javac)編譯成.class文件,生成的class文件位於工程中的bin/classes目錄下。

4.轉換所有的class文件,生成classes.dex文件
dex階段。通過dx工具,將.class文件和第三方庫中的.class文件處理生成classes.dex文件。該工具位於android-sdk/platform-tools 目錄下。dx工具的主要工作是將Java字節碼轉成成Dalvik字節碼、壓縮常量池、消除冗余信息等。

5.打包生成APK文件
apkbuilder階段。通過apkbuilder工具,將aapt生成的resources.arsc和res文件、assets文件和classes.dex一起打包生成apk。打包的工具apkbuilder位於 android-sdk/tools目錄下。

6.對APK文件進行簽名
Jarsigner階段。通過Jarsigner工具,對上面的apk進行debug或release簽名。

7. 對簽名后的APK文件進行對齊處理
通過zipalign工具,將簽名后的apk進行對齊處理。工具位於android-sdk/tools目錄下。對齊的主要過程是將APK包中所有的資源文件距離文件起始偏移為4字節整數倍,這樣通過內存映射訪問apk文件時的速度會更快。對齊的作用就是減少運行時內存的使用。

總結一下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM