安裝流程總覽:
用戶觸發安裝->系統驗證APK的合法性->解析APK元數據->檢查權限和存儲空間->復制APK到目標位置->生成應用私有數據->注冊組件到系統->安裝完成
關鍵步驟:
1.用戶觸發安裝:
a.通過應用商店b.通過adb命令c.通過文件管理器
2.驗證合法性:
a.驗證簽名b.驗證文件完整性c.安全性掃描-主要是應用商店
3.解析APK元數據
PMS會解析APK中的核心文件,提取應用的基礎信息,用于后續的安裝決策
1)解析 AndroidManifest.xml
a.包名 版本號 版本名b.最低兼容系統版本 目標系統版本c.權限聲明 和危險權限d.組件聲明(Activity Service BroadcastReceive ContentProvider)
2)解析 AndroidManifest.xml 中的資源與配置
a.檢查應用所需的最小內存、屏幕尺寸等硬件要求(<uses-feature>)。b.解析應用圖標、啟動 Activity(帶 LAUNCHER 類型的 intent-filter)等信息,用于安裝后展示。
4.檢查權限和存儲空間
系統會進行以下前置檢查,決定是否允許安裝:
1)權限驗證
? 安裝未知來源權限??(Android 8.0+):若 APK 來自非應用商店(如本地文件),需用戶手動授予“安裝未知應用”權限(針對瀏覽器、文 件管理器等來源)。
??危險權限預檢查??:APK 聲明的危險權限(如相機、位置)會在安裝時提示用戶(部分系統會跳過此步驟,改為首次使用時請求)。
2)存儲空間檢查
檢查設備存儲(內部/外部)剩余空間是否足夠容納 APK 文件及其運行所需資源(如解壓后的 dex、庫文件)。
5.復制 APK 到目標位置
驗證通過后,系統會將 APK 復制到 ??安裝目錄??,安裝位置由以下規則決定:
(1)默認位置:內部存儲(/data/app)
路徑示例:/data/app/<包名>-<隨機字符串>/base.apk。
特點:
應用卸載時,此目錄會被完全刪除(包括數據和緩存)。
僅系統應用或擁有 INSTALL_PACKAGES 權限的應用可寫入此目錄。
(2)外部存儲(/sdcard/Android/data/<包名>/app)
路徑示例:/storage/emulated/0/Android/data/com.example.app/app/base.apk。
特點:
需用戶授權(通過 )。
卸載應用時,此目錄的 APK 文件會被刪除,但應用私有數據(如 /data/data/<包名>)仍可能保留(取決于 APK 聲明)。
6.生成應用私有數據目錄
系統會為應用創建 ??私有數據目錄??,用于存儲應用運行時的數據(如數據庫、SharedPreferences、緩存等):
路徑:/data/data/<包名>(內部存儲)或 /storage/emulated/0/Android/data/<包名>(外部存儲)。
子目錄結構:
/data/data/com.example.app/
├─ databases/ # SQLite 數據庫文件(如 app.db)
├─ shared_prefs/ # SharedPreferences 文件(XML 格式)
├─ files/ # 普通文件(通過 openFileOutput() 創建)
└─ cache/ # 緩存文件(系統可能清理)
安卓應用的安裝流程是一個涉及 ??系統服務、文件操作、權限驗證?? 的復雜過程,核心由系統級的 PackageManagerService(PMS)主導。以下從 ??用戶觸發安裝?? 到 ??應用就緒可用?? 逐步驟拆解,結合系統組件(如 PMS、Installer)和應用文件(APK 結構)的協作邏輯,幫你徹底理解。
- 注冊組件到系統
PMS 會將 APK 中聲明的 ??四大組件(Activity、Service、BroadcastReceiver、ContentProvider)?? 注冊到系統,以便其他應用或系統通過 Intent 調用:
??Activity??:注冊后可通過 startActivity(Intent) 啟動(需匹配 intent-filter)。
??Service??:注冊后可通過 startService() 或 bindService() 調用。
??BroadcastReceiver??:注冊后可通過 sendBroadcast(Intent) 觸發。
??ContentProvider??:注冊后可通過 ContentResolver 訪問數據。
- 安裝完成與通知
所有步驟完成后,系統會:
更新應用列表(如桌面添加應用圖標)。
觸發 ACTION_PACKAGE_ADDED 廣播(其他應用可監聽此廣播感知新應用安裝)。
提示用戶安裝成功(如彈出“應用已安裝”提示)。