Android APK打包流程

來源:互聯網
上載者:User

標籤:類比   版本   log   javac   lips   布局檔案   img   clip   裝置   

簡單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檔案時的速度會更快。對齊的作用就是減少運行時記憶體的使用。

Android APK打包流程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.