ハードウェアアクセスサービスAIDL JNI方式
2632 ワード
AIDLによるハードウェアアクセスシステムサービス
AIDLはAndroidでプロセス間通信IPCを実現
Android 5ソースコードにLed制御の小さな例を追加
簡単な例LedService
新しいILedServices.aidl
ソースパスの下に置く
Androidを修正mkファイルaidlファイルに1つ追加
mmmコマンドを使用してILedServicesを生成する.java
mmmコマンドを使用する前提はandroidソースコードをコンパイルし、環境変数を設定することです.
次のコマンド設定を実行します.
. setenv
lunch開発ボードタイプの選択
成功すると
LedServicesを作成します.JAvaはILedServicesを実現する.Stubインタフェース
SystemServerを変更します.JAvaサービスマネージャの追加addService("led", (IBinder)new LedService());
実現com_android_service_LedService.cppは操作関数jniを
変更cpp
mmm frameworks/base/servicesの再コンパイル
ミラーファイルmake snodの生成
AIDLはAndroidでプロセス間通信IPCを実現
Android 5ソースコードにLed制御の小さな例を追加
簡単な例LedService
新しいILedServices.aidl
package android.os;
interface ILedService{
int ledCtl(int which,int status);
}
ソースパスの下に置く
android-5.0.2/frameworks/base/core/java/android/os/ILedService.aidl
Androidを修正mkファイルaidlファイルに1つ追加
core/java/android/os/ILedService.aidl
mmmコマンドを使用してILedServicesを生成する.java
mmmコマンドを使用する前提はandroidソースコードをコンパイルし、環境変数を設定することです.
次のコマンド設定を実行します.
. setenv
lunch開発ボードタイプの選択
成功すると
./target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/os/ILedService.java
LedServicesを作成します.JAvaはILedServicesを実現する.Stubインタフェース
package com.android.server;
import android.os.ILedService;
//./frameworks/base/services/java/com/android/server/SystemServer.java
public LedService extends ILedService.Stub{
private static final String TAG="LedService";
/* C */
public int ledCtrl(int which, int status) throws android.os.RemoteException{
return native_ledCtrl(which,status);
}
public LedService(){
native_ledOpen();
}
public static native int native_ledCtrl(int which ,int status);
public static native int native_ledOpen();
public static native void native_ledClose();
}
SystemServerを変更します.JAvaサービスマネージャの追加addService("led", (IBinder)new LedService());
実現com_android_service_LedService.cppは操作関数jniを
変更cpp
//
int register_android_server_LedService(JNIEnv* env);
//
register_android_server_LedService(env);
mmm frameworks/base/servicesの再コンパイル
ミラーファイルmake snodの生成