android APK应用安装过程以及默认安装路径(2)

2020-06-21 14:11

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

(源文件路径:android\\frameworks\\base\\cmds\\pm\\src\\com\\android\\commands\\pm\\pm.java)

ADB命令行的形式为adb install ,还可以带安装参数如:\

函数runInstall()中判断参数

\l\

\——INSTALL_REPLACE_EXISTING

\——installerPackageName

\——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等信息。

二:更改默认安装路径

如果你是一个apk应用开发者,没用android系统全套代码,你只想更改你的APK的默认安装路径的话,可以按下面方法来更改:

在AndroidManifest.xml文件Manifest标签中添加android:installLocation属性

android:installLocation

这个属性设置的是默认安装位置, 共有三个有效值,auto、internalOnly、preferExternal 对应表

auto 表示自动,由系统决定安装位置,如果系统手机内存足够,默认安装在手机内存里,如果手机内在不够,则会安装在T卡内 internalOnly 安装在手机内存

preferExternal 安装在外部存储中 Constant auto internalOnly Value 0 1 Description Let the system decide install location Explicitly request to be installed on internal pstorage only preferExternal 2 Perfer to be installed on SD card, There is no gthat the system will honor this request. The amight end up being installed on internal storexternal media is unavailable or too full

xmlns:android=\\

package=\

android:installLocation=\ android:versionCode=\ android:versionName=\>

如果你是一个手机方案开发者,能改framework层的代码,你希望下载到手机里的APK都默认优先安装到T卡的话,可以按下面方法更改:

在PackageParser.java文件里,将private static final int PARSE_DEFAULT_INSTALL_LOCATION 这个PARSE_DEFAULT_INSTALL_LOCATION值,改为

PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL,就可以了.默认下载就会下到T卡里,T卡不存在或者满了时,才会下到手机内部. 或者如果在应用的

AndroidManifest.xml里,指定了installLocation属性为手机内部存储的话,是会存在手机内部的.没指这定的话,PARSE_DEFAULT_INSTALL_LOCATION这个值指定什么,就下到哪里

安装在T卡里的应用,有几个缺点:

1:因为android装载T卡是在系统启动完成后,才开始装载的.所以如果应用装在T卡里的话,那么它是收不到开机启动完成的BOOT_COMPLETED这个广播的 2:如果T卡损坏或者T卡拨出来了,那么装在T卡里的应用是启动不了的.

系统应用安装的详细过程,老罗有篇文章写得很透彻,这里引用下:


android APK应用安装过程以及默认安装路径(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:公开选拔学校校长理论考试试题(教育系统专业科目) 标签: 反思

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: