自家的 System App(比如 Home Launcher)里面通过 Runtime.getRuntime().exec("$command\n")来调用这个二进制文件时,无法正常执行(没有写入文件的实际操作),但是在 adb shell 下是可以正常执行的。
SELinux 的权限问题已经解决,执行时无报错了。
备注: 此二进制文件的功能是把一个文件写入覆盖到某个分区,从某个文件拷贝数据,然后写入到此分区所在的设备块上。
1
codehz 2022 年 7 月 6 日
(虽然正常思路是做一个特权系统服务,然后通过 binder 向应用提供功能(
因为即使是特权应用也是拿不到 shell 级别的权限的( 非得野路子的话,就把系统 root 了吧,放个自定义 su ,自动给特定 uid 开 shell |
3
scys 2022 年 7 月 7 日
SELinux 是关闭,还是你写了规则?
如果规则的话,看看有没有给与执行权限,并且路径必须准确。 而这个二进制的需求,你都已经是 System 权限了,为啥不用 Java 实现? |
4
yuedashi 2022 年 7 月 7 日
虽然你说没 selinux 权限报错了,我还是建议先 adb shell setenforce 0 .
|
7
zinwalin OP @yuedashi
我在 system_app.te 里加了这三行 allow system_app system_file:file { open read execute_no_trans }; // 解决二进制文件 execute_no_trans 问题 allow system_app sdcard_block_device:chr_file rwx_file_perms; allow system_app sdcard_block_device:chr_file { open read write ioctl }; |
8
zinwalin OP @scys
我在 system_app.te 里加了这三行 allow system_app system_file:file { open read execute_no_trans }; // 解决二进制文件 execute_no_trans 问题 allow system_app sdcard_block_device:chr_file rwx_file_perms; allow system_app sdcard_block_device:chr_file { open read write ioctl }; |
9
tsann 2022 年 7 月 14 日 可以让 init 来执行这个二进制文件,随着 Android 系统权限的收紧在 App 里执行特殊权限的命令越来越麻烦
1.在 init.target.rc 里定义一个 service ,比如: service write_xxx system/bin/write_xxx 再定义一个触发条件: on property:sys.write_start=1 start write_xxx setprop sys.write_start 0 2. 在 App 或系统服务代码里执行 SystemProperties.set ("splash.write_start","1"); 就会触发 start write_xxx 的执行 |
10
tsann 2022 年 7 月 14 日
然后等待 sys.write_start 是否为 0 ,来判断 write_xxx 是否完成
|
12
tsann 2022 年 7 月 14 日
sys.write_start 不用其它地方声明,但可能要调试一下,在 system/core/init/里可能有对这个 action 做限制,像 Android9 里有个 kExportedActionableProperties 数组用来定义可以触发 action 的 Properties
|