开发学院手机开发Android 开发 在Android中嵌入C语言程序 阅读

在Android中嵌入C语言程序

 2010-08-23 01:33:00 来源:WEB开发网   
核心提示:,例如,在Android中嵌入C语言程序(2),在Android的/system/lib/libmedia_jni.so档案里,就提供了JNI_OnLoad()函数,则会呼叫JNI_OnUnload()函数来进行善后清除动作,当VM呼叫JNI_OnLoad()或JNI_Unload()函数时,其程式码片段为://#de

例如,在Android的/system/lib/libmedia_jni.so档案里,就提供了JNI_OnLoad()函数,其程式码片段为:

//#define LOG_NDEBUG 0

#define LOG_TAG "MediaPlayer-JNI"

jint JNI_OnLoad(JavaVM* vm, void* reserved)

{

JNIEnv* env = NULL;

jint result = -1;

if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {

LOGE("ERROR: GetEnv failed ");

goto bail;

}

assert(env != NULL);

if (register_android_media_MediaPlayer(env) < 0) {

LOGE("ERROR: MediaPlayer native registration failed ");

goto bail;

}

if (register_android_media_MediaRecorder(env) < 0) {

LOGE("ERROR: MediaRecorder native registration failed ");

goto bail;

}

if (register_android_media_MediaScanner(env) < 0) {

LOGE("ERROR: MediaScanner native registration failed ");

goto bail;

}

if (register_android_media_MediaMetadataRetriever(env) < 0) {

LOGE("ERROR: MediaMetadataRetriever native registration failed ");

goto bail;

}

/* success -- return valid version number */

result = JNI_VERSION_1_4;

bail:

return result;

}

此函数回传JNI_VERSION_1_4值给VM,于是VM知道了其所使用的JNI版本了。此外,它也做了一些初期的动作(可呼叫任何本地函数),例如指令:

if (register_android_media_MediaPlayer(env) < 0) {

LOGE("ERROR: MediaPlayer native registration failed ");

goto bail;

}

就将此组件提供的各个本地函数(Native Function)登记到VM里,以便能加快后续呼叫本地函数的效率。

JNI_OnUnload() 函数与JNI_OnLoad()相对应的。在载入C组件时会立即呼叫JNI_OnLoad()来进行组件内的初期动作;而当 VM释放该C组件时,则会呼叫JNI_OnUnload()函数来进行善后清除动作。当VM呼叫JNI_OnLoad()或JNI_Unload()函数时,都会将VM的指针(Pointer)传递给它们,其参数如下:

上一页  1 2 3 4 5 6 7  下一页

Tags:Android 嵌入程序

编辑录入:coldstar [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接