android項目編譯過程---詳細分析與實例

1 首先一個android項目生成的文件如圖所示:


androidManifest文件:android項目的配置文件包括軟件包、系統版本、程序組件、運行權限等。

res:資源文件:drawable文件夾下的圖標資源、layout子目錄下的佈局資源、values目錄下的字符串資源等

bin:存放最後生成的APk文件夾

src:按包名組織的源碼文件

assets/:程序需要使用的其他文件,例如額外的數據和可執行文件等

properties:Eclipse 使用的項目配置文件

另外如果程序中使用鏈接庫則會另有文件夾

jni/:NDK 開發的 C/C++ 源碼,和 Makefile 文件

lib/:NDK 編譯得到的 ELF 文件

********************************分割線***************************************************

分析完項目文件結構後我們來分析項目編譯過程:

一  manifest和resource asset一起編譯生成資源包文件r.java。

二 編譯本地庫文件

使用 NDK 中的工具鏈,將jni/目錄下的 C/C++ 源文件,根據Makefile中的規則編譯爲 ELF 動態鏈接庫文件,放到lib/目錄下。擴展名爲SO文件。由於本例子沒有庫文件。所以本步驟略。

三 編譯 Java 源碼:使用 Java SDK 中的javac,將源文件、SO文件、資源文件,一起打包成.class文件

javac:javac 是javac語言編程編譯器。javac工具由java語言編寫的類和接口的定義,並將它們編譯成字節代碼的class文件。也就是java虛擬機讀寫的指令碼文件。




Javac的資料:http://www.cnblogs.com/JeffChen/archive/2008/01/16/1041783.html

本例子中:由於沒有庫文件,將資源文件源文件進行編譯成資源文件。


四、生成 DEX 文件:使用 SDK 中的dx,將所有.class文件轉換爲一個classes.dex文件,即android虛擬機所執行指令代碼。

如圖所示DX命令格式


生成完的包文件


五 生成資源文件

使用SDK提供的aapt工具,根據參數將manifest\res\assets\  文件生成resources資源文件。



 六、資源文件包和dex類文件包進行打包成APK



七、最後一步簽名APK文件

所有的APK文件必須簽名,android的APK文件是自簽名的,不是經過官方驗證的簽名。如果嘗試安裝一個沒有簽名的APK會報錯的


簽名是分:調試版和發佈版的

Eclipse生成的apk都是經過調試版簽名的。這樣的程序是不允許發佈的官方市場的,如果想發佈,必須有自己的一個簽名。纔可以發佈。本文介紹一下如何簽名

用到的 工具是

keytool  生成數字證書

jarsigner 根據數字證書籤名APK文件


keytool 工具

keytool -genkey -v -keystore zhangxueyi.keystore -alias zhangxueyi.keystore -keyalg RSA -validity 20000
  
說明:
      1
keytool是工具名稱,-genkey意味着執行的是生成數字證書操作,-v表示將生成證書的詳細信息打印出來,顯示在dos窗口中;
      2
-keystore zhangxueyi.keystore 表示生成的數字證書的文件名爲“lzhangxueyi.keystore”
      3
-alias zhangxueyi.keystore 表示證書的別名爲zhangxueyi.keystore”,當然可以不和上面的文件名一樣;
      4
-keyalg RSA 表示生成密鑰文件所採用的算法爲RSA
      5
-validity 20000 表示該數字證書的有效期爲20000天,意味着20000天之後該證書將失效.

好根據這個生成數字證書


OK,數字證書生成完畢



接下來用jarsigner 工具來簽名文件,如何查看APK是否簽名呢?


$ jarsigner -verifymy_signed.apk

用這個命令查看是否簽名如果未簽名則顯示no manifest.
如果已經簽名,顯示 jar is unsigned


可見此程序(0806test.apkl)還沒有簽名

接下來簽名此文件



Ok簽名成功。。。下面我們來驗證一下吧



Ok!!!!

http://www.cnblogs.com/jacktu/archive/2009/02/09/1386842.html 簽名的參考文章。

    總結:

1、生成資源類文件

2、編譯本地庫文件

3、編譯源碼文件、資源類文件、本地庫文件生成..class文件

4、用DX工具將..class轉換爲android指向的DX文件

5、用AAPt工具編譯資源文件生成resources文件

6、這一步就是打包資源文件盒dex文件生成APK文件

7、簽名APK文件 以便發佈APK文件

本文爲我親身試驗的過程,這也就是android項目的完整編譯過程。本人知識有限,如有不對的地方,望高手指出,感激不盡微笑





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章