从Activity启动Android init.rc服务

6
在开始之前,需要说明这个内容是针对我们自己的基于安卓系统的设备,而非手机或其他地方的部署。
我们在init.rc中有一个postgresql数据库服务器的服务。该服务在启动时启动并一直在后台运行。然而,它可能会关闭,因此我们希望在安卓系统端有一种方法来停止和重新启动此服务。
有没有一种方式可以从安卓Activity中发送init start命令?从root shell中,这相当于运行“start servicename”和“stop servicename”。
1个回答

12

要启动在init.rc文件中声明的服务,我认为您需要使用以下命令更改"ctl.start"系统属性:

在c文件中:

property_set("ctl.start", "<service_name>");

在Java中:

SystemProperties.set("ctl.start", "<service_name>");
这意味着您的活动具有系统权限(在清单中):
android:sharedUserId="android.uid.system"

并由您的系统密钥签名(或将平台放置在Android.mk中)。

正如您可以猜测的那样,要停止服务,请使用以下命令:

property_set("ctl.stop", "<service_name>");
或者
SystemProperties.set("ctl.stop", "<service_name>");

抱歉,直到现在我才注意到这个问题。"将平台放在Android.mk中"是否仅适用于在Android上运行的C应用程序?至于系统密钥,这是否意味着您必须为每个要部署到的系统单独构建APK? - ekthomson
1
我猜这里的系统密钥意味着,如果我们想利用这种方法启动我们的服务,那么我们需要为硬件构建整个Android系统。但是目前来看,由于我们没有足够的硬件驱动程序来自己构建它,而且我们依赖于SoM制造商来构建它,所以这种方法对我们来说几乎没有用处。不过还是谢谢你的回答。我会与SoM制造商联系,看看他们是否能提供一个包含驱动程序的更完整的构建树。 - ekthomson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接