Apk安装有四种方式:
1、开机安装——厂商预装,没有安装界面,系统级别安装;
2、网络下载安装——通过市场Market安装,没有安装界面;
3、ADB安装——有安装界面;
4、第三方应用安装——有安装界面。
Apk安装涉及到的目录:
system/app:系统预装App;
data/app:用户App;
data/data:用户App数据文件;
data/dalvik-cache:存放Appdex文件。
安装过程:
把Apk文件放在data/app下,解压扫描Apk文件,把dex文件保存dalvik-cache目录,并data/data目录下创建对应的应用数据目录。
卸载过程:
杀死进程,删除安装过程中在上述三个目录下创建的文件及目录。
安装过程解析:
1、开机安装
scanDirLI(File dir, int flags, int scanMode, long currentTime)
扫描路径找到可安装文件
PackageParser.Package scanPackageLI(File scanFile, int parseFlags, int scanMode, long currentTime)
扫描apk文件,获取载入pacakge信息;
mInstaller.install(pkgName, useEncryptedFSDir, pkg.applicationInfo.uid,pkg.applicationInfo.uid);
指挥installd在C语言的文件中完成工作
2、从网络上下载应用
会自动调用Packagemanager的安装方法
installPackage(final Uri packageURI, final IPackageInstallObserver observer, final int flags, final String installerPackageName)
PackageHandler–>processPendingInstall–>installPackageLI–>installNewPackageLI–>scanPackageLI……
3、从ADB工具安装
showUsage()–> runInstall()
PackageInstallObserver obs = new PackageInstallObserver();
mPm.installPackage(Uri.fromFile(new File(apkFilePath)), obs, installFlags, installerPackageName);
IPackageManage mPm;
mPm = IpackageManager.Stub.asInterface(ServiceManager.getService(“package”));
4、第三方安装
InstallAppProgress–>Packagemanager.installPackeage()……