1.应用安装涉及的知识点
所谓apk的安装其实就是将外部文件的apk文件复制到sysytem相关的内部文件中并进行解压等一系列操作。下面是安装中会涉及到的目录:
sysytem/app: 系统自带的app的安装目录,用户是无法直接删除的,要想删除必须要获得root权限 data/app: 用户程序安装的apk,当用户进行安装apk时会将apk文件从外部文件复制到些目录下 data/data: 用来存放apk程序所产生的数据,apk在使用过程中所产生的数据都存放在这个目录下data/dalvik-cache:apk在安装编译时产生的所产生的dex文件存放在些目录下
以上目录可以从android 模拟器的DDMS视图的File Explorer选项中查看到
2.安装与卸载
apk的安装过程是将目标apk文件从外部目录复制到data/app中,然后进行解压编译等过程,将编译产生的dex文件放在data/dalvik-cache目录下,而在使用app的过程中所产生的数据等信息都存储在data/data目录下;而apk的卸载过程与安装过程相反,只要删除安装过程中在这三个目录下所产生的文件即可
3.apk安装的方式:目前apk有三种安装方式
3.1开机安装(无安装界面)
PackageManagerService处理各种应用的安装,卸载,管理等工作,开机时由systemServer启动此服务
PackageManagerService服务启动的流程:
1.首先扫描安装“system\framework”目录下的jar包
2.扫描安装系统system/app的应用程序
3.制造商的目录下/vendor/app应用包
4.扫描“data\app”目录,即用户安装的第三方应用
5.扫描" data\app-private"目录,即安装DRM保护的APK文件(一个受保护的歌曲或受保 护的视频是使用 DRM 保护的文件)
3.2 ADB命令安装(无安装界面)
通过命令:adb install -格式 文件 安装apk,这种安装过程不会出现安装界面,其底部调用的还是方法:
PackageInstallObserver obs = new PackageInstallObserver();
mPm.installPackage(Uri.fromFile(new File(apkFilePath)), obs, installFlags,installerPackageName);
3.3安装程序安装(有安装界面),其调用的是PackageInstallerActivity.java中的方法
启动安装程序后会调用 private void initiateInstall()判断是否曾经有过同名包的安装,或者包已经安装 通过后执行private void startInstallConfirm() 点击确认 按钮后经过一系列的安装