之前一直有几个误区就是 :
1、能在adb shell中运行的命令都可以用Java代码来执行;
2、只要是Root过的手机就一定能获取su权限;
之所以称之为误区是因为在实际使用过程中发现了走不通的地方,也就是个人在目前还没有找到其他的方案来解决,如果有方案能解决非常欢迎告诉本人;
- 误区一 能在adb shell中运行的命令都可以用Java代码来执行
当把tcpdump 放入到/system/bin或者是/system/xbin/ 下,通过adb shell 命令下可以执行tcpdump命令用来抓包,后来想在程序用实现抓包的功能就把命令放到了程序中;在执行的过程中发现执行不成功,并提示:tcpdump: no suitable device found;搜索发现是因为没有权限,这就引出了第二个误区;
- 误区二 只要是Root过的手机就一定能获取su权限
因为通过adb shell中使用su或者直接adb root就可以切换为root用户,所以执行命令畅通无阻,但是在程序使用Java代码来调用su命令却是不成功的;关键点在与su的源码中有如下判断;
if (myuid != AID_ROOT && myuid != AID_SHELL) {
fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
return 1;
}
当不是root用户和shell用户时是会报错的,因为APP最多只能是系统应用,所以执行时会报错;只是不知道有没有办法改变为root用户;