首頁 > Java > java教程 > 為什麼在 Java 和模擬器終端機中執行'su”命令不同?

為什麼在 Java 和模擬器終端機中執行'su”命令不同?

Patricia Arquette
發布: 2024-11-19 09:51:03
原創
499 人瀏覽過

Why Does Executing

從 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板