1 \frameworks\base\core\java\android\content\Context.java
添加一个服务名称
eg:
public static final String TEST_SERVICE = "testservice";
2 \frameworks\base\services\java\com\android\server\SystemServer.java
private void startOtherServices() {
函数中添加服务
eg:
/// M: add for running booster feature @{
if ("1".equals(SystemProperties.get("persist.runningbooster.support"))) {
try {
SuppressionService mSuppressionService =
mSystemServiceManager.startService(SuppressionService.class);
mSuppressionService.setActivityManager(mActivityManagerService);
Slog.i(TAG, "RunningBoosterService");
runningbooster = new RunningBoosterService(context);
ServiceManager.addService(Context.RUNNING_BOOSTER_SERVICE,
runningbooster.asBinder());
} catch (Throwable e) {
reportWtf("starting RunningBoosterService", e);
}
}
/// add for running booster feature @}
+++ ServiceManager.addService(Context.TEST_SERVICE, new TestManagerService(context));
3 \frameworks\base\core\java\android\app\SystemServiceRegistry.java
注册服务
private SystemServiceRegistry() { }
static {
添加
/// M: add for running booster feature @{
if ("1".equals(SystemProperties.get("persist.runningbooster.support"))) {
registerService(Context.RUNNING_BOOSTER_SERVICE, RunningBoosterManager.class,
new CachedServiceFetcher<RunningBoosterManager>() {
@Override
public RunningBoosterManager createService(ContextImpl ctx) {
return new RunningBoosterManager(ctx);
}});
}
/// add for running booster feature @}
// <- ----- -Xiao------2017/09/20------add service-----
registerService(Context.TEST_SERVICE, TestManager.class,
new CachedServiceFetcher<TestManager>() {
@Override
public TestManager createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(Context.TEST_SERVICE);
ITestManager service = ITestManager.Stub.asInterface(b);
return new TestManager(ctx,service);
}});
4 system\sepolicy\service.te
添加
type window_service, system_api_service, system_server_service, service_manager_type;
+++ type test_service, system_api_service, system_server_service, service_manager_type;
5 system\sepolicy\service_contexts
添加
window u:object_r:window_service:s0
+++ testservice u:object_r:dami_service:s0
添加aidl
添加
\frameworks\base\core\java\android\test\ITestManager.aidl
\frameworks\base\core\java\android\test\TestManager.java
ITestManager.aidl写法
package android.test;
interface ITestManager {
void myTest();
}
TestManager.java写法
添加
package android.dami;
public class TestManager{
ITestManager mTestManagerSevice;
public TestManager(Context ctx,ITestManager testManagerSevice) {
mTestManagerSevice = testManagerSevice;
}
public void myTest() throws RemoteException {
mTestManagerSevice.myTest();
}
}
添加 frameworks\base\services\core\java\com\android\server\test\TestManagerService.java
package com.android.server;
import android.app.test.ITestManager ;
import android.content.Context;
import android.os.Build;
import android.util.Log;
public class TestManagerService extends ITestManager .Stub {
private Context mContext;
public SystemStatusManagerService(Context context) {
mContext = context;
}
@Override
public void myTest() {
Log.d("myTest","This is test !");
}
}
代码基本添加完成。
下面是编译
先是update-api 然后再make -j8
下载 ok
至于调用
TestManager mManager = (TestManager) getSystemService(Context.TEST_SERVICE );
try {
mManager.myTest();
} catch (Exception e) {
e.printStackTrace();
}
以上工作就是怎么添加系统服务。