我正在尝试运行一个守护程序,它是android中的本机二进制文件。我已经读到启动API-28禁止执行二进制文件,所以目前我使用compileSdkVersion 23
。
我尝试了几种启动二进制文件的方法:
Runtime.getRuntime().exec()
popen()
。这两种方法都有效,但是由于某种原因,启动守护程序后不久,该进程被终止。 dmesg
显示以下内容:
[ 3667.854255] init: Untracked pid 19164 received signal 31
[ 3667.891082] init: Untracked pid 19173 exited with status 0
[ 3671.915378] init: Untracked pid 19174 received signal 31
[ 3671.974854] init: Untracked pid 19179 exited with status 0
[ 3672.153192] FG: fg_battery_soc_smooth_tracking: soc:71, last_soc:71, raw_soc:71, soc_changed:1.
[ 3672.153213] FG: soc_monitor_work: soc:71, raw_soc:71, c:-364745, s:1
[ 3675.998134] init: Untracked pid 19180 received signal 31
[ 3676.057815] init: Untracked pid 19186 exited with status 0
[ 3680.082653] init: Untracked pid 19187 received signal 31
[ 3680.138179] init: Untracked pid 19192 exited with status 0
这是连续两次执行二进制文件的结果。
根据我的阅读,这可能是由于SELinux引起的,但是我无法确认,因为当我尝试在设备上设置许可模式时仍然无法使用。
我可以确认您可以在API-16
和API-21
上启动守护程序而没有任何问题。我还可以确认,当使用run-as
从adb启动时,它可以正常工作,并且不需要root。
我正在运行的机器正在使用API-28,并且已植根。