Android快速入门(二)、JNI

JNI

目录:

frameworks/base/services/jni/com_android_server_FMService.cpp
因为要调用hardware中的函数,因此需要添加头文件:

#include <hardware/hw_tea5767.h>  

注册JNI方法

int register_android_server_FMService(JNIEnv *env) {  
    return jniRegisterNativeMethods(env, "com/android/server/FMService", method_table, NELEM(method_table));  
}  

JNI方法表

    /*JNI方法表*/  
static const JNINativeMethod method_table[] = {  
    {"init_native", "()Z", (void*)tea5767_init},
    {"getADC_native", "()I", (void*)tea5767_getADC},
    {"getFreq_native", "()I", (void*)tea5767_getFreq},
    {"setFreq_native", "(I)V", (void*)tea5767_setFreq},
    {"searchNextorPreFreq_native", "(I)V", (void*)tea5767_searchNextorPreFreq},
    {"setNextorPreFreq_native", "(I)V", (void*)tea5767_setNextorPreFreq},
    {"enableMute_native", "(I)V", (void*)tea5767_enableMute},
    {"getIsMute_native", "()I", (void*)tea5767_getIsMute},
    {"startAutoSearch_native", "()V", (void*)tea5767_autoSearch},
};  

剩下一步是访问硬件的接口实现:

/在硬件抽象层中定义的硬件访问结构体,参考<hardware/tea5767.h>/

struct tea5767_device_t* tea5767_device = NULL;  
static void tea5767_setFreq(JNIEnv* env, jobject clazz, jint freq){

    if(!tea5767_device){
        LOGE("FM jni is not open..");
        return ;
    }

    tea5767_device->setFreq(tea5767_device,freq);
    LOGI("set fm freq = %d",freq);

    return ;
}

frameworks/base/services/jni/onload.cpp
LOCAL_SRC_FILES:= \下添加

    com_android_server_FMService.cpp \

frameworks/base/services/jni/Android.mk
namespace android中添加

int register_android_server_FMService(JNIEnv *env);

extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)下添加

register_android_server_FMService(env);

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/81542789