參考: http://blog.csdn.net/shangmingchao/article/details/47375111html
首先,須要瞭解一下構建APK的七大工具:java
①aaptandroid
全稱是Android Asset Packaging Tool,Android資源打包工具。能夠將資源文件編譯成二進制文件,還能夠查看、建立、更新zip格式的文檔附件(zip、jar、apk)。算法
②aidl數據結構
全稱是Android Interface Definition Language,Android接口定義語言。能夠將.aidl文件編譯成.Java文件。ide
③javac工具
全稱是Java Compiler,Java編譯器。能夠將Java語言編寫的類和接口定義文件(.java)編譯成字節碼類文件(.class)。佈局
④dx優化
全稱是Dalvik Executable,Dalvik虛擬機可執行程序。能夠將部分.class文件轉換成一個.dex文件。ui
⑤apkbuilder
能夠將.dex文件、已經打包好的資源文件、libs中的Native庫等其它資源打包成未簽名的.apk文件。SDK3.0以後廢棄了該工具,能夠直接利用sdklib.jar中的APKBuilderMain.class實現其功能。
⑥jarsigner
全稱是Java Archive Signer,Jar簽名工具。能夠爲jar文件簽名,還能夠校驗jar文件的簽名和完整性。
⑦zipalign
能夠優化apk。以幫助操做系統更高效地根據請求獲取資源,將Data structure alignment(DSA,數據結構對齊標準)限定爲4-byte boundaries。
這七大工具就包含在 咱們配置Android SDK時下載的 Android SDK Build-tools中,有了這「七個小矮人」的幫助,咱們就能順利地將IDE中的項目變成能夠在設備上運行的應用程序了,下圖簡單描述了這個過程,是官網上的一張圖^_^。
詳細的構建過程以下圖所示:
也是官網上的一張圖,哈哈。總之就是利用各類工具以生成中間文件(intermediates)的形式最終生成apk文件。下面是關於這個過程的一些解釋:
①aapt工具將程序的資源文件(如AndroidManifest.xml文件、Activity中的xml佈局文件)進行編譯,並生成供Java代碼引用資源的R.java文件。
②aidl工具將全部.aidl接口轉換成.java接口。
③全部的Java代碼(包括R.java和.aidl文件)被Java編譯器編譯成.class文件。
④dex工具將全部的.class文件轉換成Dalvik字節碼,第三方庫和全部在module構建中用到的.class文件也將被轉換成.dex文件,以便被打包成最終的.apk文件。
⑤全部無需編譯的資源(如圖片)、已經編譯好的資源,以及.dex文件被髮往apkbuilder工具以打包成一個.apk文件。
⑥打包好了.apk文件後,一旦apk被建立,在安裝到設備以前必須用debug key或release key簽名。
⑦最終,若應用已經用發行模式簽名了,你必須用zipalign工具對齊.apk。由於對齊最終的apk有助於該應用在設備上運行時減少內存的使用。
Android構建對應的API Level參見:API_LEVEL。