Android系统定制系统Service

1.涉及修改的类如下:

frameworks\base\services\java\com\android\server\SystemServer.java

frameworks\base\services\core\java\com\android\server\SpecialManagerService.java

frameworks\base\core\java\com\nwd\os\SpecialManager.java

frameworks\base\core\java\com\nwd\os\ISpecialManager.aidl

frameworks\base\core\java\android\app\SystemServiceRegistry.java

frameworks/base/core/java/android/content/Context.java

frameworks/base/Android.bp

2.修改如下:

frameworks\base\services\java\com\android\server\SystemServer.java
import com.android.server.SpecialManagerService;

...

    private SpecialManagerService mSpecialManagerService;

private void startBootstrapService(@NonNull TimingTraceAndSlog T){

.....

        mSpecialManagerService = mSystemServiceManager.startService(SpecialManagerService.class);

}

...

private void startOtherService(@NonNull TimingTraceAndSlog T){

..........

            mSpecialManagerService.setWindowManager(wm);
            mSpecialManagerService.setActivityManager(mActivityManagerService);

................

        mActivityManagerService.systemReady(() -> {

            // start add for specialManager
            try {
                mSpecialManagerService.systemReady();
            } catch (Throwable e) {
                reportWtf("making SpecialManager Service ready", e);
            }
            //end
}

frameworks\base\services\core\java\com\android\server\SpecialManagerService.java


import android.content.Context;

/**
 * The special manager service is responsible for vehicle equipment system
 * functions management.
 */
+public final class SpecialManagerService extends SystemService {
    private static final String TAG = "SpecialManagerService";

    private static final boolean DEBUG = true;

    private final Context mContext;

...............

    StatusBarManagerService mStatusBar;
    WindowManagerService mWindowManager;
    ActivityManagerService mActivityManager;

    public SpecialManagerService(Context context) {
        super(context);
        mContext = context;
    }

    @Override
    public void onStart() {
        print("onStart");

        publishBinderService(Context.SPECIAL_MANAGER_SERVICE, mService);
    }

    @Override
    public void onBootPhase(int phase) {

.............

    }

    public void setWindowManager(WindowManagerService wm) {
        mWindowManager = wm;
    }

    public void setActivityManager(ActivityManagerService am) {
        mActivityManager = am;
   }

    // system is ready!!!
    public void systemReady() {
        .......
    }

    // ================================================== ISpecoalManager API ------


    public final IBinder mService = new ISpecoalManager.Stub() {

        @Override
        public boolean isSplitScreenMode() {
            return false;       
        }

........
    
     }


}
frameworks\base\core\java\com\nwd\os\ISpecialManager.aidl

package com.nwd.os;

interface ISpecialManager{
    boolean isSplitScreenMode();
}

frameworks\base\core\java\com\nwd\os\SpecialManager.java

import com.nwd.os.ISpecialManager;
import android.content.Context;

public class SpecialManager {

.........
    private final ISpecialManager mService;
    public SpecialManager(ISpecialManager service, Context context) {
        mService = service;
    }

........

    public boolean isSplitScreenMode() {
        try {
            return mService.isSplitScreenMode();
        } catch (RemoteException ex) {
            throw ex.rethrowFromSystemServer();
        }
    }

.........

}
frameworks\base\core\java\android\app\SystemServiceRegistry.java

public final class SystemServiceRegistry {
    ...
	...
    registerService(Context.SPECIAL_SERVICE, SpecialManager.class,
        new CachedServiceFetcher<SpecialManager>() {
            @Override
            public MapServiceManager createService(ContextImpl ctx) {
                //通过服务名称获取其binder
                IBinder b = ServiceManager.getService(Context.SPECIAL_SERVICE);            
                //将binder转为接口对象,传递给manager管理
                ISpecialManager service = ISpecialManager.Stub.asInterface(b);                        
                return new SpecialManager(service,ctx);
            }});
    ...
	...
}
frameworks/base/core/java/android/content/Context.java

/**@hide**/
@StringDef(suffix = {"_SERVICE"},vaule = {
	....
	SPECIAL_SERVICE,
	....
})

public static final String SPECIAL_SERVICE = "special_service";
frameworks/base/Android.bp

...
java_library {san
...
"core/java/com/nwd/os/ISpecialManager.aidl",
...
}
...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值