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); //根据自己的代码逻辑传递参数
}
}