Android 編譯到運行APK過程總結

APK編譯過程

這裏寫圖片描述

  1. Android通過AAPT工具將.xml資源文件編譯成R.java的二進制文件,除了assets、raw目錄下的文件;
  2. 將java文件編譯成.class文件;
  3. 通過dex工具將.class文件轉換成.dex文件
  4. 優化dex文件 : Davlik模式下使用 dexopt工具將.dex文件優化得到.odex文件 ; Art模式下使用dexoat工具將.dex文件優化得到.oat文件;
  5. apkbuilder會將.dex文件和未被編譯的文件編譯成apk;
  6. apkSinger對apk簽名;
  7. zipalign對簽名後的apk進行優化

APK包內容

這裏寫圖片描述

Android 安裝的apk文件實際上是以.zip結尾的壓縮文件,解壓後的文件內容如上圖所示

  • AndroidManifest.xml對應源代碼中的AndroidManifest.xml, 但這裏是編譯過的,文件內容已經不同了;

  • assets對應源代碼的assets目錄, 是直接複製過來的;

  • classes.dex(classes2.dex、classes3.dex等等)是包含所有Java文件對應的字節碼,其中classes.dex是程序主包;

  • lib目錄對應源代碼中的libs目錄,包含so文件;

  • META-INF目錄包含CERT.RSA、CERT.SF、MANIFEST.MF等, 保存了各個資源文件的SHA1值,用於校驗資源文件是否被篡改,從而防止二次打包時資源文件被替換;

  • res目錄對應源碼的res目錄, 包含各種圖片、xml等;

  • resources.arsc包含了各個資源文件的映射, 可以理解爲索引, 通過該文件能找到對應的資源文件信息。

APK運行過程

通過ClassLoader將.dex文件加載到虛擬機中

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