android framework 添加系统服务
2016-12-27 16:52
489 查看
前言
本文的方法要修改Android源码。我们自定义一个自己的服务,并将其添加到ServiceManager中。
步骤
1. 添加一个aidl文件,我将aidl文件添加到这个路径下:
frameworks/base/core/java/android/content/dyna/IDynaSystemManager.aidl
2.在frameworks/base/Android.mk文件的LOCAL_SRC_FILES中系统添加了很多aidl文件,我们在系统添加的文件列表中添加一行:
3.frameworks/base/services/java/com/android/server/dyna/ 路径下新建一个DynaSystemService.java类,该类继承了IDynaSystemManager.Stub
4.frameworks/base/core/java/android/content/dyna创建一个管理器类DynaSystemManager.java
5.为了让应用层可以使用getSystemService接口获得服务,现在需要在ContextImpl.java的static代码块将DynaSystemManager创建起来
6.将DynaSystemService服务加入到ServiceManager中,
3.执行update-api命令更新:frameworks/base/api/current.txt
本文的方法要修改Android源码。我们自定义一个自己的服务,并将其添加到ServiceManager中。
步骤
1. 添加一个aidl文件,我将aidl文件添加到这个路径下:
frameworks/base/core/java/android/content/dyna/IDynaSystemManager.aidl
package android.content.dyna; interface IDynaSystemManager { byte[] read(); boolean write(in byte[] buffer); }
2.在frameworks/base/Android.mk文件的LOCAL_SRC_FILES中系统添加了很多aidl文件,我们在系统添加的文件列表中添加一行:
@@ -103,6 +103,7 @@ LOCAL_SRC_FILES += \ core/java/android/bluetooth/IBluetoothGatt.aidl \ core/java/android/bluetooth/IBluetoothGattCallback.aidl \ core/java/android/bluetooth/IBluetoothGattServerCallback.aidl \ + core/java/android/content/dyna/IDynaSystemManager.aidl \ core/java/android/content/IClipboard.aidl \ core/java/android/content/IContentService.aidl \ core/java/android/content/IIntentReceiver.aidl \
3.frameworks/base/services/java/com/android/server/dyna/ 路径下新建一个DynaSystemService.java类,该类继承了IDynaSystemManager.Stub
4.frameworks/base/core/java/android/content/dyna创建一个管理器类DynaSystemManager.java
5.为了让应用层可以使用getSystemService接口获得服务,现在需要在ContextImpl.java的static代码块将DynaSystemManager创建起来
frameworks/base/core/java/android/app/ContextImpl.java @@ -50,6 +50,8 @@ +import android.content.dyna.DynaSystemManager; +import android.content.dyna.IDynaSystemManager; @@ -586,6 +588,12 @@ class ContextImpl extends Context { + + registerService(DYNASYSTEM_SERVICE, new ServiceFetcher() { + public Object createService(ContextImpl ctx) { + IBinder b = ServiceManager.getService(DYNASYSTEM_SERVICE); + return new DynaSystemManager(ctx, IDynaSystemManager.Stub.asInterface(b)); + }}); ......
6.将DynaSystemService服务加入到ServiceManager中,
frameworks/base/core/java/android/content/Context.java @@ -2449,6 +2449,8 @@ public static final String SERIAL_SERVICE = "serial"; + + public static final String DYNASYSTEM_SERVICE = "dynasystem";
frameworks/base/services/java/com/android/server/SystemServer.java @@ -136,6 +136,8 @@ +import com.android.server.dyna.DynaSystemService; @@ -233,6 +235,7 @@ class ServerThread { DockObserver dock = null; UsbService usb = null; SerialService serial = null; + DynaSystemService dynasystem = null; TwilightService twilight = null; UiModeManagerService uiMode = null; RecognitionManagerService recognition = null; @@ -896,6 +899,14 @@ + try { + Slog.i(TAG, "DynaSystemService"); + dynasystem = new DynaSystemService(context); + ServiceManager.addService(Context.DYNASYSTEM_SERVICE,dynasystem); + } catch (Throwable e) { + reportWtf("starting DynaSystemService", e); + }
3.执行update-api命令更新:frameworks/base/api/current.txt
@@ -5987,6 +5987,7 @@ package android.content { field public static final java.lang.String DISPLAY_SERVICE = "display"; field public static final java.lang.String DOWNLOAD_SERVICE = "download"; field public static final java.lang.String DROPBOX_SERVICE = "dropbox"; + field public static final java.lang.String DYNASYSTEM_SERVICE = "dynasystem"; field public static final java.lang.String INPUT_METHOD_SERVICE = "input_method"; field public static final java.lang.String INPUT_SERVICE = "input"; field public static final java.lang.String KEYGUARD_SERVICE = "keyguard"; @@ -6939,6 +6940,29 @@ package android.content { } +package android.content.dyna { + + public class DynaSystemManager { + ctor public DynaSystemManager(android.content.Context, android.content.dyna.IDynaSystemManager); + method public byte[] read(); + method public boolean write(byte[]); + field public static final java.lang.String TAG = "DynaSystemManager"; + } + + public abstract interface IDynaSystemManager implements android.os.IInterface { + method public abstract byte[] read() throws android.os.RemoteException; + method public abstract boolean write(byte[]) throws android.os.RemoteException; + } + + public static abstract class IDynaSystemManager.Stub extends android.os.Binder implements android.content.dyna.IDynaSystemManager { + ctor public IDynaSystemManager.Stub(); + method public android.os.IBinder asBinder(); + method public static android.content.dyna.IDynaSystemManager asInterface(android.os.IBinder); + method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException; + } + +} +
相关文章推荐
- [实践] Android5.1.1源码 - 在Framework中添加自定义系统服务
- 在android framework中添加自定义系统服务
- Android 6.0 如何添加完整的系统服务(app-framework-kernel)
- android framework添加系统服务
- Android 6.0 如何添加完整的系统服务(app-framework-kernel)
- 在android framework中添加自定义系统服务
- [实践] Android5.1.1源码 - 在Framework中添加自定义系统服务
- Android5.1.1源码 - 在Framework中添加自定义系统服务
- Android5.1.1源码 - 在Framework中添加自定义系统服务
- [实践] Android5.1.1源码 - 在Framework中添加自定义系统服务
- 如何在Android中添加系统服务
- Android 添加系统服务
- 如何在Android中添加系统服务
- Android Framework系统服务详解
- Android 5.0 添加系统服务后,启动的时候报安全错误
- Android 添加系统服务
- Android5.1 Framework分析----如何在SystemServer中添加系统服务
- Android系统开发之一:添加系统级服务方法
- Android 添加系统服务
- 添加自定义android系统服务的方法