Android 應用的安裝流程

安裝流程總覽:

用戶觸發安裝->系統驗證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 結構)的協作邏輯,幫你徹底理解。

  1. 注冊組件到系統
    PMS 會將 APK 中聲明的 ??四大組件(Activity、Service、BroadcastReceiver、ContentProvider)?? 注冊到系統,以便其他應用或系統通過 Intent 調用:

??Activity??:注冊后可通過 startActivity(Intent) 啟動(需匹配 intent-filter)。
??Service??:注冊后可通過 startService() 或 bindService() 調用。
??BroadcastReceiver??:注冊后可通過 sendBroadcast(Intent) 觸發。
??ContentProvider??:注冊后可通過 ContentResolver 訪問數據。

  1. 安裝完成與通知
    所有步驟完成后,系統會:

更新應用列表(如桌面添加應用圖標)。
觸發 ACTION_PACKAGE_ADDED 廣播(其他應用可監聽此廣播感知新應用安裝)。
提示用戶安裝成功(如彈出“應用已安裝”提示)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91722.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91722.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91722.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于 Amazon Bedrock 與 Anthropic Claude 3 智能文檔處理方案:從掃描件提取到數據入庫全流程實踐

基于 Amazon Bedrock 與 Anthropic Claude 3 智能文檔處理方案&#xff1a;從掃描件提取到數據入庫全流程實踐 文章目錄基于 Amazon Bedrock 與 Anthropic Claude 3 智能文檔處理方案&#xff1a;從掃描件提取到數據入庫全流程實踐方案架構前提準備&#xff1a;亞馬遜云科技注冊…

深入淺出設計模式——創建型模式之單例模式 Singleton

文章目錄“天上天下&#xff0c;唯我獨尊”——單例模式單例模式簡介單例模式結構餓漢式懶漢式客戶端示例運行結果單例模式總結構建型模式 Creational Patterns 小結 Summary代碼倉庫“天上天下&#xff0c;唯我獨尊”——單例模式 你能在電腦上調出兩個Windows任務管理器嗎&a…

靜電釋放檢測漏報率↓85%!陌訊多模態融合算法在電子廠ESD防護實戰解析

?摘要?? 基于邊緣計算的靜電釋放(ESD)視覺檢測方案&#xff0c;通過多模態融合技術顯著提升復雜場景魯棒性。實測顯示&#xff1a;在電子元件裝配線上&#xff0c;ESD事件檢測mAP0.5達89.1%&#xff0c;較基線模型提升28.3%。一、行業痛點&#xff1a;ESD檢測的隱形危機根據…

RAL-2025 | “藏寶圖”驅動的具身導航!HAM-Nav:基于手繪地圖引導的機器人導航

作者&#xff1a;Aaron Hao Tan, Angus Fung, Haitong Wang, Goldie Nejat單位&#xff1a;多倫多大學機械與工業工程系論文標題&#xff1a;Mobile Robot Navigation Using Hand-Drawn Maps: A Vision Language Model Approach出版信息&#xff1a;IEEE ROBOTICS ANDAUTOMATI…

Vue.js 與后端技術結合開發指南

Vue.js 作為現代化的前端框架&#xff0c;可以與多種后端技術完美結合&#xff0c;構建全棧應用。下面我將詳細介紹 Vue 可以與哪些后端技術結合開發&#xff0c;并提供可視化示例。Vue 可結合的后端技術概覽主流組合方案對比后端技術適合場景優點缺點學習曲線Node.js全棧JavaS…

邏輯回歸在銀行貸款審批中的應用:參數選擇與實踐

目錄 一、數據背景與預處理 1.數據前五行 2.數據預處理步驟 二、邏輯回歸的正則化參數選擇 1.交叉驗證選擇最優C 2.為什么選擇召回率作為評估指標&#xff1f; 三、參數選擇的核心結論 四、后續優化方向 在銀行貸款審批場景中&#xff0c;準確判斷貸款人是否符合貸款條…

數據結構前篇 - 深入解析數據結構之復雜度

目錄一、數據結構前言1.1 數據結構1.2 算法二、算法效率2.1 復雜度的概念三、時間復雜度3.1 大O的漸進表示法3.2 時間復雜度計算示例3.2.1 示例13.2.2 示例23.2.3 示例33.2.4 示例43.2.5 示例53.2.6 示例63.2.7 示例7四、空間復雜度4.1 空間復雜度計算示例4.1.1 示例14.1.2 示例…

Master Prompt:AI時代的萬能協作引擎

1. Master Prompt&#xff1a;為什么它正在重塑AI協作范式大模型落地的最大痛點不是技術本身&#xff0c;而是人機協作的斷裂。當企業采購了昂貴的AI系統&#xff0c;卻發現輸出內容反復偏離預期&#xff0c;團隊成員抱怨“AI總聽不懂我要什么”&#xff0c;這種場景每天在無數…

《Kubernetes部署篇:基于Kylin V10+ARM架構CPU使用containerd部署K8S 1.33.3容器板集群(一主多從)》

