Android App 持有系統簽名權限 (android:sharedUserId="android.uid.system"),通過 Runtime.exec("sh") 執行 echo 1 > /sys/class/leds/white:pd27:led3/brightness 控制 LED 亮度,但無效果。
Shell 重定向符 > 是 Shell 內建功能,不屬於可執行程序。Runtime.exec("sh -c 'echo 1 > /path'") 或將重定向拆分為 Shell 命令參數才能生效。直接 exec("sh") 後寫入輸出流,> 被作為字符串字面量傳給 echo,而非重定向操作。
String cmd = "echo 1 > /sys/class/leds/white:pd27:led3/brightness";
Process process = Runtime.getRuntime().exec(new String[]{"sh", "-c", cmd});
// 或
Process process = Runtime.getRuntime().exec("sh -c \"" + cmd + "\"");
process.waitFor();
String path = "/sys/class/leds/white:pd27:led3/brightness";
try (FileWriter fw = new FileWriter(path)) {
fw.write("1");
} catch (IOException e) {
e.printStackTrace();
}
// 需確保該節點文件權限允許寫入(chmod 666 或 777)
ProcessBuilder pb = new ProcessBuilder("sh", "-c", "echo 1 > /sys/class/leds/white:pd27:led3/brightness");
pb.redirectErrorStream(true);
Process process = pb.start();
int exitCode = process.waitFor();
chmod 666 /sys/class/leds/white:pd27:led3/brightness(或 777),確保寫入權限。chmod 755 /sys/class/leds/white:pd27:led3/,否則無法遍歷進入。sysfs_leds 寫入權限,系統簽名 App 通常滿足。echo 1 > /sys/class/leds/white:pd27:led3/brightness → 確認 LED 亮起。ls -l /sys/class/leds/white:pd27:led3/brightness → 應為 -rw-rw-rw- 或更寬鬆。Shell 重定向必須在 sh -c 中執行,或改用 Java 文件 IO 直接寫入 sysfs 節點。配合正確的文件權限設置(chmod 666 brightness),即可實現 Android 系統 App 控制 LED 亮度。