日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

apk下载安装,存储的位置,路径

發布時間:2024/6/21 综合教程 50 生活家
生活随笔 收集整理的這篇文章主要介紹了 apk下载安装,存储的位置,路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PackageInstaller 原理簡述

應用安裝是智能機的主要特點,即用戶可以把各種應用(如游戲等)安裝到手機上,并可以對其進行卸載等管理操作。APK是Android Package的縮寫,即Android安裝包。APK是類似Symbian Sis或Sisx的文件格式。通過將APK文件直接傳到Android模擬器或Android手機中執行即可安裝。

Android應用安裝有如下四種方式

1. 系統應用安裝――開機時完成,沒有安裝界面

2. 網絡下載應用安裝――通過market應用完成,沒有安裝界面

3. ADB工具安裝――沒有安裝界面。

4. 第三方應用安裝――通過SD卡里的APK文件安裝,有安裝界面,由packageinstaller.apk應用處理安裝及卸載過程的界面。

應用安裝的流程及路徑
應用安裝涉及到如下幾個目錄:

system/app
系統自帶的應用程序,無法刪除

data/app
用戶程序安裝的目錄,有刪除權限。

安裝時把apk文件復制到此目錄

data/data
存放應用程序的數據

Data/dalvik-cache
將apk中的dex文件安裝到dalvik-cache目錄下(dex文件是dalvik虛擬機的可執行文件,其大小約為原始apk文件大小的四分之一)

安裝過程:復制APK安裝包到data/app目錄下,解壓并掃描安裝包,把dex文件(Dalvik字節碼)保存到dalvik-cache目錄,并data/data目錄下創建對應的應用數據目錄。

卸載過程:刪除安裝過程中在上述三個目錄下創建的文件及目錄。

一、系統應用安裝:
PackageManagerService處理各種應用的安裝,卸載,管理等工作,開機時由systemServer啟動此服務

(源文件路徑:androidframeworksaseservicesjavacomandroidserverPackageManagerService.java)

PackageManagerService服務啟動的流程:

1. 首先掃描安裝“systemframework”目錄下的jar包

1. scanDirLI(mFrameworkDir,PackageParser.PARSE_IS_SYSTEM,

scanMode | SCAN_NO_DEX);

2.第二步掃描安裝“systemapp”目錄下的各個系統應用

scanDirLI(mSystemAppDir,PackageParser.PARSE_IS_SYSTEM, scanMode);

3.第三步掃描“dataapp”目錄,即用戶安裝的第三方應用

scanDirLI(mAppInstallDir, 0, scanMode);

4.第四步掃描" dataapp-private"目錄,即安裝DRM保護的APK文件(目前沒有遇到過此類的應用)。

scanDirLI(mDrmAppPrivateInstallDir,0, scanMode | SCAN_FORWARD_LOCKED);

安裝應用的過程

1.scanDirLI(Filedir, int flags, int scanMode) 遍歷安裝指定目錄下的文件

2.scanPackageLI(FilescanFile,

File destCodeFile, FiledestResourceFile, int parseFlags,

int scanMode) 安裝package文件

3.scanPackageLI(

File scanFile, File destCodeFile, FiledestResourceFile,

PackageParser.Package pkg, intparseFlags, int scanMode)

通過解析安裝包parsePackage獲取到安裝包的信息結構

4.mInstaller.install(pkgName,pkg.applicationInfo.uid,

pkg.applicationInfo.uid); 實現文件復制的安裝過程

(源文件路徑:frameworksasecmdsinstalldinstalld.install)

二、從market上下載應用:
Google Market應用需要使用gmail賬戶登錄才可以使用,選擇某一應用后,開始下載安裝包,此過程中,在手機的信號區有進度條提示,下載完成后,會自動調用Packagemanager的接口安裝,調用接口如下:

public voidinstallPackage(final Uri packageURI, final IPackageInstallObserver observer,final int flags)

final Uri packageURI:文件下載完成后保存的路徑

final IPackageInstallObserver observer:處理返回的安裝結果