總結:整理不易,如果對你有幫助,可否點贊關注一下? 更多詳細內容請參考:企業級K8s集群運維實戰 一、架構圖 如下圖所示: 二、環境信息 基于x86_64+aarch64架構使用containerd部署K8S 1.33.3集群資源合集(一主多從) 2、部署規劃 主機名 K8S版本 系統版本 CPU架構 內核版…

一次性接收大量上傳圖片,后端優化方式

文章目錄1. 分塊接收與流式處理2. 異步處理3. 內存映射與臨時文件4. 數據庫優化5. 緩存策略6. 壓縮與格式優化7. 限流與并發控制8. 分布式存儲9. 響應優化10. 監控與錯誤處理11. 數據庫連接池優化1. 分塊接收與流式處理 使用流式處理避免將所有圖片加載到內存中&#xff1a; …

二分查找(基礎)

競賽中心 - 藍橋云課 #include <iostream> #include<bits/stdc.h> using namespace std; #define int long long int N; struct NO {int A,B; }a[10001]; bool ok(int V) {for (int i 0; i < N; i){if (a[i].A / V ! a[i].B){return false;}}return true; } …

流式編程學習思路

流式編程學習思路 作為Java初級工程師,想要掌握流式編程并向高級工程師進階,需要從基礎到進階逐步掌握,結合實戰場景深化理解。以下是為你量身定制的學習清單和思路: 一、基礎階段:吃透 Java Stream 核心API 1. 掌握 Stream 的基本概念 什么是 Stream:理解它與集合(Co…

13-14linux三劍客grep,sed,awk

目錄 三劍客支持擴展正則寫法 grep命令 sed命令 sed指定行查找&#xff1a; sed模糊過濾文件內容 sed之刪除&#xff1a; sed之替換&#xff1a; sed追加插入替換&#xff1a; sed后向引用&#xff1a; awk命令 awk按照行查找 awk模糊過濾文件內容 awk取列 awk指…

損失函數和調度器相關類代碼回顧理解 |nn.CrossEntropyLoss\CosineAnnealingLR

目錄 nn.CrossEntropyLoss CosineAnnealingLR nn.CrossEntropyLoss loss_func nn.CrossEntropyLoss(reduction"sum") 定義nn.CrossEntropyLoss交叉熵損失函數&#xff0c;reduction參數設置為"sum"&#xff0c;表示將所有樣本的損失相加。reduction 參…

中國不同類型竹林分布數據

中國竹林分布的主要特點簡介&#xff1a;總體分布格局&#xff1a;核心區域&#xff1a; 主要分布在長江流域及以南的廣大亞熱帶和熱帶地區。北界&#xff1a; 大致以黃河流域為北界&#xff0c;但天然成片竹林在秦嶺-淮河一線以南才比較普遍。人工引種或特殊小環境下&#xff…

Sqlserver備份恢復指南-完整備份恢復

博主會用簡單清晰的方式&#xff0c;帶你系統學習使用T-SQL命令行的方式 給SQL Server 做備份與恢復。我們按照從零開始、逐步深入的路線來講解&#xff01; 完整備份恢復-差異增量備份恢復-事務日志備份恢復 &#x1f538; SQL Server 備份類型&#xff1a;類型說明完整備份&a…

AI 調酒師上崗!接管酒吧吧臺

7月29日&#xff0c;馬老師的 HHB 音樂酒吧在阿里巴巴西溪園區正式開業&#xff0c;開業這天迎來了一位神秘嘉賓“AI 調酒師”&#xff01; 這位 AI 調酒師不僅能根據你的MBTI、今日情緒、星座運勢、江湖花名等為你特調一杯雞尾酒&#xff0c;還能為這杯酒配上故事和詩文。 點…

【C++進階】一文吃透靜態綁定、動態綁定與多態底層機制(含虛函數、vptr、thunk、RTTI)

【C進階】一文吃透靜態綁定、動態綁定與多態底層機制&#xff08;含虛函數、vptr、thunk、RTTI&#xff09;作者&#xff1a;你的C教練 日期&#xff1a;2025-08-01目錄 靜態綁定 vs 動態綁定非虛函數的三大坑多態的四要素虛析構函數為什么必須寫&#xff1f;探秘 vptr/vftable…

VUE基礎知識2

1.計算屬性&#xff1a;使用計算屬性來描述依賴響應式狀態的復雜邏輯。關鍵字computed:{}//計算屬性&#xff0c;使用的時候和函數方法不一樣&#xff0c;不需要加括號。簡單來說就是模板方法的復雜邏輯放到了計算屬性中去。2.計算屬性緩存VS方法&#xff1a;計算屬性值會基于其…

在PyCharm中將現有Gitee項目重新上傳為全新項目

如果你想將當前本地的Gitee項目重新上傳為一個全新的Gitee項目&#xff08;保留本地代碼但斷開與原倉庫的關聯&#xff09;&#xff0c;可以按照以下步驟操作&#xff1a; 刪除舊的Git遠程倉庫關聯 打開PyCharm&#xff0c;進入你的項目 點擊頂部菜單 Git > Manage Remotes …