Android6.0 添加一个自定义系统服务

1、在frameworks/base/core/java/android/os/创建文件 IMyService.aidl

package android.os;
interface ISecurityService {
}

2、在frameworks/base/services/core/java/com/android/server/创建文件MyService.java实现aidl接口

public class MyService extends IMyService.Stub {
    public MyService(Context context) {
        this.context = context;
    }
}

3、在frameworks/base/core/java/android/app/里添加服务管理类
MyServiceManager.java

import com.android.server.IMyService;
public class MyServiceManager {
    public MyServiceManager(Context context,IMyService service) {
        mContext = context;
        mService = service;
    }
}

4、把aidl文件添加至编译列表frameworks/base/Android.mk

LOCAL_SRC_FILES += \
    core/java/android/os/IMyService.aidl \

5、给自定义的服务命名
frameworks/base/core/java/android/content/Context.java

public static final String MY_SERVICE="my_service";

6、注册服务
frameworks/base/services/java/com/android/server/SystemServer.java

import com.android.server.MyService;
private void startOtherServices() {
    ....
    ServiceManager.addService(Context.MY_SERVICE, new MyService(context));
}

7、注册服务管理类
frameworks/base/core/java/android/app/SystemServiceRegistry.java
有些版本是在frameworks/base/core/java/android/app/ContextImpl.java注册

import android.app.MyServiceManager;
import android.os.IMyService;

    registerService(Context.MY_SERVICE, MyServiceManager.class,
        new CachedServiceFetcher() {
            @Override
            public MyServiceManager createService(ContextImpl ctx) {
                IBinder b = ServiceManager.getService(Context.MY_SERVICE);
                IMyService service = IMyService.Stub.asInterface(b);
                return new MyServiceManager(ctx, service);
    }});

8、启动服务/external/sepolicy/service.te的最后

type my_system_service, system_api_service, system_server_service, service_manager_type;

/external/sepolicy/service_contexts

my_service          u:object_r: my_system_service:s0

以上两处改动的“my_system_service” 要一致

9、编译
编译系统前,先执行make update-api

10、获取服务

mMyServiceManager = (MyServiceManager)getSystemService(Context.MY_SERVICE);

参考:https://blog.csdn.net/u012439416/article/details/71303121

你可能感兴趣的:(Android6.0 添加一个自定义系统服务)