Android 7.1(RK3288)执行adb命令遇权限拒绝问题求助
解决Android应用执行logcat命令权限被拒的问题
首先得明确一个核心误区:你代码里调用的adb是电脑端的调试工具,Android设备本身并没有adb这个可执行程序,这才是你遇到Permission denied错误的根本原因(不是权限不够,是命令本身不存在)。要在Android应用内获取logcat日志,直接调用设备自带的logcat命令即可,不需要依赖adb。
下面是具体的解决方案:
1. 修正命令,直接调用设备的logcat
Android系统的/system/bin目录下自带logcat可执行文件,把你的命令改成去掉adb的版本:
try { // 直接执行设备内置的logcat命令,无需adb Process p = Runtime.getRuntime().exec("logcat -d -v time -f /mnt/sdcard/logcat.txt"); // 等待命令执行完成,获取退出码判断是否成功 int exitCode = p.waitFor(); if (exitCode == 0) { Log.i("LogcatSuccess", "日志已成功保存到/mnt/sdcard/logcat.txt"); } else { // 读取错误输出排查问题 BufferedReader errorReader = new BufferedReader(new InputStreamReader(p.getErrorStream())); String errorLine; StringBuilder errorMsg = new StringBuilder(); while ((errorLine = errorReader.readLine()) != null) { errorMsg.append(errorLine).append("\n"); } Log.e("LogcatError", "命令执行失败:\n" + errorMsg.toString()); } } catch (IOException | InterruptedException e) { e.printStackTrace(); }
2. 配置必要的权限
要读取logcat日志,需要在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.READ_LOGS" />
但注意:在Android 7.1中,READ_LOGS是特殊权限,普通第三方应用无法通过常规动态申请获取,需要满足以下条件之一:
- 将你的应用打包成系统应用(使用与设备系统一致的签名)
- 设备已获取Root权限
3. 针对Root设备的处理
如果你的RK3288设备已经Root,可以通过su命令提升权限执行logcat,确保命令能成功运行:
try { // 通过su获取Root权限执行logcat命令 Process p = Runtime.getRuntime().exec(new String[]{"su", "-c", "logcat -d -v time -f /mnt/sdcard/logcat.txt"}); int exitCode = p.waitFor(); if (exitCode == 0) { Log.i("LogcatSuccess", "Root模式下日志保存成功"); } else { // 读取错误信息 BufferedReader errorReader = new BufferedReader(new InputStreamReader(p.getErrorStream())); String errorLine; StringBuilder errorMsg = new StringBuilder(); while ((errorLine = errorReader.readLine()) != null) { errorMsg.append(errorLine).append("\n"); } Log.e("LogcatError", "Root模式下执行失败:\n" + errorMsg.toString()); } } catch (IOException | InterruptedException e) { e.printStackTrace(); }
额外说明
- 不要尝试在Android设备上安装adb,这完全没必要,设备本身的logcat工具已经能满足需求
- 如果你的应用是系统应用,签名与设备系统匹配后,添加
READ_LOGS权限即可直接执行logcat命令,无需Root
内容的提问来源于stack exchange,提问作者user1502241
相关产品推荐
相关产品推荐

