android framework 博客,[Android][Framework] 添加系统服务

添加接口

frameworks/base/core/java/android/app/IDemoManager.aidl

package android.app;

interface IDemoManager

{

int getCpuTemperature();

}

添加服务,实现aidl文件定义的接口

frameworks/base/services/core/java/com/android/server/DemoManagerService.java

package com.android.server;

import android.app.IDemoManager;

import android.content.Context;

import android.util.Slog;

public class DemoManagerService extends IDemoManager.Stub {

private Context mContext;

public DemoManagerService(Context context) {

mContext = context;

Slog.d("Demo", "Construct");

}

@Override

public int getCpuTemperature() {

return 100; // Test code

}

}

添加对应的Manager

frameworks/base/core/java/android/app/DemoManager.java

package android.app;

import android.content.Context;

import android.os.RemoteException;

import android.util.Slog;

public class DemoManager {

Context mContext;

IDemoManager mService;

public DemoManager(Context context, IDemoManager service) {

mContext = context;

mService = service;

}

public int getCpuTemperature() {

if (mService != null) {

try {

return mService.getCpuTemperature();

} catch (RemoteException e) {

Slog.e("Demo", "RemoteException " + e);

}

}

return -1;

}

}

添加aidl到Makefile src

frameworks/base/Android.mk

LOCAL_SRC_FILES += \

core/java/android/app/IDemoManager.aidl \

添加DEMO_SERVICE常量

frameworks/base/core/java/android/content/Context.java

public static final String DEMO_SERVICE = "demo";

注册系统服务

frameworks/base/core/java/android/app/SystemServiceRegistry.java

registerService(Context.DEMO_SERVICE, DemoManager.class,

new CachedServiceFetcher() {

@Override

public DemoManager createService(ContextImpl ctx) {

IBinder b = ServiceManager.getService(Context.DEMO_SERVICE);

return new DemoManager(ctx, IDemoManager.Stub.asInterface(b));

}});

开机启动服务

frameworks/base/services/java/com/android/server/SystemServer.java

try {

ServiceManager.addService(Context.DEMO_SERVICE, new DemoManagerService(context));

} catch (Throwable e) {

Slog.e("Demo", "Failed to start Demo Service " + e);

}

编译源码,因为添加了接口,所以需要

make update-api

更新接口。然后再整编刷机。

service list 查看服务,不存在,这是因为selinux权限没加。

添加sepolicy权限

device/qcom/sepolicy/msm8937/service.te

type demo_service, system_api_service, system_server_service, service_manager_type;

device/qcom/sepolicy/msm8937/service_contexts

demo u:object_r:demo_service:s0

重新编译代码,使用下面测试代码验证

import android.app.DemoManager;

DemoManager om = (DemoManager) getSystemService(Context.DEMO_SERVICE);

Log.d(TAG, "Current temperature is " + om.getCpuTemperature());

最终log打印出100,服务添加完成。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值