一、前言
App 的類別無論是系統(tǒng)應(yīng)用還是普通應(yīng)用,其安裝方式或有不同捅彻,但其安裝的本質(zhì)卻是相同:安裝時(shí)將 Apk 的信息寫入一個(gè)區(qū)域,在開機(jī)時(shí)娄柳,通過系統(tǒng)掃描這塊區(qū)域,進(jìn)而加載這塊區(qū)域的信息到內(nèi)存中,這樣就可以流暢的使用每個(gè)app了。本篇簡(jiǎn)單介紹apk安裝的一些前置知識(shí)點(diǎn)筐骇。
二、APK安裝
2.1 安裝場(chǎng)景
1江滨、命令行安裝:adb 命令包括adb push/install
2、用戶下載的Apk厌均,通過系統(tǒng)安裝器packageinstaller安裝該Apk唬滑。packageinstaller是系統(tǒng)內(nèi)置的應(yīng)用程序,用于安裝和卸載應(yīng)用程序棺弊,有安裝界面
3晶密、系統(tǒng)開機(jī)時(shí)安裝系統(tǒng)應(yīng)用。
4模她、應(yīng)用商店自動(dòng)安裝
2.2 安裝相關(guān)目錄
1稻艰、/system/app: 用于安裝系統(tǒng)應(yīng)用程序
2、/system/priv-app:存放手機(jī)廠商定制的系統(tǒng)的系統(tǒng)級(jí)應(yīng)用侈净,如下:
3尊勿、data/app: 普通應(yīng)用程序安裝目錄,安裝時(shí)會(huì)將 apk 復(fù)制到此目錄下:
4畜侦、data/data: 存放應(yīng)用程序的目錄元扔,此目錄app可以訪問讀寫,例如:cache旋膳、database澎语、files、shared_prefs等
5验懊、/data/system: 保存Apk信息擅羞,如 packages.xml、packages.list等义图,這其中記錄了系統(tǒng)中所有安裝的應(yīng)用信息减俏,例如簽名和權(quán)限等。
6歌溉、/vendor/app:廠商定制的應(yīng)用
Android 4.4 新增的 priv-app 分區(qū)垄懂,可以更好的方便手機(jī)廠商控制捆綁軟件對(duì)敏感權(quán)限的訪問骑晶。與 system/app 不同的是,前者不需要系統(tǒng)簽名即可獲取 signatureOrSystem 權(quán)限草慧,后者則必須系統(tǒng)簽名
2.3 Apk 安裝步驟
1桶蛔、拷貝apk到指定目錄:普通應(yīng)用拷貝至 /data/app 下,系統(tǒng)應(yīng)用會(huì)被拷貝至 /system 分區(qū)下漫谷,例如 /system/app仔雷、/system/vendor/app、/system/priv-app
2舔示、加載apk碟婆、拷貝文件、創(chuàng)建應(yīng)用的數(shù)據(jù)目錄:
- 在 /data/data 目錄下創(chuàng)建包名命名的目錄惕稻,用來存放應(yīng)用的數(shù)據(jù)庫竖共、xml文件、cache俺祠、so文件等
- 為了加快app的啟動(dòng)速度公给,apk在安裝的時(shí)候,會(huì)先將app的可執(zhí)行文件拷貝相應(yīng)的目錄下緩存起來蜘渣,例如 dex 存放在 /data/dalvik-cache 目錄下淌铐, odex/vdex/art 存放在 /data/app/包名/oat/arm 下,【 odex + vdex = apk 】蔫缸,
3腿准、解析apk的 AndroidManifest.xml:將apk的權(quán)限、包名拾碌、安裝位置吐葱、版本號(hào)和userId等信息保存在packages.xml 中,這些工作是在 PMS 中完成
4倦沧、顯示icon圖標(biāo)
參考
[ 1 ] https://blog.csdn.net/mysimplelove/article/details/93619361
[ 2 ] http://liuwangshu.cn/framework/pms/1-packageinstaller-initialize.html
[ 3 ] http://www.reibang.com/p/e02b1f95ea58
[ 4 ] https://www.it610.com/article/1294534284924755968.htm