adb install 拦截案例分析
1.开发需求:
需要在用户通过 adb install 时做个拦截,用以提示用户是否继续安装该 Apk ,如果在一定时间内用户不做选择,系统就拒绝本次安装
2.开发过程中碰到的问题:
2.1 拦截功能:
第一次尝试在 installPackageAsUser 里面加上拦截流程,但在随后的开发中碰到一个问题:当弹框程序要获取 apk path 时(为了在对话框上显示 App Label ), selinux 不予许,而且该 selinux 权限被 neverallowed 了,如果改变的话, CTS 过不了,所以只能另辟蹊径了:
neverallow system_server { bluetooth_data_file nfc_data_file app_data_file }:file open; can not remove directly, it will cause cts failed
之后发现,PackageManagerService 在安装的时候肯定也需要解析这个 Apk ,那么它是怎么做的呢?顺着这个思路分析源码,发现 PackageManagerService 是先将要安装的 Apk 先暂存在 data/app 目录下(此时 system_server 是被允许访问的),然后再解析的,那么我们不妨