PMS 简析

pms 介绍:

这里写图片描述
这是 android studio编译 apk,安装成功后的截图

adb shell pm install -r "/data/local/tmp/com.crg.installtest"

就是安装 apk。

Android系统中PackageManagerService简称PMS,主要负责各种APK的安装,卸载,优化和查询。
Android系统中,pm工具是PMS的一个展现命令。通过了解pm的使用,可以了解PMS究竟提供了哪些具体的功能,进而帮助我们理解和分析PMS的源码实现。

pm使用

利用adb shell命令,进入Android设备的终端,pm工具在/system/bin中,所以可以直接使用:

bullhead:/ $ which pm
/system/bin/pm
pm list packages [options] [FILTER]

打印所有的已经安装的应用的包名,如果设置了文件过滤则值显示包含过滤文字的内容.
参数:
-f 显示每个包的文件位置
-d 使用过滤器,只显示禁用的应用的包名
-e 使用过滤器,只显示可用的应用的包名
-s 使用过滤器,只显示系统应用的包名
-3 使用过滤器,只显示第三方应用的包名
-i 查看应用的安装者
示例: 显示第三方的安装包

127|bullhead:/ $ pm list packages -3
package:com.sohu.inputmethod.sogou
package:com.baidu.searchbox
package:com.crg.installtest
package:com.tencent.mobileqq
package:com.willme.topactivity

安装与卸载apk

pm install [-lrtsfd] [-i PACKAGE] [--user USER_ID] [PATH]

adb install实际上就是对pm install的封装调用。
参数:
-l 锁定应用程序
-r 重新安装应用,且保留应用数据
-t 允许测试apk被安装
-i INSTALLER_PACKAGE_NAME 指定安装包的包名
-s 安装到sd卡
-f 安装到系统内置存储中(默认安装位置)
-d 允许降级安装(同一应用低级换高级)
-g 授予应用程序清单中列出的所有权限(只有6.0系统可用)

包路径

pm path package_name

卸载apk:

pm uninstall [-k] [--user USER_ID] [--versionCode VERSION_CODE] PACKAGE

参数:
-k 卸载应用且保留数据与缓存(如果不加-k则全部删除)

PMS运行时的一些规则

PMS相关的目录与文件,以及PMS操作它们的规则

APK文件路径

APK主要分为两类:

系统自带的APK

用户安装的第三方APK
对于系统自带的APK,可以从下面的路径中查找:

/system/priv-app
该路径存放一些系统底层的应用,比如Setting,systemUI等。该目录中的app拥有较高的系统权限,而且如果要使用

android:protectionLevel=signatureOrSystem

那么该app必须放到priv-app目录中去。
——————————————————————————————————————————————————————
/system/app
该目录中存放的系统app权限相对较低,而且当拥有root权限时,就有可能卸载掉这些app。
——————————————————————————————————————————————————————
/vendor/app
该目录存放vendor厂商的app
——————————————————————————————————————————————————————
/oem/app
该目录中存放oem特有的app。
——————————————————————————————————————————————————————
/data/app
用户安装的第三方app
PMS启动的时候,也是按照上述顺序逐个扫描解析这些目录中的apk的。

安装APK的方法

系统应用的安装
PMS启动的时候完成,没有安装界面。

通过设备自带的应用商店下载的apk
下载完APK之后,调用Packagemanager接口安装,没有安装界面。

ADB命令安装
adb命令实际上是通过pm命令来安装的,同样没有安装界面。

第三方应用安装
通过SD卡里的APK文件安装,有安装界面,由packageinstaller.apk应用处理安装及卸载过程的界面。

在ANdroid 5.0之前,Android系统会监视前面所说的几个存放apk的路径,一旦发现有新的apk被放进去了,就会自带安装。5.0之后,不在采取此策略。只有系统启动的时候,才会扫描这写路径中的apk。


apk数据存储的位置
apk安装之后,产生的数据都存储在/data文件中。

/data/app
用户安装的第三方apk,以及app所依赖的native library都放在这里。
在Android 6.0时,此目录了一个文件夹“oat”,用来存放此app,第一次运行时由dex2oat生成的此app的oat文件。
手百的目录:

bullhead:/data/app/com.baidu.searchbox-EeE_6P6R7H8-djrQTbZyxg== # ls -al
total 49676
drwxr-xr-x 4 system system      4096 1970-01-04 23:31 .
drwxrwx--x 7 system system      4096 1970-01-04 23:31 ..
-rw-r--r-- 1 system system  50850328 1970-01-04 23:31 base.apk
drwxr-xr-x 3 system system      4096 1970-01-04 23:31 lib
drwxrwx--x 3 system install     4096 1970-01-04 23:31 oat

oat 目录:

bullhead:/data/app/com.baidu.searchbox-EeE_6P6R7H8-djrQTbZyxg==/oat/arm # ls -al
total 31500
drwxrwx--x 2 system install     4096 1970-01-05 00:00 .
drwxrwx--x 3 system install     4096 1970-01-04 23:31 ..
-rw-r----- 1 system all_a66   131072 1970-01-05 00:
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值