| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> [Android实战笔记] 获取应用的pid、uid、packageName、进程名 -> 正文阅读 |
|
[移动开发][Android实战笔记] 获取应用的pid、uid、packageName、进程名 |
目录 2.通过反射调用:Process.getUidForPid(int pid); 1. 通过api调用获取:Application.getProcessName(); [需要在应用内调用] 2.通过反射调用:ActivityThread.currentProcessName();? [需要在应用内调用] 4.根据pid通过反射调用:Process.readProcLines(String path, String[] reqFields, long[] outSizes) 5.根据pid通过proc节点获取 [可在native层使用] pid1.通过api调用获取:[需要在应用内调用]
uid?1. 通过api调用获取:[需要在应用内调用]
2.通过反射调用:Process.getUidForPid(int pid);
进程名(/包名)* 注:一般来说未指定的进程名和包名是一致的。对于一些多进程应用,该应用下的多个进程名一般为:包名:指定进程后缀。? 1. 通过api调用获取:Application.getProcessName(); [需要在应用内调用]
弊端:SDK28才增加了这个api,只有在Android 9 以上的系统才可以使用
2.通过反射调用:ActivityThread.currentProcessName();? [需要在应用内调用]
弊端:ActivityThread这个类是 @hide 的,app无法直接调用。但是可以通过反射的方式实现。
3. 通过AMS获取
* RunningAppProcessInfo 中还有 pid 、uid 等信息,同样可以用于比对获取 pid 和 uid。 弊端:通过AIDL跨进程方式调用 + for遍历,效率不高;AIDL可能调用失败。 4.根据pid通过反射调用:Process.readProcLines(String path, String[] reqFields, long[] outSizes)
linux中对所有应用都有对应的proc节点记录各种信息。proc/(pid)/status 记录了对应pid的应用的所有信息,包括uid、ppid、组信息等。Process类中封装了一个readProcLines的方法去读取 proc/(pid)/status 文件的信息,具体使用方式可以参考 Process类中的 getUidForPid(pid)、getParentPid(pid) 、 getThreadGroupLeader(tid) 。? 弊端:IO操作,可能影响性能 5.根据pid通过proc节点获取 [可在native层使用]native 层暂未发现api,但是可以参考上一点的方式去实现。由于 linux 中一切皆文件,因此用读取文件的方式即可解决。
* 注:在native层调用时可能会读取文件失败,错误信息:
由于笔者在系统开发中有获取包名的需求,使用以上实现时出现读取文件失败的问题。经过开启 kernel 打印进行调用,排除了selinux的权限问题之后,发现是需要对读取proc的进程赋予权限才可实现。因此在对应进程的rc文件中赋予权限即可。
* 注:如果需要判断多个进程是否属于同一应用,可以通过一下两种方式确认: 1. 对于非系统应用(未指定应用shareUserId为“android.uid.system”),只需要比对进程的uid是否一致即可。对于指定了shareUserId为“android.uid.system”的应用,他们将共享UID为1000。 2. 通过pid -> 进程名 -> 包名的方式进行包名比对。若包名一致,则属于同一应用。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 | -2025/2/5 20:14:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |