1. AIDL 을 이용한
HelloJavaService service_interface, service_proxy, service_stub class 생성
2. HelloJavaService
3. HelloJavaManager 구현
====================================================================================
1. interface, proxy, stub 생성을 위한 aidl 파일
/frameworks/base/core/java/android/app/IHelloJava.aidl
package android.app;
interface IHelloJava {
printHello();
}
2. 새로 만든 aidl 이 같이 compile 되도록 추가
/framework/base/Android.mk
LOCAL_SRC_FILES += \
.... \
core/java/android/app/IHelloJava.aidl \
.... \
3. 서비스 구현
/framework/base/services/java/com/android/server/HelloJavaService.java
package com.android.server;
import android.os.RemoteException;
import android.content.Context;
import android.util.Log;
import android.app.HelloJavaManager;
import android.app.IHelloJava;
public class HelloJavaService extends IHelloJava.Stub {
Context mContext;
public HelloJavaService(Context context) {
mContext = context;
}
public void printHello() throws RemoteException {
Log.i("HelloJavaService", "Hello, Java Service!");
}
}
4. SystemServer 실행 루틴에 서비스 등록코드 추가
/framework/base/services/java/com/android/server/SystemServer.java
HelloJavaService helloJava = new HelloJavaService(context);
ServiceManager.addService(Context.HELLOJAVA_SERVICE, helloJava);
5. 서비스 이름 문자 상수열 등록
/frameworks/base/core/java/android/content/Context.java
public static final String HELLOJAVA_SERVICE = "hellojava";
6. 서비스를 어플리케이션에서 사용할 수 있도록 래퍼 클래스 구현
/frameworks/base/core/java/android/app/HelloJavaManager.java
package android.app;
import android.os.RemoteException;
public class HelloJavaManager
{
private final IHelloJava mService;
HelloJavaManager(IHelloJava service) {
mService = service;
}
public void printHello() {
mService.printHello();
}
}
7. 컨텍스트에 시스템서비스 획득 코드 추가
/frameworks/base/core/java/android/app/ApplicationContext.java
class ApplicationContext extends Context {
...
private static HelloJavaManager sHelloJavaManager;
...
public Object getSystemService(String name) {
...
} else if (HELLOJAVA_SERVICE.equals(name)) {
return getHelloJavaManager();
}
...
}
private HelloJavaManager getHelloJavaManager() {
synchronized (sSync) {
if (sHelloJavaManager == null) {
IBinder b = ServiceManager.getService(HELLOJAVA_SERVICE);
IHelloJava service = IHelloJava.Stub.asInterface(b);
sHelloJavaManager = new HelloJavaManager(service);
}
}
return sHelloJavaManager;
}
8. HelloJavaService 사용
HelloJavaManager hello =
(HelloJavaManager)getSystemService(Context.HELLOJAVA_SERVICE);