以编程方式更改android中tty端口的权限和所有权

Siv*_*mar 5 android adb

当我在该端口上写数据时,我需要更改/ dev/tty*文件的权限.我可以通过以root身份输入adb shell来更改Windows命令提示符的权限.

但是当我重新启动设备时,权限不会保留.相反,它们被设置为默认值.

因此,每次我需要在重启后运行我的应用程序时,我需要更改权限.

我尝试使用Runtime.exec()方法从应用程序运行adb命令,但由于应用程序无权更改文件所有权权限,因此不会更改任何内容.

这是我从app执行命令的方法(在这种情况下在模拟器中测试):

Process process =   Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("chown root:root /dev/ttyS0 \n");
os.writeBytes("chmod 777 /dev/ttyS0 \n");
os.writeBytes("exit\n");
os.flush();
os.close();
process.waitFor();
Run Code Online (Sandbox Code Playgroud)

当执行"su"命令时,它会给出错误su: uid 10044 not allowed to su 因此,在执行chown或chmod时会出错Unable to chmod Operation Not permitted

那么,如何更改该文件的权限和所有权?

任何帮助都非常感谢!

谢谢 !!

Ale*_* P. 1

默认(来自Google AOSP 源su二进制文件检查UID它正在运行。仅允许rootshell用户运行susu除非安装不su检查UID.

命令所做的就是adb root在设备上执行以下命令:

setprop service.adb.root 1
stop adbd
start adbd
Run Code Online (Sandbox Code Playgroud)

但我确信你在这里问了一个错误的问题。命令没有理由su不能达到您的目的。

您应该执行来更改 tty 设备权限的命令是:

Runtime.getRuntime().exec("su 0 chmod 777 /dev/ttyS0");
Run Code Online (Sandbox Code Playgroud)

同样在 android 中,.用作命令中用户和组字段之间的分隔符,chown而不是:. 正确的命令是:

su 0 chown root.root /dev/ttyS0
Run Code Online (Sandbox Code Playgroud)

另一个常见的错误是尝试使用标准 Linuxsu选项,例如-c. AOSP 版本su要简单得多:

usage: su [UID[,GID[,GID2]...]] [COMMAND [ARG...]]

        Switch to WHO (default 'root') and run the given command (default sh).
        where WHO is a comma-separated list of user, group,
        and supplementary groups in that order.
Run Code Online (Sandbox Code Playgroud)