プロセス間通信binderメカニズム-独自のシステムサービスを追加

1378 ワード

1.システムレベルのサービス(ServiceManagerが管理するシステムサービス)の方法appにアクセスさせたい
  • /h2a_0529$  cd frameworks/base/core/java/android/os
  • h2a_0529/frameworks/base/core/java/android/os$ vim IHelloService.aidl
  • package android.os;
    
    interface IHelloService {
        void setVal(int val);
        int getVal();
    }
    
  • frameworks/baseディレクトリに戻り、Android.mkファイルを開き、LOCAL_を変更します.SRC_FILES変数の値、core/java/android/os/IHelloService.aidl/
  • を増加
  • h2a_0529$ mmm frameworks/base/ コンパイル2のaidlはstubとproxy
  • を生成する
  • frameworks/base/services/java/com/android/serverディレクトリにアクセスし、HelloService.javaを追加      
  • package  com.android.server;
    import android.content.Context;
    import android.os.IHelloService;
    import android.util.Log;
    public class HelloService extends IHelloService.Stub{
    
     public void setVal(int val){
          Log.d("yzy","setVal......"+val);
     }
     public int getVal(){
          return 0;
     }
    }
    
          7. 同じディレクトリのSystemServer.javaファイルを変更し、Server Thread::run関数にHelloServiceをロードするコードを追加します.
    ServiceManager.addService("hello", new HelloService());
    

    8.呼び出し 
    IHelloService  hs= IHelloService.Stub.asInterface(ServiceManager.getService("hello"));   
    hs.setVal(123);