亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android內核開發:淺析APK的安裝過程

發布時間:2020-06-09 08:46:27 來源:網絡 閱讀:7121 作者:Jhuster 欄目:移動開發

本文是《Android內核》開發系列文章的第十篇,上一階段,我們重點學習和分析了Android系統的啟動過程,那么,從本文開始,準備介紹一下如何從Android源碼中添加、修改、刪除系統級別的APP應用。作為開篇,我們先從簡單的理論入手,介紹一下Android系統中的APK文件究竟是個什么東西?它是如何安裝到系統中去的?


我們在學習和了解一項新事物的時候,最快速的方法往往是與已知的事物進行比較,因此,我們首先來簡單聊一聊Windows應用程序的安裝過程。


1.  一般Windows應用程序的安裝過程分為如下幾步:


(1) 解壓exe文件到系統的臨時目錄


這個臨時目錄通常是C:\Windows\Temp ,當然,并不是所有的程序的安裝都需要先解壓到臨時目錄。


(2) 拷貝核心文件到指定的程序目錄


一般一個應用程序都會包含很多文件,如二進制文件、圖標、靜態庫、動態庫、配置文件、其他資源文件等等。這個過程就是把這些必須的文件拷貝到目標目錄,如:D:\Software\軟件名\,當然,有的軟件還會把一些重要的或者公共的dll文件拷貝到系統的目錄下(C:\Windows\),如一些驅動文件、系統級別的dll文件、公共共享文件等等。


(3) 寫注冊表


很多操作需要寫系統的注冊表,如安裝屬性的配置、注冊服務程序、設置文件關聯、添加右鍵菜單、注冊dll文件、在控制面板的添加/刪除程序中注冊自己等等。


(4) 添加到開始菜單以及桌面快捷方式


這個不用過多解釋,雖然我們可以每次都進入到程序安裝目錄點擊exe來啟動程序,但是添加程序到開始菜單以及桌面快捷方式可以更加方便地為用戶提供訪問程序的入口。


2.  然后,我們再來看看Android系統上APK是怎么安裝的?


(1) 拷貝apk文件到指定目錄


在Android系統中,apk安裝文件是會被保存起來的,默認情況下,用戶安裝的apk首先會被拷貝到 /data/app 目錄下。


/data/app目錄是用戶有權限訪問的目錄,在安裝apk的時候會自動選擇該目錄存放用戶安裝的文件,而系統出廠的apk文件則被放到了 /system 分區下,包括 /system/app,/system/vendor/app,以及 /system/priv-app 等等,該分區只有Root權限的用戶才能訪問,這也就是為什么在沒有Root手機之前,我們無法刪除系統出廠的app的原因了。


(2) 解壓apk,拷貝文件,創建應用的數據目錄


為了加快app的啟動速度,apk在安裝的時候,會首先將app的可執行文件(dex)拷貝到 /data/dalvik-cache 目錄,緩存起來。


然后,在/data/data/目錄下創建應用程序的數據目錄(以應用的包名命名),存放應用的相關數據,如數據庫、xml文件、cache、二進制的so動態庫等等。


(3)  解析apk的AndroidManifinest.xml文件


Android系統中,也有一個類似注冊表的東西,用來記錄當前所有安裝的應用的基本信息,每次系統安裝或者卸載了任何apk文件,都會更新這個文件。這個文件位于如下目錄:


/data/system/packages.xml


系統在安裝apk的過程中,會解析apk的AndroidManifinest.xml文件,提取出這個apk的重要信息寫入到packages.xml文件中,這些信息包括:權限、應用包名、APK的安裝位置、版本、userID等等。


由此,我們就知道了為啥一些應用市場和軟件管理類的app能夠很清楚地知道當前手機所安裝的所有的app,以及這些app的詳細信息了。


(4) 其他操作


與windows應用安裝類似,部分apk的安裝也會向Launcher應用申請添加創建快捷方式。


3.  小結


關于APK的安裝過程就簡單介紹到這里了,有任何疑問或者建議歡迎留言或者來信lujun.hust@gmail.com交流,或者關注我的新浪微博 @盧_俊 獲取最新的文章和資訊。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

祥云县| 绥化市| 太仓市| 安仁县| 民和| 屯留县| 宁河县| 丰都县| 阜宁县| 杂多县| 枣阳市| 桑日县| 乌拉特前旗| 广汉市| 兴安盟| 南部县| 西和县| 外汇| 太和县| 泰和县| 沙洋县| 焦作市| 昭平县| 蕲春县| 郎溪县| 乌拉特中旗| 安义县| 阿拉善右旗| 武邑县| 娱乐| 松桃| 县级市| 中牟县| 长治县| 北流市| 沭阳县| 平乡县| 田阳县| 吉林市| 沅江市| 尖扎县|