一、背景说明
在 apk 开发过程中,难免遇到需要使用 apk 来执行相应的 shell 命令,本文档就是记录在 apk 内部如何执行 shell 命令。
二、准备知识
在使用 shell 命令之前,我们先了解一下 Android 进程基本信息。
如上图,可以看到当前进程空间内,存在好多进程分别以不同的用户权限在执行。除了常见的系统用户,还有 wifi 用户,nfc 用户等,其中我们比较关注的在于 u0_axxx 。关于此部分解释参考:关于android UID u0_axx是怎么来的
由于在 Android 系统中,单个 APK 都是一个独立的进程,因此,在 apk 内部执行 shell 命令,实际是以当前 apk 所在的进程用户权限去执行对应的命令。到这里就解释了执行命令的权限分配问题。
二、技术说明
1、基础用法
通过调用当前apk的运行时对象来执行 shell 命令:
-
Runtime.getRuntime(). exec( "ls");
运行之后,在进程中会随机创建一个新用户,然后以新用户的方式来执行 shell 命令。
上述代码有个缺点就是执行之后,无法获取返回值。下面进行改进。
2、执行命令获取返回值
上述命令有缺陷,现在进行改进,使其执行后可以获取返回值。
-
public static String runCmd( String shell) {
-
String data =