在android源码中增加一项系统服务,如在android.app包下增加DevInfoManager.java,按如下进行处理:
1、在frameworks/base/core/java/android/app/目录下增加DevInfoManager.java及IDevInfoManager.aidl文件
DevInfoManager.java如下:
- package android.app;
- import android.os.Handler;
- import android.os.RemoteException;
- import android.util.Log;
- public class DevInfoManager
- {
- public static final String TAG = "DevInfoManager";
- IDevInfoManager mService;
- Handler mHandler;
-
- public DevInfoManager(IDevInfoManager service, Handler handler) {
- mService = service;
- mHandler = handler;
- }
-
- public String getValue(String name){
- try {
- return mService.getValue(name);
- } catch (RemoteException e) {
- Log.e(TAG, "[getValue] RemoteException");
- }
- return null;
- }
-
- public int update(String name, String value, int attribute) {
- try {
- return mService.update(name, value, attribute);
- } catch (RemoteException e) {
- Log.e(TAG, "[update] RemoteException");
- }
- return -1;
- }
- }
IDevInfoManager.aidl文件如下:
- package android.app;
-
- interface IDevInfoManager
- {
- String getValue(String name);
- int update(String name, String value, int attribute);
- }
2、添加相应的Service类,在frameworks/base/services/java/com/android/server下增加DevInfoService.java文件
DevInfoService.java文件如下:
- package com.android.server;
-
- import android.app.IDevInfoManager;
- import android.util.Log;
- import android.content.Context;
- public class DevInfoService extends IDevInfoManager.Stub
- {
- private static final String TAG = "DevInfoManagerService";
- private Context mContext;
- public DevInfoService(Context context){
- mContext = context;
- }
-
- public String getValue(String name) {
- Log.d(TAG,"[getValue] name : "+name);
- return name;
- }
-
- public int update(String name, String value, int attribute) {
- Log.d(TAG,"[update] name : "+name +", value : "+value+", attribute : "+attribute);
- return 0;
- }
- }
3、在SystemServer中生成该Service并添加到ServiceManager中
frameworks/base/services/java/com/android/server/SystemServer.java文件:
-
- try {
- Slog.i(TAG, "DevInfoManager Service");
- devInfo = new DevInfoService(context);
- ServiceManager.addService(Context.DEVINFO_SERVICE, devInfo);
- } catch (Throwable e) {
- reportWtf("starting devInfo Service", e);
- }
-
4、在frameworks/base/core/java/android/app/ContextImpl.java中增加service注册,如下:
- registerService(DEVINFO_SERVICE, new ServiceFetcher() {
- public Object createService(ContextImpl ctx) {
- IBinder b = ServiceManager.getService(DEVINFO_SERVICE);
- IDevInfoManager service = IDevInfoManager.Stub.asInterface(b);
- return new DevInfoManager(service, ctx.mMainThread.getHandler());
- }
- });
5、在frameworks/base/core/java/android/content/Context.java中增加Service名称定义:
-
-
-
-
-
-
-
-
- public static final String DEVINFO_SERVICE = "devinfo";
6、在frameworks/base/Android.mk文件中的LOCAL_SRC_FILES增加aidl的声明:
@@ -112,6 +112,7 @@ LOCAL_SRC_FILES += \
core/java/android/app/backup/IFullBackupRestoreObserver.aidl \
core/java/android/app/backup/IRestoreObserver.aidl \
core/java/android/app/backup/IRestoreSession.aidl \
+ core/java/android/app/IDevInfoManager.aidl \
core/java/android/bluetooth/IBluetooth.aidl \
core/java/android/bluetooth/IBluetoothA2dp.aidl \
7、进行编译,因为framework有变更,需要先update-api,在源码根目录下执行“make update-api”进行更新,完成后“make -j16”进行整体编译