本文是《Android內(nèi)核》開發(fā)系列文章的第十篇,上一階段,我們重點(diǎn)學(xué)習(xí)和分析了Android系統(tǒng)的啟動過程,那么,從本文開始,準(zhǔn)備介紹一下如何從Android源碼中添加、修改、刪除系統(tǒng)級別的APP應(yīng)用。作為開篇,我們先從簡單的理論入手,介紹一下Android系統(tǒng)中的APK文件究竟是個什么東西?它是如何安裝到系統(tǒng)中去的?
10年積累的網(wǎng)站制作、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有三門峽免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
我們在學(xué)習(xí)和了解一項(xiàng)新事物的時候,最快速的方法往往是與已知的事物進(jìn)行比較,因此,我們首先來簡單聊一聊Windows應(yīng)用程序的安裝過程。
1. 一般Windows應(yīng)用程序的安裝過程分為如下幾步:
(1) 解壓exe文件到系統(tǒng)的臨時目錄
這個臨時目錄通常是C:\Windows\Temp ,當(dāng)然,并不是所有的程序的安裝都需要先解壓到臨時目錄。
(2) 拷貝核心文件到指定的程序目錄
一般一個應(yīng)用程序都會包含很多文件,如二進(jìn)制文件、圖標(biāo)、靜態(tài)庫、動態(tài)庫、配置文件、其他資源文件等等。這個過程就是把這些必須的文件拷貝到目標(biāo)目錄,如:D:\Software\軟件名\,當(dāng)然,有的軟件還會把一些重要的或者公共的dll文件拷貝到系統(tǒng)的目錄下(C:\Windows\),如一些驅(qū)動文件、系統(tǒng)級別的dll文件、公共共享文件等等。
(3) 寫注冊表
很多操作需要寫系統(tǒng)的注冊表,如安裝屬性的配置、注冊服務(wù)程序、設(shè)置文件關(guān)聯(lián)、添加右鍵菜單、注冊dll文件、在控制面板的添加/刪除程序中注冊自己等等。
(4) 添加到開始菜單以及桌面快捷方式
這個不用過多解釋,雖然我們可以每次都進(jìn)入到程序安裝目錄點(diǎn)擊exe來啟動程序,但是添加程序到開始菜單以及桌面快捷方式可以更加方便地為用戶提供訪問程序的入口。
2. 然后,我們再來看看Android系統(tǒng)上APK是怎么安裝的?
(1) 拷貝apk文件到指定目錄
在Android系統(tǒng)中,apk安裝文件是會被保存起來的,默認(rèn)情況下,用戶安裝的apk首先會被拷貝到 /data/app 目錄下。
/data/app目錄是用戶有權(quán)限訪問的目錄,在安裝apk的時候會自動選擇該目錄存放用戶安裝的文件,而系統(tǒng)出廠的apk文件則被放到了 /system 分區(qū)下,包括 /system/app,/system/vendor/app,以及 /system/priv-app 等等,該分區(qū)只有Root權(quán)限的用戶才能訪問,這也就是為什么在沒有Root手機(jī)之前,我們無法刪除系統(tǒng)出廠的app的原因了。
(2) 解壓apk,拷貝文件,創(chuàng)建應(yīng)用的數(shù)據(jù)目錄
為了加快app的啟動速度,apk在安裝的時候,會首先將app的可執(zhí)行文件(dex)拷貝到 /data/dalvik-cache 目錄,緩存起來。
然后,在/data/data/目錄下創(chuàng)建應(yīng)用程序的數(shù)據(jù)目錄(以應(yīng)用的包名命名),存放應(yīng)用的相關(guān)數(shù)據(jù),如數(shù)據(jù)庫、xml文件、cache、二進(jìn)制的so動態(tài)庫等等。
(3) 解析apk的AndroidManifinest.xml文件
Android系統(tǒng)中,也有一個類似注冊表的東西,用來記錄當(dāng)前所有安裝的應(yīng)用的基本信息,每次系統(tǒng)安裝或者卸載了任何apk文件,都會更新這個文件。這個文件位于如下目錄:
/data/system/packages.xml
系統(tǒng)在安裝apk的過程中,會解析apk的AndroidManifinest.xml文件,提取出這個apk的重要信息寫入到packages.xml文件中,這些信息包括:權(quán)限、應(yīng)用包名、APK的安裝位置、版本、userID等等。
由此,我們就知道了為啥一些應(yīng)用市場和軟件管理類的app能夠很清楚地知道當(dāng)前手機(jī)所安裝的所有的app,以及這些app的詳細(xì)信息了。
(4) 其他操作
與windows應(yīng)用安裝類似,部分apk的安裝也會向Launcher應(yīng)用申請?zhí)砑觿?chuàng)建快捷方式。
3. 小結(jié)
關(guān)于APK的安裝過程就簡單介紹到這里了,有任何疑問或者建議歡迎留言或者來信lujun.hust@gmail.com交流,或者關(guān)注我的新浪微博 @盧_俊 獲取最新的文章和資訊。