(1)打包過程輸入的是什麼?html
(2)打包過程輸出的是什麼?java
(3)打包過程使用了哪些工具?android
打包資源文件的工具是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
處理aidl文件的工具是aidl(Android Interface Definition Language)
,即Android接口描述語言,目錄 sdk\build-tools\25.0.0\aidl
。.net
aidl工具解析接口定義文件而後生成相應的Java代碼接口
供程序調用。若是在項目沒有使用到aidl文件,則能夠跳過這一步。debug
編譯源代碼使用工具是 Java編譯器(javac)
調試
項目中全部的Java代碼,包括R.java和.aidl文件
,都會變Java編譯器(javac)編譯成.class文件
,生成的class文件位於工程中的bin/classes目錄下。
這過程使用工具 dx(dex)
生成可供Android系統Dalvik虛擬機執行的classes.dex
文件,工具目錄(sdk\build-tools\25.0.0\dx)
。
任何第三方的libraries和.class文件都會被轉換成.dex文件。dx工具的主要工做是將Java字節碼
轉成 Dalvik字節碼
、壓縮常量池、消除冗餘信息等。
打包的工具apkbuilder
,目錄 android-sdk/tools
,apkbuilder爲一個腳本文件,實際調用的是(sdk\tools\lib)文件中的com.android.sdklib.build.ApkbuilderMain類。
全部沒有編譯的資源,如images、assets目錄下資源(該類文件是一些原始文件,APP打包時並不會對其進行編譯,而是直接打包到APP中,對於這一類資源文件的訪問,應用層代碼須要經過文件名對其進行訪問);
編譯過的資源和.dex文件都會被apkbuilder工具打包到最終的.apk文件中。
一旦APK文件生成,它必須被簽名才能被安裝在設備上。
在開發過程當中,主要用到的就是兩種簽名的keystore。一種是用於調試的debug.keystore,它主要用於調試,在Eclipse或者Android Studio中直接run之後跑在手機上的就是使用的debug.keystore
;
另外一種就是用於發佈正式版本的relese.keystore
,須要開發者本身配置。
若是你發佈的apk是正式版的話,就必須對APK進行對齊處理,用到的工具是zipalign
,目錄 sdk\build-tools\25.0.0\zipalign
。
對齊的主要過程是將APK包中全部的資源文件距離文件起始偏移爲4字節整數倍,這樣經過內存映射訪問apk文件時的速度會更快。對齊的做用就是減小運行時內存的使用。