admin管理员组文章数量:1558091
apk本质上就是一个zip包
1. Apk安装
常见的apk安装方式有三种:
- 系统自带的应用和厂商预装的应用. 没错, 系统自带的应用其实也是apk, 其安装是在系统首次启动时完成的. 这也就是为什么root后可以卸载系统自带应用.没有安装界面.
- 通过存储介质安装. 最常见的就是通过sd卡放置apk或者网上下载apk方式安装.通过 packageinstaller.apk来处理安装及卸载的过程的界面
- adb命令安装. 这应该是开发者最熟悉的安装方式了, 包括
adb install
和adb pm install
.没有安装界面.
三种安装方式, 在安装apk时最终都是同一套流程, 即处理apk文件的流程. 安装过程可以归结为以下几个步骤:
- 将apk文件拷贝到指定目录下. 系统应用是在
/system/app
, 第三方应用在/data/app
下. - 解压apk, 拷贝文件. 创建UID, 创建
/data/data/${package_name}
目录, 设置权限. 这个就是应用的数据目录. - 从apk中提取dex, 放到
/data/dalvik-cache
目录. - 解析
AndroidManifest.xml
文件, 提取信息添加到PMS
中, 更新PMS中相应的数据结构. 具体是, 将提取到的包信息更新到/data/system/packages.list
和/data/system/packages.xml
. - 发送广播
Intent.ACTION_PACKAGE_ADDED
或者Intent.ACTION_PACKAGE_REPLACED
. 从名字可以判断分别对应全新安装和覆盖安装.
Android中每个app都要一个userId(UID)
的原因:Android在系统设计上把每个应用当做Linux系统上的一个用户对待,这样就可以利用已有的Linux用户管理机制来设计Android应用,比如应用目录/应用权限/应用进程管理等.
- 系统自带的以及厂商预装的app, 在手机首次启动时, 会通过扫描
/system/app
/system/framework
/vendor/app
等目录下面的APK文件, 完成安装. 原生系统没有vendor
(供应商)目录. - 至于通过
adb push
的方式, 如果root过, 完全可以推送到系统目录, 以系统应用的方式进行安装. 系统应用的好处是系统在启动的时候就会将apk进行解压复制, 坏处是没办法热更新等. 推送到一般目录, 则可以使用系统命令/bin/pm
安装apk文件.pm
就是一个可执行文件版的PackageManager
. 最终调用PackageManager.installPackage() -> PackageManagerService.installPacakge()
进行安装. 顺便一提, 具有INSTALL_PACKAGES
权限就可以自己调用这个方法进行apk安装.
安装过程
扫描apk安装, 主要是PackageManagerService
进行安装包扫描和解析工作. 信息解析完
版权声明:本文标题:Android app的安装与卸载过程创建删除的目录、文件和记录信息总结 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727320613a1108279.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论