從 Android 執行 Shell 指令:常見陷阱分析
在 Android 開發中,可能會出現需要執行 shell 指令的情況。然而,當嘗試從 Java 應用程式中執行此類命令時,可能會出現常見的陷阱。使用「su」指令可以觀察到這樣一個陷阱,該指令在 root 裝置中授予超級使用者權限。
考慮使用 screenrecord 指令進行螢幕擷取的場景。當透過應用程式模擬器終端執行該命令時,該命令成功啟動記錄。但是,使用 Runtime.getRuntime().exec() 方法從 Java 執行相同的命令無法建立記錄。
差異是由將命令傳遞給「su」進程的方法引起的。模擬器終端允許直接輸入命令,而在 Java 中,命令必須透過其標準輸入作為「su」進程的輸入提供。
解決方案包括將指令重新導向到「su」進程的使用 DataOutputStream 的標準輸入。以下是修改後的程式碼片段:
try{ Process su = Runtime.getRuntime().exec("su"); DataOutputStream outputStream = new DataOutputStream(su.getOutputStream()); outputStream.writeBytes("screenrecord --time-limit 10 /sdcard/MyVideo.mp4\n"); outputStream.flush(); outputStream.writeBytes("exit\n"); outputStream.flush(); su.waitFor(); }catch(IOException e){ throw new Exception(e); }catch(InterruptedException e){ throw new Exception(e); }
透過將指令重新導向到標準輸入,「su」進程接收指令並使用root權限提升它,成功執行螢幕錄製。該技術確保可以從 Android 應用程式有效執行 shell 命令,甚至需要超級使用者權限。
以上是為什麼在 Java 和模擬器終端機中執行'su”命令不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!