首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 執行 Shell 命令修改 Android 檔案權限失敗?正確姿勢在這裡

     編輯:程式設計綜合問答

在 Java 代碼中直接呼叫 Runtime.getRuntime().exec("chmod 777 /data/misc/123.sh") 卻無效,但寫入腳本再用 su -c 執行卻成功。核心差異在於 Shell 環境與權限上下文。

問題分析

  • Runtime.exec() 預設不啟動 Shell,無法解析管道、重導向、環境變數。
  • Android 系統分區掛載為 noexec,直接執行二進制可能被阻擋。
  • 需要 root 權限時,必須透過 su 並在 Shell 中執行。

正確寫法

String[] command = new String[] {"/bin/sh", "-c", "chmod 777 /data/misc/123.sh"};
Runtime.getRuntime().exec(command);

關鍵點:

  1. 明確指定 /bin/sh -c 啟動 Shell 解析完整命令字串。
  2. 若需 root,改為 su -c "chmod 777 /data/misc/123.sh"。
  3. 處理 Process 的輸入/輸出/錯誤流,避免阻塞。

進階建議

使用 ProcessBuilder 替代 Runtime.exec(),支援目錄設定、環境變數注入、流合併等,更穩健:

ProcessBuilder pb = new ProcessBuilder("/bin/sh", "-c", "chmod 777 /data/misc/123.sh");
pb.redirectErrorStream(true);
Process process = pb.start();
// 讀取輸出...
  1. 上一篇文章:
  2. 下一篇文章:
C# 不轉字串判斷整數位數:Math.Log10 經典用法 Java 泛型接口設計解析:GenericDao> 邊界約束詳解 C# SqlDataReader 正確關閉模式:using 區塊確保資源釋放 WPF ControlTemplate 應用失效:資源鍵拼寫錯誤導致黑屏 為何網頁原始碼常見