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”;
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.
Step3:
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
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
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));
+ }});
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 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:
Call your manager from packages/apps/Settings/SettingsActivity.java

Comments

Popular posts from this blog

Wrong java version. 1.8 or 9 is required