Android修改framework新增系统自定义接口

1.frameworks/base/core/java/android/app/ 目录新建aidl文件

package android.app;

interface ITestInterface {
	void setGpioStatu(in int status);
}

2.frameworks/base/core/java/android/app/ 目录新建管理类

package android.app;

import android.os.ServiceManager;
import android.os.RemoteException;
import android.util.Slog;

public class Testmanager {
	ITestInterface mService;

	public Testmanager () {
		mService = ITestInterface.Stub.asInterface(ServiceManager.getService("test_service"));
	}

    public void setGpioStatu(int res) {
		if (mService != null) {
			try {
				mService.setGpioStatu(res);
			} catch (RemoteException e) {
				Slog.e("debug by moyujun", "setResolution: RemoteException", e);
			}
		}
	}
}

3.frameworks/base/services/core/java/com/android/server/ 目录新增服务实现aidl

package com.android.server;

import android.os.ServiceManager;
import android.util.Slog;
import android.app.ITestInterface;
import android.content.Context;

public class TestService extends ITestInterface.Stub {
    private Context mContext;

    public TestService(Context context) {
        mContext = context;
    }

    public void setGpioStatu(int res) {
        //具体功能的代码
    }
}

4.frameworks/base/Android.bp 新增

"core/java/android/app/ITestInterface.aidl",

5.frameworks/base/services/java/com/android/server/SystemServer.java 中 startOtherServices()方法内启动服务

try {
	Slog.i(TAG, "TestService");
    ServiceManager.addService("test_service", new TestService(context));
} catch (Throwable e) {
    Slog.e(TAG, "Failure starting Test Service", e);
}

6.修改selinux权限(这里是全志H313 10.0方案,具体根据SDK来修改)
system/sepolicy/prebuilts/api/29.0/private/service_contexts
system/sepolicy/private/service_contexts

test_service           u:object_r:test_service:s0

system/sepolicy/prebuilts/api/29.0/public/service.te
system/sepolicy/public/service.te

type test_service, system_api_service, system_server_service, service_manager_type;

7.APP内调用接口

import android.app.Testmanager;

public class Gpioread {
	private Testmanager testmanager ;
	
	public Gpioread(Context context){
        this.context = context;
        testmanager = (Testmanager) new Testmanager();
        testmanager.setGpioStatu(0); //根据自己的代码逻辑传递参数
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值