【问题标题】:Root access works with adb, but root process on Android Studio doesn't (Android Things)根访问与 adb 一起工作,但 Android Studio 上的根进程不能(Android Things)
【发布时间】:2020-11-20 21:17:42
【问题描述】:

目前我正在通过 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 身份运行进程。

【问题讨论】:

    标签: android adb root android-things


    【解决方案1】:

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

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

    要获得许可,您应该安装SuperSU 应用程序或类似应用程序,并在您的应用程序尝试使用su 和Runtime.getRuntime().exec("su") 时按照应用程序的提示进行操作。

    一旦进程获得root,您就可以获取root 进程的标准输入并向其写入命令,读取其标准输出。更多详情请见:execute shell command from android。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 关于第一个评论:没有su不起作用,它返回“请求发送失败:权限被拒绝”。关于另一个,我会实现它。
      猜你喜欢
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2017-06-13
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多