生活随笔
收集整理的這篇文章主要介紹了
Android的NDK开发(4)————JNI数据结构之JNINativeMethod
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、JNINativeMethod 結(jié)構(gòu)體的官方定義
[cpp] view plaincopy print?
typedef?struct?{????const?char*?name;??const?char*?signature;??void*?fnPtr;??}?JNINativeMethod;?? 第一個變量name是Java中函數(shù)的名字。
第二個變量signature,用字符串是描述了Java中函數(shù)的參數(shù)和返回值
第三個變量fnPtr是函數(shù)指針,指向native函數(shù)。前面都要接 (void *)
第一個變量與第三個變量是對應(yīng)的,一個是java層方法名,對應(yīng)著第三個參數(shù)的native方法名字
更多內(nèi)容請查看之前博文:http://blog.csdn.NET/conowen/article/details/7521340
示例:
[cpp] view plaincopy print?
static?JNINativeMethod?gMethods[]?=?{????????{"setDataSource",???????"(Ljava/lang/String;)V",????????????(void?*)com_media_ffmpeg_FFMpegPlayer_setDataSource},????????{"_setVideoSurface",????"(Landroid/view/Surface;)V",????????(void?*)com_media_ffmpeg_FFMpegPlayer_setVideoSurface},????????{"prepare",?????????????"()V",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_prepare},????????{"_start",??????????????"()V",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_start},????????{"_stop",???????????????"()V",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_stop},????????{"getVideoWidth",???????"()I",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_getVideoWidth},????????{"getVideoHeight",??????"()I",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_getVideoHeight},????????{"seekTo",??????????????"(I)V",?????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_seekTo},????????{"_pause",??????????????"()V",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_pause},????????{"isPlaying",???????????"()Z",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_isPlaying},????????{"getCurrentPosition",??"()I",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_getCurrentPosition},????????{"getDuration",?????????"()I",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_getDuration},????????{"_release",????????????"()V",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_release},????????{"_reset",??????????????"()V",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_reset},????????{"setAudioStreamType",??"(I)V",?????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_setAudioStreamType},????????{"native_init",?????????"()V",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_native_init},????????{"native_setup",????????"(Ljava/lang/Object;)V",????????????(void?*)com_media_ffmpeg_FFMpegPlayer_native_setup},????????{"native_finalize",?????"()V",??????????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_native_finalize},????????{"native_suspend_resume",?"(Z)I",???????????????????????????(void?*)com_media_ffmpeg_FFMpegPlayer_native_suspend_resume},????};????????
主要是第二個參數(shù)比較復(fù)雜:
括號里面表示參數(shù)的類型,括號后面表示返回值。
"()" 中的字符表示參數(shù),后面的則代表返回值。例如"()V" 就表示void Fun();
"(II)V" 表示 void Fun(int a, int b);
這些字符與函數(shù)的參數(shù)類型的映射表如下:
2、第二個參數(shù)之基本數(shù)據(jù)類型
3、第二個參數(shù)之對象類型與數(shù)組類型
對象類型:以"L"開頭,以";"結(jié)尾,中間是用"/" 隔開。如上表第1個
數(shù)組類型:以"["開始。如上表第2個(n維數(shù)組的話,則是前面多少個"["而已,如"[[[D"表示“double[][][]”)
對象數(shù)組類型:上述兩者結(jié)合,如上表第3個
3.1、對象類型與數(shù)組類型的舉例:
總結(jié)
以上是生活随笔為你收集整理的Android的NDK开发(4)————JNI数据结构之JNINativeMethod的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。