android 8.1添加自定义系统服务

本文基于 MTK 8.1.0

1.编写aidl文件
  • frameworks/base/core/java/android/app/IIrScanManager.aidl
package android.app;

interface IIrScanManager {
   void getUartData();
   void powerOn();
   void powerOff();
}
2.注册aidl文件

完成后需要在frameworks/base/Android.mk 声明我们需要的aidl文件

LOCAL_SRC_FILES += \
      core/java/android/app/IIrScanManager.aidl
3.添加实现服务service
  • frameworks/base/services/core/java/com/android/server/IrScanManagerService.java
package com.android.server;

import android.app.IIrScanManager;
import android.content.Context;
import andorid.util.Log;

public class IrScanManagerService extends IIrScanManager.Stud {
	private static final String TAG = "IrScanManagerService ";
	private Context mContext;
	public IrScanManagerService (Context context){
		mContext = context;
	}

	@Override
	public void getUartData(){
		Log.d(TAG,"getUartData");
	}
	
	@Override
	public void powerOn(){
		Log.d(TAG,"powerOn");
	}

	@Override
	public void powerOff(){
		Log.d(TAG,"powerOff");
	}
}
4.添加管理manager
  • frameworks/base/core/java/android/app/IrScanManager.java
package android.app;

import android.content.Context;
import android.util.Log;

public class IrScanManager {
	private static final String TAG = "IrScanManager ";
	private Context mContext;
	private IIrScanManager mService;
	
	public IrScanManager (Context context, IIrScanManager service){
		mContext = context;
		mService = service;
	}

	public void getUartData(){
		try {
			mService.getUartData();
		} catch (RemoteException e){
			Log.d(TAG,"get data failur :"+e);
		}
	}
	
	public void powerOn(){
		try {
			mService.powerOn();
		} catch (RemoteException e){
			Log.d(TAG,"powerOn failur :"+e);
		}
	}
	
	public void powerOff(){
		try {
			mService.powerOff();
		} catch (RemoteException e){
			Log.d(TAG,"powerOff failur :"+e);
		}
	}
}
5.在Context.java添加常量
  • frameworks/base/core/java/android/content/Context.java
public static final String IRSCAN_SERVICE = "irscan";
6. 注册系统服务
  • frameworks/base/core/java/android/app/SystemServiceRegistry.java
registerService(Context.IRSCAN_SERVICE,IrScanManager.class,
		new CachedServiceFetcher<IrScanManager>(){
	@Override
	public IrScanManager createService(ContextImpl ctx){
		IBinder b = ServiceManager.getService(Context.IRSCAN_SERVICE);
		return new IrScanManager(ctx,IIrScanManager.Stub.asInterface(b));
	}});

7.开机启动
  • frameworks/base/services/java/com/android/server/SystemServer.java
traceBeginAndSlog("StartIrScanManagerService);
try {
	IrScanManagerService irscanService = new IrScanManagerService(context);
	ServiceManager.addService(Context.IRSCAN_SERVICE,irscanService );
} catch (Throwable e){
	reportWtf("start IrScanManagerService",e);
}
traceEnd();

我在8.1系统上添加系统服务,还需要修改selinux权限

8.添加selinux权限
  • device/mediatek/sepolicy/bsp/plat_private/service.te
type irscan,system_api_service,system_server_service,service_manager_type;
  • device/mediatek/sepolicy/bsp/plat_private/service_contexts
irscan u:object_r:irscan:s0 
  • device/mediatek/sepolicy/bsp/prebuilts/api/26.0/nonplat_sepolicy.cil
(typeattribute isrscan_26_0)
(roletype object_r irscan_26_0)
...

(typeattributeset system_api_service(... irscan_26_0))
(typeattributeset system_server_service(... irscan_26_0))
(typeattributeset service_manager_type(... irscan_26_0))
  • device/mediatek/sepolicy/bsp/private/compat/26.0/26.0.cil
(typeattributeset  irscan_26_0 (irscan))

使用 make update-api;make -j8 2>&1 | tee build.log 进行编译

9.检查服务是否添加成功

刷完机开机后,adb shell 进入后使用 service list | grep irscan ,如果能显示
irscan: [android.app.IrScanManager]
证明添加成功

10.测试
IrScanManager manager = getSystemService(Context.IRSCAN_SERVICE);
manager.getUartData();

如果需要在studio中运行,导入编译后的frameworks.jar
路径:out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值