繁体   English   中英

Root 访问适用于 adb,但 Android Studio 上的 root 进程不适用 (Android Things)

[英]Root access works with adb, but root process on Android Studio doesn't (Android Things)

目前我正在通过 Android Studio 开发一个应用程序,它使用下一个 sintaxis 执行命令:

Process p = Runtime.getRuntime().exec(new String[] { "su", "-c", "ip link show"});

我正在使用设备 IMX7D_PICO(它使用 Android Things 作为 SO)。 它是root的,如下图所示:

在此处输入图片说明

但是,当我在 Android Studio 上以 root 身份运行命令时,出现下一个错误:

W/System.err: java.io.IOException: Cannot run program "su": error=13, Permission denied
W/System.err:     at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:692)
at java.lang.Runtime.exec(Runtime.java:560)

我不知道为什么su只适用于 adb。 另一方面,我知道还有其他方法可以获取ip link show的数据,但是下一步,它是使用我说的命令打开套接字 RAW。 所以,我需要通过 Android Studio 以su身份运行进程。

shell的进程相比,应用程序的进程具有较少的权限,导致

java.io.IOException:无法运行程序“su”:错误=13,权限被拒绝

对于要授予权限,你应该安装SuperSU应用程序或相似,并按照程序的提示,而您的应用程序试图suRuntime.getRuntime().exec("su")

一旦进程获得root您就可以获取root进程的标准输入并将命令写入其中,读取其标准输出。 有关更多详细信息,请参阅:从 android 执行 shell 命令

我不知道为什么 su 不起作用。 我“怀疑”Android Things 正在使用一个已经是 root 的单个用户,所以也许在不使用 su 的情况下执行命令会起作用。

在你问题的另一部分。 解析系统命令的输出并不是获取信息的最佳方式,在这种情况下,您可能可以使用 Android 类NetworkInterface https://developer.android.com/reference/java/net/NetworkInterface#getNetworkInterfaces获取您想要的内容() .

您也可以使用 Android 框架类管理原始套接字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM