系统是全志安卓 10
在 AOSP/android/development 下面创建了 hello 目录,目录下添加 Android.mk 和 hello.c, 模块名是 helloworld, 在 android 根目录下执行 make helloworld , 编译正常,adb push 到设备上后,通过 adb shell 里执行 helloworld ,一切正常。 当在 App 里通过 Runtime.getRuntime().exec()来执行 helloworld 就出现了下面的错误,网上搜索是 SELinux 的问题,有没有资料可以分享下如何集成自己的程序?
07-06 14:36:34.610 4382 4382 I eight.tomu.home: type=1400 audit(0.0:294): avc: denied { execute_no_trans } for path="/system/bin/helloworld" dev="dm-3" ino=60 scontext=u:r:zygote:s0 tcontext=u:object_r:system_file:s0 tclass=file permissive=1 07-06 14:36:34.565 3649 3649 I ExecuteCmd: executeCmd: helloworld 07-06 14:36:35.077 3649 3649 D MainActivity: Home:: helloworld true
1
FranzKafka95 2022-07-06 12:21:39 +08:00 via Android
先通过 getenforce 命令看看是否开启 SELINUX ,如果开启了设置为 disable 或者 permissive 就行,从这个打印来看确实是 SElinux 问题
|
2
FranzKafka95 2022-07-06 12:22:55 +08:00 via Android
如果你想在开启 Selinux 的情况下集成自己的应用,要修改编译配置文件,添加对应的 te 配置,最好还要通过单独的 rc 文件来启动
|
3
zinwalin OP @FranzKafka95 太感谢了。
|
4
zinwalin OP @FranzKafka95 加了相应的 te 配置,现在运行时没有报错了,但是有个奇怪的现象。 自家的 System App(比如 Home Launcher)里面通过 Runtime.getRuntime().exec("$command\n")来调用这个二进制文件时,无法正常执行(没有写入文件的实际操作),但是在 adb shell 下是可以正常执行的。
备注: 此二进制文件的功能是把一个文件写入覆盖到某个分区,从某个文件拷贝数据,然后写入到此分区所在的设备块上。 |
5
zinwalin OP @FranzKafka95 我最后通过 init.xxx.rc 文件里添加设备的权限解决了此问题。 加载分区的方式没解决,不过总算可以动态更新 boot logo 了,感谢。
|