我想添加自己在Android“system_server”中运行的框架代码(处理所有系统级服务)。我的服务加载了一个JNI库,该库与我添加到内核的驱动程序进行通信。该服务旨在允许应用程序向其注册侦听器以从驱动程序获取更新。我发现了一篇非常好的博客文章(http://www.androidenea.com/2009/12/adding-system-server-to-android.html),解释了如何添加系统服务,但我无法完全发挥作用。
首先,帖子提到应该使用“适当的”Android.mk文件来编写客户端/测试应用程序,但是没有举例说明。当我尝试构建它时,我遇到构建错误,说它无法找到我添加的服务。有人可以举例说明这可能是什么样的吗?
另外,我想在供应商目录(或froyo中的设备目录)中实现此功能,而不是在Android开源代码中实现。博客文章提到适当的地方是供应商目录,但没有举例说明这应该是什么样子。有人知道吗?
有关在Android中实施您自己的系统服务的任何其他信息都会有所帮助。我的具体工作流程再次是:
Android应用 - >系统服务 - > JNI(本机)库 - >设备驱动程序
答案 0 :(得分:15)
德州仪器提供了一个很好的例子:
http://processors.wiki.ti.com/index.php/Android-Adding_SystemService
此外,CyanogenMod SystemServer.java还有用于动态加载系统服务的代码,如config.xml中的数组“config_vendorServices”中所定义(参见core / res / res / values / config.xml),我相信可以使用叠加层在供应商或设备目录中覆盖。这是CyanogenMod特有的添加,在此提交中添加:
答案 1 :(得分:2)
按照以下步骤在android框架中编写自己的系统服务。
PS;如果您的服务遇到致命异常,设备将软重启,因为您的服务在系统服务下运行。
答案 2 :(得分:2)
添加系统服务有多种方式(或6种方式,只是为了明确)。
您尝试的内容(Android应用程序 - >系统服务 - > JNI(本机)库 - >设备驱动程序)就是其中之一。您可能需要check out this article来深入解释有关系统服务实现模式的信息。
答案 3 :(得分:0)
以下是用于编译位于 system / extras / JNITest 的JNItest.c的Android.mk示例。 Android.mk也在 system / extras / JNITest 目录中。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= JNITest1.c
LOCAL_MODULE:= JNITest
#LOCAL_FORCE_STATIC_EXECUTABLE := true
#LOCAL_STATIC_LIBRARIES := libc
LOCAL_SHARED_LIBRARIES := libc
#LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_MODULE_TAGS := eng
include $(BUILD_EXECUTABLE)