生活随笔
收集整理的這篇文章主要介紹了
Android的NDK开发(4)————JNI数据结构之JNINativeMethod
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、JNINativeMethod 結(jié)構(gòu)體的官方定義
[cpp] view plaincopy print?
typedef?struct?{????const?char*?name;??const?char*?signature;??void*?fnPtr;??}?JNINativeMethod;?? 第一個(gè)變量name是Java中函數(shù)的名字。
第二個(gè)變量signature,用字符串是描述了Java中函數(shù)的參數(shù)和返回值
第三個(gè)變量fnPtr是函數(shù)指針,指向native函數(shù)。前面都要接 (void *)
第一個(gè)變量與第三個(gè)變量是對(duì)應(yīng)的,一個(gè)是java層方法名,對(duì)應(yīng)著第三個(gè)參數(shù)的native方法名字
更多內(nèi)容請(qǐng)查看之前博文: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},????};????????
主要是第二個(gè)參數(shù)比較復(fù)雜:
括號(hào)里面表示參數(shù)的類(lèi)型,括號(hào)后面表示返回值。
"()" 中的字符表示參數(shù),后面的則代表返回值。例如"()V" 就表示void Fun();
"(II)V" 表示 void Fun(int a, int b);
這些字符與函數(shù)的參數(shù)類(lèi)型的映射表如下:
2、第二個(gè)參數(shù)之基本數(shù)據(jù)類(lèi)型
3、第二個(gè)參數(shù)之對(duì)象類(lèi)型與數(shù)組類(lèi)型
對(duì)象類(lèi)型:以"L"開(kāi)頭,以";"結(jié)尾,中間是用"/" 隔開(kāi)。如上表第1個(gè)
數(shù)組類(lèi)型:以"["開(kāi)始。如上表第2個(gè)(n維數(shù)組的話,則是前面多少個(gè)"["而已,如"[[[D"表示“double[][][]”)
對(duì)象數(shù)組類(lèi)型:上述兩者結(jié)合,如上表第3個(gè)
3.1、對(duì)象類(lèi)型與數(shù)組類(lèi)型的舉例:
總結(jié)
以上是生活随笔為你收集整理的Android的NDK开发(4)————JNI数据结构之JNINativeMethod的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。