如何向Android框架添加系统服务

如何向Android框架添加系统服务,android,java-native-interface,android-source,Android,Java Native Interface,Android Source,我想添加在Android“system_server”(处理所有系统级服务)中运行的我自己的框架代码。我的服务加载一个JNI库,该库与我添加到内核中的驱动程序对话。该服务旨在允许应用程序向其注册侦听器,以从驱动程序获取更新。我发现了一篇很好的博客文章()解释了如何添加系统服务,但我无法让它完全工作 首先,文章提到应该使用一个“合适的”Android.mk文件来编写客户机/测试应用程序,但没有给出一个例子。当我尝试构建它时,我会收到构建错误,说它找不到我添加的服务。有人能举个例子说明这可能是什么样

我想添加在Android“system_server”(处理所有系统级服务)中运行的我自己的框架代码。我的服务加载一个JNI库,该库与我添加到内核中的驱动程序对话。该服务旨在允许应用程序向其注册侦听器,以从驱动程序获取更新。我发现了一篇很好的博客文章()解释了如何添加系统服务,但我无法让它完全工作

首先,文章提到应该使用一个“合适的”Android.mk文件来编写客户机/测试应用程序,但没有给出一个例子。当我尝试构建它时,我会收到构建错误,说它找不到我添加的服务。有人能举个例子说明这可能是什么样子吗

另外,我希望在供应商目录(或froyo中的设备目录)中实现这一点,而不是在Android开源代码中实现。这篇博文提到了这个合适的地方是供应商目录,但没有给出一个这样的例子。有人知道吗

任何关于在Android中实现您自己的系统服务的附加信息都会很有帮助。我的具体工作流程是:


Android应用程序->系统服务->JNI(本机)库->设备驱动程序德克萨斯仪器公司提供了一个很好的例子:

此外,CyanogenMod SystemServer.java还具有动态加载系统服务的代码,如config.xml中数组“config_vendorServices”中定义的(请参阅core/res/res/values/config.xml),我相信可以使用覆盖在供应商或设备目录中覆盖。这是一种特定于氰莫德的添加剂,添加在本提交中:


按照以下步骤在android框架中编写您自己的系统服务

  • 通过继承存根,使用公开的API编写您自己的服务/管理器
  • 为您的服务创建一个aidl文件,以在生成中公开和包含
  • 在系统服务器中添加您的服务,您的服务将与所有核心服务一起启动
  • 在context impl文件中注册您的服务上下文
  • 通过调用getSystemService(服务的上下文)在应用程序中使用服务

  • 聚苯乙烯;若您的服务出现致命异常,设备将软重启,因为您的服务正在系统服务下运行

    下面是一个Android.mk示例,用于编译位于system/extras/JNItest的JNItest.c。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)
    
    添加系统服务有多种方式(或者说,明确地说,有6种方式)

    您尝试的(Android应用程序->系统服务->JNI(本机)库->设备驱动程序)就是其中之一。您可能需要关于系统服务实现模式的深入解释


    感谢您发布此邮件。我不知道TI已经发布了这个文档。我还没有机会仔细研究一下,但我现在会接受你的回答,因为这似乎提供了一些很好的信息。如果有其他人来到这里,几年前随着ICS的升级,CyanogenMod中的VendorService功能被删除了。