java 打包apk_Android APK打包流程
簡(jiǎn)單build流程圖
官網(wǎng)給了我們一張非常簡(jiǎn)單的編譯、打包、apk生成內(nèi)容以及簽名的圖片。圖片大體介紹了從Project到運(yùn)行到設(shè)備或者模擬器的一個(gè)大體流程,我們也從中看到一個(gè)完整的apk包含如下內(nèi)容:一個(gè)或多個(gè)dex文件、resources.arsc、未編譯的資源文件以及AndroidManifest.xml文件等等
詳細(xì)build流程圖
官網(wǎng)給了我們一張非常清晰的打包流程圖:
編譯打包步驟:
1. 打包資源文件,生成R.java文件
打包資源的工具是aapt(The Android Asset Packaing Tool)(E:\Documents\Android\sdk\build-tools\25.0.0\aapt.exe)。
在這個(gè)過(guò)程中,項(xiàng)目中的AndroidManifest.xml文件和布局文件XML都會(huì)編譯,然后生成相應(yīng)的R.java,另外AndroidManifest.xml會(huì)被aapt編譯成二進(jìn)制。
存放在APP的res目錄下的資源,該類資源在APP打包前大多會(huì)被編譯,變成二進(jìn)制文件,并會(huì)為每個(gè)該類文件賦予一個(gè)resource id。對(duì)于該類資源的訪問(wèn),應(yīng)用層代碼則是通過(guò)resource id進(jìn)行訪問(wèn)的。Android應(yīng)用在編譯過(guò)程中aapt工具會(huì)對(duì)資源文件進(jìn)行編譯,并生成一個(gè)resource.arsc文件,resource.arsc文件相當(dāng)于一個(gè)文件索引表,記錄了很多跟資源相關(guān)的信息。
2. 處理aidl文件,生成相應(yīng)的Java文件
這一過(guò)程中使用到的工具是aidl(Android Interface Definition Language),即Android接口描述語(yǔ)言(E:\Documents\Android\sdk\build-tools\25.0.0\aidl.exe)。
aidl工具解析接口定義文件然后生成相應(yīng)的Java代碼接口供程序調(diào)用。如果在項(xiàng)目沒(méi)有使用到aidl文件,則可以跳過(guò)這一步。
3. 編譯項(xiàng)目源代碼,生成class文件
項(xiàng)目中所有的Java代碼,包括R.java和.aidl文件,都會(huì)變Java編譯器(javac)編譯成.class文件,生成的class文件位于工程中的bin/classes目錄下。
4. 轉(zhuǎn)換所有的class文件,生成classes.dex文件
dx工具生成可供Android系統(tǒng)Dalvik虛擬機(jī)執(zhí)行的classes.dex文件,該工具位于(E:\Documents\Android\sdk\build-tools\25.0.0\dx.bat)。
任何第三方的libraries和.class文件都會(huì)被轉(zhuǎn)換成.dex文件。dx工具的主要工作是將Java字節(jié)碼轉(zhuǎn)成成Dalvik字節(jié)碼、壓縮常量池、消除冗余信息等。
5. 打包生成APK文件
所有沒(méi)有編譯的資源,如images、assets目錄下資源(該類文件是一些原始文件,APP打包時(shí)并不會(huì)對(duì)其進(jìn)行編譯,而是直接打包到APP中,對(duì)于這一類資源文件的訪問(wèn),應(yīng)用層代碼需要通過(guò)文件名對(duì)其進(jìn)行訪問(wèn));編譯過(guò)的資源和.dex文件都會(huì)被apkbuilder工具打包到最終的.apk文件中。
打包的工具apkbuilder位于 android-sdk/tools目錄下。apkbuilder為一個(gè)腳本文件,實(shí)際調(diào)用的是(E:\Documents\Android\sdk\tools\lib)文件中的com.android.sdklib.build.ApkbuilderMain類。
6. 對(duì)APK文件進(jìn)行簽名
一旦APK文件生成,它必須被簽名才能被安裝在設(shè)備上。
在開(kāi)發(fā)過(guò)程中,主要用到的就是兩種簽名的keystore。一種是用于調(diào)試的debug.keystore,它主要用于調(diào)試,在Eclipse或者Android Studio中直接run以后跑在手機(jī)上的就是使用的debug.keystore。
另一種就是用于發(fā)布正式版本的keystore。
7. 對(duì)簽名后的APK文件進(jìn)行對(duì)齊處理
如果你發(fā)布的apk是正式版的話,就必須對(duì)APK進(jìn)行對(duì)齊處理,用到的工具是zipalign(E:\Documents\Android\sdk\build-tools\25.0.0\zipalign.exe)
對(duì)齊的主要過(guò)程是將APK包中所有的資源文件距離文件起始偏移為4字節(jié)整數(shù)倍,這樣通過(guò)內(nèi)存映射訪問(wèn)apk文件時(shí)的速度會(huì)更快。對(duì)齊的作用就是減少運(yùn)行時(shí)內(nèi)存的使用。
總結(jié)
以上是生活随笔為你收集整理的java 打包apk_Android APK打包流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java类和对象实例对象_Java类、对
- 下一篇: java bat 运行 jar文件_运行