簡體   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