日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android的NDK开发(4)————JNI数据结构之JNINativeMethod

發(fā)布時間:2025/3/20 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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?
  • /*??
  • ?*?由于gMethods[]是一個<名稱,函數(shù)指針>對照表,在程序執(zhí)行時,??
  • ?*?可多次調(diào)用registerNativeMethods()函數(shù)來更換本地函數(shù)的指針,??
  • ?*?從而達(dá)到彈性調(diào)用本地函數(shù)的目的。???
  • ?*具體可以參看http://blog.csdn.net/conowen/article/details/7521340?
  • ?*/????
  • 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)容還不錯,歡迎將生活随笔推薦給好友。