日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )

發布時間:2025/6/17 Android 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、APK 文件結構
  • 二、APK 打包流程
  • 三、APK 安裝流程
  • 四、安卓虛擬機





一、APK 文件結構



Android 應用的安裝包時 以 " .apk " 為后綴的 APK 文件 ;

APK 是 " Android Package " 的縮寫 ;

將打包好的 APK 文件安裝到 Android 手機中 , 就是可運行的應用程序 ;


APK 文件結構 :

① assets : 資源文件 , 該目錄下的資源文件不經過 aapt 工具編譯 ;

② lib : 存放 動態庫 “.so” 文件 , NDK 中 C / C++ 調用的函數庫 ;

③ META-INF : 該目錄中存放 apk 的簽名文件 ;

  • CERT.SF : 摘要加密 , 使用私鑰 對 摘要明文 加密后的 密文信息 , 是加密文件 , 如果要解密該文件 , 必須使用與私鑰配對的公鑰進行解密 ;
  • CERT.RSA : 文件是簽名證書文件 , 存放的是公鑰和加密算法的描述 ;
  • MANIFEST.MF : 文件摘要 , 存放程序清單文件 , 包含了 APK 安裝包 中所有文件的 摘要明文 ;
  • 剩余文件 : 都是可忽略的資源文件 ;

④ res : 資源文件 , 經過了 aapt 工具編譯后的文件 ; 這個目錄下的文件不再介紹 , 太熟悉了 ;

⑤ AndroidManifest.xml : 清單文件 , 聲明了 Application , 組件 , 權限 , 元數據 等信息 ;

⑥ classes.dex : Dalvik 字節碼文件 , Android 中的可執行文件 , 可以在 Android 系統中運行 ;

⑦ resources.arsc : 資源文件映射表 , 使用 aapt 編譯 res 目錄下的資源文件形成的文件 , 用于根據 id 查找資源路徑 ;





二、APK 打包流程



APK 打包流程 :

① 使用 AAPT 工具打包資源文件 , 生成 R.java , resources.ap 文件 ;

② 使用 AIDL tool 工具 , 處理 AIDL 文件 , 生成對應的 Java 文件 ;

③ 使用 javac 工具編譯 Java 源碼為 class 字節碼文件 ;

④ 使用 dx 工具將 class 字節碼文件打包成 dex 字節碼文件 , 這是 Dalvik 虛擬機字節碼文件 ;

⑤ 使用 apkbuilder 工具生成未簽名的 apk 文件 ;

⑥ 使用 jarsigner 工具對 apk 文件進行簽名 , 生成簽名后的文件 ;

⑦ 使用 zipalign 工具對簽名后的 apk 文件進行對齊操作 ;





三、APK 安裝流程



APK 444 種安裝方式 :

① 系統程序安裝 ;

② 使用應用市場安裝 ;

③ 手機自帶安裝 ;

④ 使用 ADB 調試工具安裝 ;


APK 安裝流程 :

① 將 APK 安裝包復制到 /data/app 目錄下解壓 , 掃描安裝包 ;

② 將 dex 文件保存 /data/dalvik-cache 目錄中 ;

③ 在 /data/data/包名 下創建對應 apk 包名的應用數據目錄 ;


系統自帶程序在 /system/app 目錄下 , 獲得 adb root 權限后才能刪除 ;


應用卸載 , 就是將 /data/app/ , /data/dalvik-cache/ , /data/data/ 等目錄下的相關文件刪除 ;





四、安卓虛擬機



虛擬機是一個可以運行 class , odex , oat 可執行文件的運行環境 ;

常見的虛擬機有 Java 虛擬機 , Dalvik 虛擬機 , ART 虛擬機 ;


Java 虛擬機 :
運行的 class 字節碼文件 , 運行程序時解碼 class 文件中的內容 ;
基于棧架構 , 需要頻繁在棧上讀寫數據 , 造成較多的指令分派 , 更多的內存訪問次數 , 比較耗費 CPU 時間 ;

編譯時 : Java 源碼 , 使用 javac 編譯器 , 編譯成 class 字節碼文件 ;
運行時 : 類加載器通過 Java 類庫驗證字節碼 , 驗證通過會后進入 Java 虛擬機 , 進入 Java 解釋器 或 即時編譯器 , 然后進入運行時系統 , 之后進入操作系統 , 然后調用硬件 ;


Dalvik 虛擬機 :
基于 JIT 機制 ( 即時編譯技術 ) , Android 5.05.05.0 以下使用的虛擬機是 Dalvik 虛擬機 , 該虛擬機的可執行文件是 dex 文件 , 該文件比 class 字節碼文件更小 ;
JIT ( Just In Time ) 即時編譯技術 , 對應 Dalvik 虛擬機 ;
基于寄存器架構 , 通過寄存器間接訪問數據 , 該方式比基于棧架構速度更快 ;


ART 虛擬機 :
Android 5.05.05.0 以上使用的虛擬機是 ART 虛擬機 ;
AOT ( Ahhead Of Time ) 預編譯技術 , 對應 ART 虛擬機 ;


Java 虛擬機 / Dalvik 虛擬機 / ART 虛擬機 都向上層提供了 333 個接口 ,
JNI_GetDefaultJavaVMInitArgs
JNI_CreateJavaVM
JNI_GetCreatedJavaVMS ;

虛擬機之間可實現無縫銜接 ;


Dalvik 虛擬機 與 ART 虛擬機區別 : 虛擬機中有個 persist.sys.dvlvik.vm.lib 字段 ,
如果該字段存儲的是 libdvm.so , 該虛擬機是 Dalvik 虛擬機 ;
如果該字段存儲的是 ;ibart.so , 該虛擬機是 ART 虛擬機 ;


Dalvik 虛擬機 與 ART 虛擬機可執行文件 :

Dalvik 虛擬機加載 dex 文件加載時不是直接加載 dex 文件 , 加載執行的是 odex 文件 , odex 文件是通過 dexopt 工具對 dex 進行優化生成的 ;

ART 虛擬機加載 dex 文件時加載的是 oat 文件 , oat 文件時通過 dex2oat 工具對 dex 文件進行優化生成的 ;

總結

以上是生活随笔為你收集整理的【Android 安装包优化】APK 打包流程 ( 文件结构 | 打包流程 | 安装流程 | 安卓虚拟机 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。