本文共 1001 字,大约阅读时间需要 3 分钟。
上一节留了个疑问,pm 命令给一个应用授予某个权限呢?它的代码流程是怎样的呢?
我们这节来说说这个。
使用 adb shell 进来,输入 pm 查看帮助
我们常用的就是 pm path 查找路径
pm list packages 列出所有的信息
pm clear 加上包名是清理应用数据,应用清理数据结束的时候,会触发应用重启,但是core应用是不会重启的。
pm enable 是使能某个组件的,一般和disable一起使用,来测试功能。
pm grant 包名 +权限 给某个应用授予某个权限
pm revoke 包名+权限 给某个应用去掉某个权限
我们这一节来分析pm命令的相关代码,于是我们找到pm,这个在/system/bin/
cat pm
这个是我手机的显示,这个是7.0项目的。9.0这个里面已经有变化了。
那我们就简单的讲下这个7.0的,9.0的自行分析就行(cmd.cpp)
exec app_process $base/bin com.android.commands.pm.Pm "$@"
这个之前很早写过一个文章:
分析过这个。
这里简单说下,这个就是启动一个app_process,然后执行com.android.commands.pm.Pm的main方法,参数是我们pm后面跟的内容。
所以这里我们要找下pm.java
看这里的main方法,然后可以看到是执行了run,继续查看即可。
我们就看下path这个方法吧,也就是 runPath,
这里取到参数,然后调用displayPackageFilePath,我们继续查看:
这里我们测试一个
这些命令,实际上都会走到pms的一些方法,一些系统提供的调用,那么pm命令的很多东西,就可以封装成一个工具,帮助自己查看应用的一些参数。
也就是要做跟包相关的app的时候,可以从这里招到一些实现,进行参考。
大家可以把pm.java整体看完,可以把pms的基础功能怎么实现,怎么调用掌握个七七八八,然后学完了pm,可以去看am了。
如果am看完了,就可以进入wm了,可以学习这个,熟悉常用的命令以及实现方法。
好了,今天就说到这里了,我们每节讲一些简单的知识,把一个东西的逻辑讲通,方法很重要,思路很重要。
那么又有下一节的内容了,系统不断的弹出一个界面,我想知道是谁拉起来的,该怎么分析呢?
我们下一节来讲这个。
推荐你读:
转载地址:https://codegg.blog.csdn.net/article/details/99688098 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!