Android APK打包流程


簡單build流程圖

官網給了我們一張非常簡單的編譯、打包、apk生成內容以及簽名的圖片。圖片大體介紹了從Project到運行到設備或者模擬器的一個大體流程,我們也從中看到一個完整的apk包含如下內容:一個或多個dex文件、resources.arsc、未編譯的資源文件以及AndroidManifest.xml文件等等

詳細build流程圖

官網給了我們一張非常清晰的打包流程圖:

編譯打包步驟:

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

打包資源的工具是aapt(The Android Asset Packaing Tool)(E:\Documents\Android\sdk\build-tools\25.0.0\aapt.exe)。

在這個過程中,項目中的AndroidManifest.xml文件和布局文件XML都會編譯,然后生成相應的R.java,另外AndroidManifest.xml會被aapt編譯成二進制。

存放在APP的res目錄下的資源,該類資源在APP打包前大多會被編譯,變成二進制文件,並會為每個該類文件賦予一個resource id。對於該類資源的訪問,應用層代碼則是通過resource id進行訪問的。Android應用在編譯過程中aapt工具會對資源文件進行編譯,並生成一個resource.arsc文件,resource.arsc文件相當於一個文件索引表,記錄了很多跟資源相關的信息。

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

這一過程中使用到的工具是aidl(Android Interface Definition Language),即Android接口描述語言(E:\Documents\Android\sdk\build-tools\25.0.0\aidl.exe)。

aidl工具解析接口定義文件然后生成相應的Java代碼接口供程序調用。如果在項目沒有使用到aidl文件,則可以跳過這一步。

3. 編譯項目源代碼,生成class文件

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

4. 轉換所有的class文件,生成classes.dex文件

dx工具生成可供Android系統Dalvik虛擬機執行的classes.dex文件,該工具位於(E:\Documents\Android\sdk\build-tools\25.0.0\dx.bat)。

任何第三方的libraries.class文件都會被轉換成.dex文件。dx工具的主要工作是將Java字節碼轉成成Dalvik字節碼、壓縮常量池、消除冗余信息等。

5. 打包生成APK文件

所有沒有編譯的資源,如images、assets目錄下資源(該類文件是一些原始文件,APP打包時並不會對其進行編譯,而是直接打包到APP中,對於這一類資源文件的訪問,應用層代碼需要通過文件名對其進行訪問);編譯過的資源和.dex文件都會被apkbuilder工具打包到最終的.apk文件中。

打包的工具apkbuilder位於 android-sdk/tools目錄下。apkbuilder為一個腳本文件,實際調用的是(E:\Documents\Android\sdk\tools\lib)文件中的com.android.sdklib.build.ApkbuilderMain類。

6. 對APK文件進行簽名

一旦APK文件生成,它必須被簽名才能被安裝在設備上。

在開發過程中,主要用到的就是兩種簽名的keystore。一種是用於調試的debug.keystore,它主要用於調試,在Eclipse或者Android Studio中直接run以后跑在手機上的就是使用的debug.keystore。

另一種就是用於發布正式版本的keystore。

7. 對簽名后的APK文件進行對齊處理

如果你發布的apk是正式版的話,就必須對APK進行對齊處理,用到的工具是zipalign(E:\Documents\Android\sdk\build-tools\25.0.0\zipalign.exe)

對齊的主要過程是將APK包中所有的資源文件距離文件起始偏移為4字節整數倍,這樣通過內存映射訪問apk文件時的速度會更快。對齊的作用就是減少運行時內存的使用。


免責聲明!

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



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