1.打包資源文件以生成R.java文件。
2.處理aidl文件並生成相應的java文件。
3.編譯工程源代碼,生成相應的類文件。
4.轉換所有類文件以生成classes.dex文件。
5、打包生成apk。
6.簽署apk文件。
7.處理簽名的apk文件。
包裝過程中使用的工具
名字
操作系統路徑中的函數介紹源代碼路徑。
american association of physics teachers 美國物理教師協會
(安卓資產包工具)
Android資源打包工具
$ { ANDROID _ SDK _ HOME }/build-tools/
ANDROID_VERSION/aapt
框架\基礎\工具\aap
aidl
(android界面定義語言)
Android界面描述語言,
將aidl轉換成。java文件
$ { ANDROID _ SDK _ HOME }/build-tools/
ANDROID_VERSION/aidl
框架\基礎\工具\aidl
javacJava編譯器
${JDK主頁}/java
c或/usr/bin/javac
DEXEDRINE的簡稱
轉換。到Davik虛擬機的類文件
可識別。dex文件
$ { ANDROID _ SDK _ HOME }/build-tools/
ANDROID_VERSION/dx
apkbuilder
生成apk數據包
${ANDROID_SDK_HOME}/tools/
apkbuilder
sdk\sdkmanager\libs\sdklib\
src\com\android\sdklib\build\
ApkBuilderMain.java
jarsigner.jar文件的簽名工具是$ {JDK _ home}/jarsigner或/usr/bin/jarsigner。
Zipalign字節碼對齊工具
${ ANDROID _ SDK _ HOME }/工具
/zipalign
步驟1:打包資源文件並生成R.java文件。
輸入資源文件(即項目中res中的文件)、資產文件(相當於另壹個資源,不像res中的文件那樣被Android系統優化)、AndroidManifest.xml文件(從這裏讀取包名,因為需要生成R.java文件)、Android基礎類庫(Android.jar文件)。
工具aapt工具
輸出打包的資源(bin目錄下的resources.ap_ file)和R.java文件(gen目錄下)。
Aapt,壹個打包資源的工具,大部分文本格式的XML資源文件會被編譯成二進制格式的XML資源文件,除了在APK打包的資產和res/raw資源之外,其他所有資源都會被編譯或處理。。
生成過程主要調用aapt源目錄下Resource.cpp文件中的buildResource()函數。這個函數首先檢查AndroidManifest.xml的合法性,然後處理res目錄下的資源子目錄。被處理的函數是makeFileResource(),它包括資源文件名的合法性檢查。向資源表添加條目等。處理完成後,調用compileResourceFile()函數來編譯res和asserts目錄中的資源,並生成resources.arsc文件。compileResourceFile()函數位於aapt源目錄的ResourceTable.cpp文件中。最後這個函數會調用parseAndAddEntry()函數生成R.java文件,然後調用compileXmlfile()函數編譯res目錄子目錄下的xml文件,這樣處理後的xml文件就是簡單的“加密”了。最後,將所有的資源、編譯後的resorces.arsc文件和“加密”的AndroidManifest.xml文件打包並壓縮到resources.ap_ file中(用Ant工具命令行編譯將生成壹個ap_ file,其名稱與build.xml中“項目名稱”指定的屬性相同)。
關於這壹步更詳細的過程,請閱讀. Android . SDK lib . build . apkbuilderman類。其代碼實現位於android系統源代碼的SDK \ SDK manager \ libs \ sdkblib \ src \ com \ Android \ sdkblib \ build \ ApkBuilder.java文件中。代碼構造壹個apkbuilder類,然後基於包含resources.arsc的文件生成壹個apk文件,這個文件通常以ap_結尾,然後調用addSourceFolder()函數添加工程資源,addSourceFolder()會調用processFileForResource()函數向apk文件添加資源,apk文件包括res目錄和asserts目錄下的文件。添加資源後,調用addResourceFromJar()函數將依賴庫寫入Apk文件,然後調用addNativeLibraries()函數在項目libs目錄下添加原生庫(android NDK編譯的so或bin文件),最後調用sealApk()關閉apk文件。
第六步:簽署apk文件。
輸入無符號。apk文件。
工具jarsigner
輸出帶符號的。apk文件
android應用程序需要經過簽名才能安裝在Android設備上。apk文件的簽名方式有兩種:壹種是調試程序時簽名,用eclipse開發android程序時,編譯調試程序時會使用壹個debug.keystore來簽名apk;另壹種是在程序打包發布時簽名。在這種情況下,妳需要提供壹個符合android開發文檔中要求的簽名文件。簽名也有兩種方式:壹種是用jdk中提供的jarsigner工具進行簽名;另壹種是使用android源代碼中提供的signapk工具,其代碼位於android系統源代碼的build\tools\signapk目錄下。
步驟7:對齊簽名的apk文件。
輸入簽名。apk文件。
工具拉鏈對齊工具
輸出對齊的。apk文件。
這壹步要用到的工具是zipalign,位於android-sdk\tools目錄下,源代碼位於android系統源代碼的build\tools\zipalign目錄下。它的主要工作是對齊spk包,以便spk包中的所有資源文件都從文件的開頭偏移4個字節的整數倍。這樣通過內存映射訪問apk文件會更快。驗證apk文件是否對齊的工作由ZipAlign.cpp文件的verify()函數完成,處理對齊的工作由process()函數完成。
以具體項目包含的具體文件為例繪制如下: