我正在開發一個運行在aosp上的項目。我向aosp添加了一個系統服務。我使用adb shell「服務調用」命令成功運行此服務。在創建服務時,我採用了以下方法。如何從android應用程序調用自定義aosp服務
- 加入AIDL文件
- 其中加入從AIDL
- 增補JNI文件導出一個.java文件。
創建服務後,我寫了一個基本的android應用程序。我想從這個Android應用程序調用此服務。我怎樣才能從android應用程序調用此服務。
我正在開發一個運行在aosp上的項目。我向aosp添加了一個系統服務。我使用adb shell「服務調用」命令成功運行此服務。在創建服務時,我採用了以下方法。如何從android應用程序調用自定義aosp服務
創建服務後,我寫了一個基本的android應用程序。我想從這個Android應用程序調用此服務。我怎樣才能從android應用程序調用此服務。
我設法解決如何從android應用程序系統服務調用。在編譯aosp後,framework_intermediates文件中的classes.jar被創建爲out/target/common/obj/JAVA_LIBRARIES。我添加classes.jar到我的android應用程序,我用下面的代碼。
IBinder binder = ServiceManager.getService("my_service");
IMyService myService = IMyService.Stub.asInterface(binder);
int result = myService.myFunction();
在.aidl接口定義旁邊創建服務管理器:frameworks/base/core/java/android/os/MySerManager.java
。
在frameworks/base/core/java/android/content/Context.java
搜索像VIBRATOR_SERVICE這樣的簡單服務,並將MYSER_SERIVCE添加到每個出現的位置。
特別添加:public static final String MYSER_SERVICE = "myser";
做相同的frameworks/base/core/java/android/app/SystemServiceRegistry.java
確保補充:
import android.os.MySerManager;
registerService(Context.MYSER_SERVICE, MySerManager.class,
new CachedServiceFetcher<MySerManager>() {
@Override
public MySerManager createService(ContextImpl ctx) {
return new MySerManager();
}});
此服務管理器可以在AOSP之外使用通過構建SDK:https://android.googlesource.com/platform/sdk/+/master/docs/howto_build_SDK.txt
並在AOSP中通過從上下文獲取系統服務:
MySerManager mySerManager = (MySerManager)getSystemService(Context.MYSER_SERVICE);
如果您希望能夠使用'getSystemService'從您的應用中獲得它,假設您必須修改框架/基礎中的'SystemServiceRegistry.java','Context.java'(可能還有其他一些文件)。 – Michael