`
anson_xu
  • 浏览: 502254 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

添加一个系统服务sytem service

 
阅读更多

方法一:

1.在应用中
com.xxx.spi.SPLListener.java/com.xxx.spi.SPIManager.java两个类
SPIManager spiManager = (SPIManager) getSystemService("spiService");
spiListener = new MySPIListener();
spiManager.requestSPIUpdates(spiListener);

2.
需在android.app.ContextImpl.java中添加
private static SPIManager sSPIManager;
else if (SPI_SERVICE.equals(name)) {
            return getSPIManager();
        }

private SPIManager getSPIManager() {
        synchronized (sSync) {
            if (sSPIManager == null) {
                IBinder b = ServiceManager.getService(SPI_SERVICE);
                ISPIManager service = ISPIManager.Stub.asInterface(b);
                sSPIManager = new SPIManager(service);
            }
        }
        return sSPIManager;
    }

在android.content.Context.java中添加常量
public static final String SPI_SERVICE = "spiService";

3.com.xxx.spi.SPIManager.java
中有ISPIListerner.aidl的实现类ListenerTransport
private class ListenerTransport extends ISPIListener.Stub
ListenerTransport中有应用中注册进来的回调监听器SPIListener
ListenerTransport传给frameworks/base/services/java/com/android/server/SPIManagerrService.java服

务器类,也就是aidl的回调注册,一定是实现ISPIListener.stub的ListenerTransport类
SPIManagerService.java是通过jni调C++文件,其中需要把自己作为c++的回调对象,
在cpp文件中取得SPIManagerService类对象
static { class_init_native(); }初始化回调的方法,这样在cpp文件中就随时可以调class_init_native本地

方法中初始化过的函数。


4.frameworks/base/Android.mk文件中编译ISPIListener.aidl,ISPIManager.aidl两个文件成相应的java文件
frameworks/base/services/jni/Android.mk文件中编译同目录下的

com_android_server_SPIManagerService.cpp文件,注意cpp文件的命名与其对应的SPIManagerService.java

文件的包路径之间的关系。
同目录下的onload.cpp文件中添加
int register_android_server_SPIManagerService(JNIEnv* env);
register_android_server_SPIManagerService(env);

5.
frameworks/base/services/java/com/android/server/SystemServer.java中添加服务,并调服务的

systemReady方法
try {
                Slog.i(TAG, "---SPI Manager---");
                spiService = new SPIManagerService(context);
                ServiceManager.addService("spiService", spiService);
            } catch (Throwable e) {
                Slog.e(TAG, "---Failure starting spiService Manager---", e);
            }

if (spiServiceF != null) spiServiceF.systemReady();

6.
frameworks/base/core/jni/AndroidRuntime.cpp中添加
extern int register_android_server_SPIManagerService(JNIEnv* env);
不确定是不是必须的

方法二:

在systemserver.java中添加自己有make文件创建的包

System.loadLibrary("android_servers");
        System.loadLibrary("serialserver");

分享到:
评论

相关推荐

    paysys caipiao sytem asp

    paysys caipiao sytem asppaysys caipiao sytem asppaysys caipiao sytem asp

    sytem view 安装及资料

    sytem view 安装及资料,是通信原理,无线通信经常用到的仿真软件,软件使用简单,方便!

    Windows Sytem Programming

    Windows Sytem Programming

    c:\windows\sytem32\ieframe.dll\1未找到'的解决方法

    这几天我的VB一直不能加载ieframe.dll,一加载就说c:\windows\sytem32\ieframe.dll\1找不到,然后就出错了。一直没有搞明白,今天终于在网上找到了解决的办法,原因是由于ie7.0的bug引起的。

    数据库系统基本知识点整理.docx

    数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。 ( ...

    Artificial Intelligent & Distributed expert sytem

    Artificial Intelligent & Distributed expert sytem document.

    bada2.0培训_2_5_Sytem

    bada2.0培训_2_5_Sytem

    数据库系统概论答案

    数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。 ( ...

    数据库系统概论第四版答案.doc

    数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。

    数据库系统概论第四版答案

    数据库系统是一个人一机系统, 数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据 库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引 起混淆。 ...

    数据库系统原理基本概念综合

    数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。 ( 4 )数据库管理系统( DataBase Management sytem ,简称 DBMs ) :数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地...

    数据库系统概论课后答案

    数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。 ( 4...

    数据库系统概论习题答案

    数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。 ( ...

    数据库系统概论答案 第四版

    数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。

    数据库系统概论(第四版)课后题答案

    数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。 ( ...

    数据库系统概论答案第四版.pdf

    数据库系统是一个人一机系统,数据 库是数据库系统的一个组成部分。 但是在日常工作中人们常常把数据库系统简称为数据库。 希望读者能够从人们讲话或文章的上下文中区分"数据库系统"和"数据库",不要引起 混淆。 ( ...

    第四版数据库系统概论课后答案

    数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。

    数据库系统概论(第四版)

    数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。

    android安卓源码解析-Sytem.loadLibrary.pdf

    Android安卓源码解析,比较详细的分析了Sytem.loadLibrary的源码,对于so文件的dump的点有非常好的借鉴意义

Global site tag (gtag.js) - Google Analytics