2017-07-28 47 views
1

我正在開發一個運行在aosp上的項目。我向aosp添加了一個系統服務。我使用adb shell「服務調用」命令成功運行此服務。在創建服務時,我採用了以下方法。如何從android應用程序調用自定義aosp服務

  1. 加入AIDL文件
  2. 其中加入從AIDL
  3. 增補JNI文件導出一個.java文件。

創建服務後,我寫了一個基本的android應用程序。我想從這個Android應用程序調用此服務。我怎樣才能從android應用程序調用此服務。

+2

如果您希望能夠使用'getSystemService'從您的應用中獲得它,假設您必須修改框架/基礎中的'SystemServiceRegistry.java','Context.java'(可能還有其他一些文件)。 – Michael

回答

1

我設法解決如何從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(); 
1

在.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); 
相關問題