在實現裝置功能自動化的過程中,Android 開發人員經常會遇到以程式方式執行shell命令的需要。雖然從終端模擬器完成此操作很簡單,但從 Java 執行相同的命令可能會帶來挑戰。這篇問答文章深入探討了為什麼在終端模擬器中工作的相同命令在 Java 中可能無法成功,並提供了克服此障礙的解決方案。
一位開發人員嘗試使用Android KitKat 中新引入的screenrecord 命令來記錄屏幕,他注意到該命令在終端模擬器中完美運行,但在使用Process.exec() 從Java 應用程式中執行時失敗。他們尋求有關問題所在以及如何解決的指導。
問題的癥結在於 screenrecord 指令需要提升權限,通常透過使用「su」(超級使用者)來授予。從終端模擬器執行命令時,使用者手動提供“su”,授予必要的權限。然而,當從 Java 執行命令時,應用程式缺少所需的海拔。
解決方案在於在 Java 程式碼中提示進行 root 存取。 「su」指令通常後面跟著一個新行和需要執行的指令。透過抓取「su」進程的標準輸入流並向其寫入命令,開發人員可以有效地模仿終端模擬器的行為。
以下程式碼片段說明了解決方案:
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); }
透過採用提供的解決方案,開發人員可以成功地從Java 應用程式執行shell 命令,甚至是那些需要提升權限的應用程式。該技術解鎖了自動化各種設備功能並增強應用程式功能的能力。
以上是為什麼我的 Shell 命令在終端機中可以工作,但在 Java 中卻失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!