final int flags:安裝的參數,從market上下載的應用,安裝參數為-r (replace)

installPackage接口函數的安裝過程:

1.public voidinstallPackage(

final Uri packageURI, final IPackageInstallObserverobserver, final int flags,

final String installerPackageName)

final StringinstallerPackageName:安裝完成后此名稱保存在settings里,一般為null,不是關鍵參數

2.FiletmpPackageFile = copyTempInstallFile(packageURI, res);

把apk文件復制到臨時目錄下的臨時文件

3.private voidinstallPackageLI(Uri pPackageURI,

int pFlags, boolean newInstall,String installerPackageName,

File tmpPackageFile, PackageInstalledInfo res)

解析臨時文件,獲取應用包名pkgName = PackageParser.parsePackageName(

tmpPackageFile.getAbsolutePath(), 0);

4.判斷如果帶有參數INSTALL_REPLACE_EXISTING,則調用replacePackageLI(pkgName,

tmpPackageFile,

destFilePath,destPackageFile, destResourceFile,

pkg, forwardLocked,newInstall, installerPackageName,

res)

5.如果沒有,則調用installNewPackageLI(pkgName,

tmpPackageFile,

destFilePath,destPackageFile, destResourceFile,

pkg,forwardLocked, newInstall, installerPackageName,

res);

6.privatePackageParser.Package scanPackageLI(

File scanFile, File destCodeFile, FiledestResourceFile,

PackageParser.Package pkg, intparseFlags, int scanMode)

scanPackageLI以后的流程,與開機時的應用安裝流程相同。

三、從ADB工具安裝
Android Debug Bridge (adb) 是SDK自帶的管理設備的工具,通過ADB命令行的方式也可以為手機或模擬器安裝應用,其入口函數源文件為pm.java

(源文件路徑:androidframeworksasecmdspmsrccomandroidcommandspmpm.java)

ADB命令行的形式為adb install <path_to_apk> ,還可以帶安裝參數如:"-l""-r" "-i" "-t"

函數runInstall()中判斷參數

"-l"――INSTALL_FORWARD_LOCK

"-r"——INSTALL_REPLACE_EXISTING

"-i" ——installerPackageName

"-t"——INSTALL_ALLOW_TEST

我們常用的參數為-r,表示覆蓋安裝手機上已安裝的同名應用。從market上下載的應用,也是直接傳入這個參數安裝的。

runInstall與market調用同樣的接口完成應用安裝。

public voidinstallPackage(android.net.Uri packageURI,android.content.pm.IPackageInstallObserver observer, int flags,java.lang.String installerPackageName)

四、第三方應用安裝――通過SD卡里的APK文件安裝
把APK安裝包保存在SD卡中,從手機里訪問SD卡中的APK安裝包,點擊就可以啟動安裝界面,系統應用Packageinstaller.apk處理這種方式下的安裝及卸載界面流程,如下圖:

PackageInstallerActivity負責解析包,判斷是否是可用的Apk文件

創建臨時安裝文件/data/data/com.android.packageinstaller/files/ApiDemos.apk

并啟動安裝確認界面startInstallConfirm,列出解析得到的該應用基本信息。如果手機上已安裝有同名應用,則需要用戶確認是否要替換安裝。

確認安裝后,啟動InstallAppProgress,調用安裝接口完成安裝。

pm.installPackage(mPackageURI,observer, installFlags);

其它:
1. PackageManagerService.java的內部類AppDirObserver實現了監聽app目錄的功能:當把某個APK拖到app目錄下時,可以直接調用scanPackageLI完成安裝。

2.手機數據區目錄“data/system/packages.xml”文件中,包含了手機上所有已安裝應用的基本信息,如安裝路徑,申請的permission等信息。

http://wenku.baidu.com/view/3a64c3c6bb4cf7ec4afed05f.html

APK文件結構詳解

http://www.ophonesdn.com/article/show/38

來源:https://www.oschina.net/question/1249832_126587

來自為知筆記(Wiz)

總結

以上是生活随笔為你收集整理的apk下载安装,存储的位置,路径的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。