1.應(yīng)用安裝涉及的知識(shí)點(diǎn)
所謂apk的安裝其實(shí)就是將外部文件的apk文件復(fù)制到sysytem相關(guān)的內(nèi)部文件中并進(jìn)行解壓等一系列操作腌且。下面是安裝中會(huì)涉及到的目錄: ??????????
sysytem/app: 系統(tǒng)自帶的app的安裝目錄,用戶(hù)是無(wú)法直接刪除的,要想刪除必須要獲得root權(quán)限? data/app: 用戶(hù)程序安裝的apk,當(dāng)用戶(hù)進(jìn)行安裝apk時(shí)會(huì)將apk文件從外部文件復(fù)制到些目錄下 data/data: 用來(lái)存放apk程序所產(chǎn)生的數(shù)據(jù)溶弟,apk在使用過(guò)程中所產(chǎn)生的數(shù)據(jù)都存放在這個(gè)目錄下data/dalvik-cache:apk在安裝編譯時(shí)產(chǎn)生的所產(chǎn)生的dex文件存放在些目錄下
以上目錄可以從android 模擬器的DDMS視圖的File Explorer選項(xiàng)中查看到
2.安裝與卸載
apk的安裝過(guò)程是將目標(biāo)apk文件從外部目錄復(fù)制到data/app中经伙,然后進(jìn)行解壓編譯等過(guò)程拘荡,將編譯產(chǎn)生的dex文件放在data/dalvik-cache目錄下胖翰,而在使用app的過(guò)程中所產(chǎn)生的數(shù)據(jù)等信息都存儲(chǔ)在data/data目錄下;而apk的卸載過(guò)程與安裝過(guò)程相反接剩,只要?jiǎng)h除安裝過(guò)程中在這三個(gè)目錄下所產(chǎn)生的文件即可
3.apk安裝的方式:目前apk有三種安裝方式
3.1開(kāi)機(jī)安裝(無(wú)安裝界面)
PackageManagerService處理各種應(yīng)用的安裝,卸載萨咳,管理等工作懊缺,開(kāi)機(jī)時(shí)由systemServer啟動(dòng)此服務(wù)
PackageManagerService服務(wù)啟動(dòng)的流程:
1.首先掃描安裝“system\framework”目錄下的jar包
2.掃描安裝系統(tǒng)system/app的應(yīng)用程序
3.制造商的目錄下/vendor/app應(yīng)用包
4.掃描“data\app”目錄,即用戶(hù)安裝的第三方應(yīng)用
5.掃描"?data\app-private"目錄某弦,即安裝DRM保護(hù)的APK文件(一個(gè)受保護(hù)的歌曲或受保 護(hù)的視頻是使用?DRM?保護(hù)的文件)
3.2 ADB命令安裝(無(wú)安裝界面)
通過(guò)命令:adb install -格式? 文件? 安裝apk桐汤,這種安裝過(guò)程不會(huì)出現(xiàn)安裝界面,其底部調(diào)用的還是方法:
PackageInstallObserver obs = new PackageInstallObserver();
mPm.installPackage(Uri.fromFile(new?File(apkFilePath)),?obs,?installFlags,installerPackageName);
3.3安裝程序安裝(有安裝界面)靶壮,其調(diào)用的是PackageInstallerActivity.java中的方法
啟動(dòng)安裝程序后會(huì)調(diào)用 private?void?initiateInstall()判斷是否曾經(jīng)有過(guò)同名包的安裝怔毛,或者包已經(jīng)安裝 通過(guò)后執(zhí)行private?void?startInstallConfirm()?點(diǎn)擊確認(rèn) 按鈕后經(jīng)過(guò)一系列的安裝