JNI:Java Native Interface;
系统服务的路径一般在:
frameworks\base\services\core\java\com\android\server
服务对应的AIDL文件可以放在:
frameworks\base\core\java\android\os
服务对应的JNI则在:
frameworks\base\services\core\jni
frameworks\base\services\core\jni\Android.bp负责将对应的cpp文件编译到系统;
frameworks\base\services\core\jni\onload.cpp负责调用JNI文件中的jniRegisterNativeMethods方法;
举个震动服务的例子;(本想用比较熟悉的指纹做例子,可惜指纹是直接在JAVA层调用HIDL的)
onload.cpp里面大概是这样的:
#include <nativehelper/JNIHelp.h>
#include "jni.h"
#include "utils/Log.h"
#include "utils/misc.h"
#include "BroadcastRadio/BroadcastRadioService.h"
#include "BroadcastRadio/Tuner.h"
namespace android {
//...
int register_android_server_VibratorService(JNIEnv* env);
//...
}
using names