Android APK打包流程

學習思路

(1)打包過程輸入的是什麼?html

(2)打包過程輸出的是什麼?java

(3)打包過程使用了哪些工具?android

流程圖

  • 對照 編譯打包步驟 一塊兒看

編譯打包步驟

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

打包資源文件的工具是aapt(The Android Asset Packaing Tool),目錄 sdk\build-tools\25.0.0\aapt工具

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

存放在APP的res目錄下的資源,該類資源在APP打包前大多會被編譯,變成二進制文件,並會爲每一個該類文件賦予一個resource id。對於該類資源的訪問,應用層代碼則是經過resource id進行訪問的。學習

Android應用在編譯過程當中aapt工具會對資源文件進行編譯,並生成一個resource.arsc文件,resource.arsc文件至關於一個文件索引表,記錄了不少跟資源相關的信息。ui

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

處理aidl文件的工具是aidl(Android Interface Definition Language),即Android接口描述語言,目錄 sdk\build-tools\25.0.0\aidl.net

aidl工具解析接口定義文件而後生成相應的Java代碼接口供程序調用。若是在項目沒有使用到aidl文件,則能夠跳過這一步。debug

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

編譯源代碼使用工具是 Java編譯器(javac)調試

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

4. 轉換全部的class文件,生成classes.dex文件

這過程使用工具 dx(dex)生成可供Android系統Dalvik虛擬機執行的classes.dex文件,工具目錄(sdk\build-tools\25.0.0\dx)

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

5. 打包生成APK文件

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

全部沒有編譯的資源,如images、assets目錄下資源(該類文件是一些原始文件,APP打包時並不會對其進行編譯,而是直接打包到APP中,對於這一類資源文件的訪問,應用層代碼須要經過文件名對其進行訪問);

編譯過的資源和.dex文件都會被apkbuilder工具打包到最終的.apk文件中。

6. 對APK文件進行簽名

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

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

另外一種就是用於發佈正式版本的relese.keystore,須要開發者本身配置。

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

若是你發佈的apk是正式版的話,就必須對APK進行對齊處理,用到的工具是zipalign,目錄 sdk\build-tools\25.0.0\zipalign

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

感謝

Android APK打包流程

Android的編譯打包流程詳解

Android應用程序(APK)的編譯打包過程

blog.csdn.net/sinat_23030…

相關文章
相關標籤/搜索