安卓8添加自定义系统服务

1)创建aidl文件frameworks/base/core/java/android/os目录添加IHookStatus.aidl,内容如下

interface IHookStatus {    
    boolean IsOffhookByHost();
    boolean IsOnhookByHost();
    boolean IsOffhookByFxs();
    boolean IsOnhookByFxs();
    void setstatus(int which, boolean value);
}

frameworks/base/Android.mk添加编译

LOCAL_SRC_FILES += core/java/android/os/IHookStatus.aidl

 

2)frameworks/base/services/core/java/com/android/server/os目录添加HookStatusService.java,实现aidl文件定义的接口

package com.android.server.os;
import android.os.IHookStatus;
public class HookStatusService extends IHookStatus.Stub {
    private static final String TAG = "HookStatusService";
    
    @Override
    public boolean IsOffhookByHost() {
        return true;
    }
    
    @Override
    public boolean IsOnhookByHost() {
        return true;
    }
    
    @Override
    public boolean IsOffhookByFxs() {
        return true;
    }
    @Override
    public boolean IsOnhookByFxs() {
        return true;
    }
    
    @Override
    public void setstatus(int which, boolean value) {                
    }  
}

3) 将自定义Service 加入到SystemServer 启动进程,

先在 frameworks/base/core/java/android/content/Context.java 中添加一行 

public static final String HOOKSTATUS_SERVICE = "hookstatus";

在frameworks/base/core/services/java/com/android/server/SystemServer.java  startOtherServices函数的try块添加下面代码

traceBeginAndSlog("Start hookstatus service");
ServiceManager.addService(Context.HOOKSTATUS_SERVICE, new HookStatusService());
traceEnd();

4)创建服务Manager,即HookStatusManager

在frameworks/base/core/java/android/app/ 下创建HookStatusManager.java 文件,内容如下

package android.app;

import android.content.Context;
import android.util.Log;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.RemoteException;
import android.os.IHookStatus;


public class HookStatusManager {
    private static final String TAG = "HookStatusManager";
	private IHookStatus mService;
	
	public static final int OFFHOOK_HOST = 0;
	public static final int ONHOOK_HOST = 1;
	public static final int OFFHOOK_FXS = 2;
	public static final int ONHOOK_FXS = 3;

    public HookStatusManager(Context ctx, IHookStatus service){
        mService = service;
    }
	
    public boolean IsOffhookByHost() {
        try {
            return mService.IsOffhookByHost();
        }catch(Exception e){
            Log.e(TAG, "exception=" + e);
            e.printStackTrace();
        }
        return false;
    }
	
    public boolean IsOnhookByHost() {
        try {
            return mService.IsOnhookByHost();
        }catch(Exception e){
            Log.e(TAG, "exception=" + e);
            e.printStackTrace();
        }
        return false;
    }
	
    public boolean IsOffhookByFxs() {
        try {
            return mService.IsOffhookByFxs();
        } catch(Exception e){
            Log.e(TAG, "exception=" + e);
            e.printStackTrace();
        }
		
        return false;
    }
	
    public boolean IsOnhookByFxs() {
        try {
            return mService.IsOnhookByFxs();
        } catch(Exception e){
            Log.e(TAG, "exception=" + e);
            e.printStackTrace();
        }
        return false;
    }
	
    public void setstatus(int which, boolean value) {
        try {
            mService.setstatus(which, value);
        }catch(Exception e){
            Log.e(TAG, "exception=" + e);
            e.printStackTrace();
        }
    }
}

5)自定义服务添加到SystemService

修改frameworks/base/core/java/android/app/SystemServiceRegistry.java  在静态代码块中增加

registerService(Context.HOOKSTATUS_SERVICE, HookStatusManager.class,
                new CachedServiceFetcher<HookStatusManager>() {
                    @Override
                    public HookStatusManager createService(ContextImpl ctx) throws ServiceNotFoundException {
                        IBinder b = ServiceManager.getServiceOrThrow(Context.HOOKSTATUS_SERVICE);
                        return new HookStatusManager(ctx, IHookStatus.Stub.asInterface(b));
                    }
                });

6)自定义服务sepolicy权限策略配置

system/sepolicy/prebuilts/api/26.0/private/service_contexts 以及 system/sepolicy/private/service_contexts两个配置文件分别添加

hookstatus    u:object_r:hookstatus_service:s0

system/sepolicy/prebuilts/api/26.0/public/service.te 以及 system/sepolicy/public/service.te两个配置文件分别添加

type hookstatus_service, system_api_service, system_server_service, service_manager_type;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值