How to make SystemService in Android
Making SystemServerService
Step1:Define SystemService name in frameworks/base/core/java/android/content/Context.java
along with the link of manager object which will be retrived using getSystemService
+
+ /**
+* Use with {@link #getSystemService} to retrieve a {@link
+* android.manandaidl.MySampleSystemServiceManager} instance
+* @see #getSystemService
+* @see android.manandaidl.MySampleSystemServiceManager
+*/
+public static final String MY_SYSTEM_SERVICE = “my”;
+ /**
+* Use with {@link #getSystemService} to retrieve a {@link
+* android.manandaidl.MySampleSystemServiceManager} instance
+* @see #getSystemService
+* @see android.manandaidl.MySampleSystemServiceManager
+*/
+public static final String MY_SYSTEM_SERVICE = “my”;
Step 2:Create a service class extending SystemService(MySampleSystemService in my case)
I have created myservice folder as below
frameworks/base/services/core/java/com/android/server/myservice/MySampleSystemService.java
It will contain the aidl Implemenatation also.
It will contain the aidl Implemenatation also.
Step3:
start service from SystemServer.java
frameworks/base/services/java/com/android/server/SystemServer.java
start service from SystemServer.java
frameworks/base/services/java/com/android/server/SystemServer.java
mSystemServiceManager.startService(“com.android.server.myservice.MySampleSystemService”);
Step4:
Create Manager and Aidl class as below
android/frameworks/base/core/java/android/manandaidl/IMySampleSystemService.aidl
android/frameworks/base/core/java/android/manandaidl/MySampleSystemServiceManager.java
Step4:
Create Manager and Aidl class as below
android/frameworks/base/core/java/android/manandaidl/IMySampleSystemService.aidl
android/frameworks/base/core/java/android/manandaidl/MySampleSystemServiceManager.java
aidl interface will be implemented by our SystemService.Manager will call the implemented api using service object.Service in turn will make jbi call and then jni call and we can open hal module to interact with kernel.
Step 5:
Register aidl in frameworks/base/Android.mk
in LOCAL_SRC_FILE core/java/android/manandaidl/IMySampleSystemService.aidl \
Step6:
Now register Manager and Service in
android/frameworks/base/core/java/android/app/SystemServiceRegistry.java
Now register Manager and Service in
android/frameworks/base/core/java/android/app/SystemServiceRegistry.java
registerService(Context.MY_SYSTEM_SERVICE, MySampleSystemServiceManager.class,
+ new StaticServiceFetcher<MySampleSystemServiceManager>() {
+ @Override
+ public MySampleSystemServiceManager createService() {
+ IBinder b = ServiceManager.getService(Context.MY_SYSTEM_SERVICE);
+return new MySampleSystemServiceManager(IMySampleSystemService.Stub.asInterface(b));
+ }});
+ new StaticServiceFetcher<MySampleSystemServiceManager>() {
+ @Override
+ public MySampleSystemServiceManager createService() {
+ IBinder b = ServiceManager.getService(Context.MY_SYSTEM_SERVICE);
+return new MySampleSystemServiceManager(IMySampleSystemService.Stub.asInterface(b));
+ }});
this will put a manager object corresponding to our service object
Step 7:
Now develop jni module frameworks/base/services/core/jni
Step 8:
Now develop jni module frameworks/base/services/core/jni
Step 8:
Now develp HAL module android/hardware/libhardware/
Step 9:
Include your hal module in PRODUCT_PACKAGES to be part of system.img
device/symbol/anish/
Step 10:
device/symbol/anish/
Step 10:
Call your manager from packages/apps/Settings/SettingsActivity.java
Comments
Post a Comment