[英]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
應用程序或相似,並按照程序的提示,而您的應用程序試圖su
與Runtime.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.