1、JNINativeMethod 结构体的官方定义

[cpp] view plaincopy print?
  1. typedef struct {
  2. const char* name;
  3. const char* signature;
  4. void* fnPtr;
  5. } JNINativeMethod;

第一个变量name是Java中函数的名字。

第二个变量signature,用字符串是描述了Java中函数的参数和返回值

第三个变量fnPtr是函数指针,指向native函数。前面都要接 (void *)

第一个变量与第三个变量是对应的,一个是java层方法名,对应着第三个参数的native方法名字

更多内容请查看之前博文:http://blog.csdn.NET/conowen/article/details/7521340

示例:

[cpp] view plaincopy print?
  1. /*
  2. * 由于gMethods[]是一个<名称,函数指针>对照表,在程序执行时,
  3. * 可多次调用registerNativeMethods()函数来更换本地函数的指针,
  4. * 从而达到弹性调用本地函数的目的。
  5. *具体可以参看http://blog.csdn.net/conowen/article/details/7521340
  6. */
  7. static JNINativeMethod gMethods[] = {
  8. {"setDataSource",       "(Ljava/lang/String;)V",            (void *)com_media_ffmpeg_FFMpegPlayer_setDataSource},
  9. {"_setVideoSurface",    "(Landroid/view/Surface;)V",        (void *)com_media_ffmpeg_FFMpegPlayer_setVideoSurface},
  10. {"prepare",             "()V",                              (void *)com_media_ffmpeg_FFMpegPlayer_prepare},
  11. {"_start",              "()V",                              (void *)com_media_ffmpeg_FFMpegPlayer_start},
  12. {"_stop",               "()V",                              (void *)com_media_ffmpeg_FFMpegPlayer_stop},
  13. {"getVideoWidth",       "()I",                              (void *)com_media_ffmpeg_FFMpegPlayer_getVideoWidth},
  14. {"getVideoHeight",      "()I",                              (void *)com_media_ffmpeg_FFMpegPlayer_getVideoHeight},
  15. {"seekTo",              "(I)V",                             (void *)com_media_ffmpeg_FFMpegPlayer_seekTo},
  16. {"_pause",              "()V",                              (void *)com_media_ffmpeg_FFMpegPlayer_pause},
  17. {"isPlaying",           "()Z",                              (void *)com_media_ffmpeg_FFMpegPlayer_isPlaying},
  18. {"getCurrentPosition",  "()I",                              (void *)com_media_ffmpeg_FFMpegPlayer_getCurrentPosition},
  19. {"getDuration",         "()I",                              (void *)com_media_ffmpeg_FFMpegPlayer_getDuration},
  20. {"_release",            "()V",                              (void *)com_media_ffmpeg_FFMpegPlayer_release},
  21. {"_reset",              "()V",                              (void *)com_media_ffmpeg_FFMpegPlayer_reset},
  22. {"setAudioStreamType",  "(I)V",                             (void *)com_media_ffmpeg_FFMpegPlayer_setAudioStreamType},
  23. {"native_init",         "()V",                              (void *)com_media_ffmpeg_FFMpegPlayer_native_init},
  24. {"native_setup",        "(Ljava/lang/Object;)V",            (void *)com_media_ffmpeg_FFMpegPlayer_native_setup},
  25. {"native_finalize",     "()V",                              (void *)com_media_ffmpeg_FFMpegPlayer_native_finalize},
  26. {"native_suspend_resume", "(Z)I",                           (void *)com_media_ffmpeg_FFMpegPlayer_native_suspend_resume},
  27. };

主要是第二个参数比较复杂:

括号里面表示参数的类型,括号后面表示返回值。

"()" 中的字符表示参数,后面的则代表返回值。例如"()V" 就表示void Fun();

"(II)V" 表示 void Fun(int a, int b);

这些字符与函数的参数类型的映射表如下:

2、第二个参数之基本数据类型

3、第二个参数之对象类型与数组类型

对象类型:以"L"开头,以";"结尾,中间是用"/" 隔开。如上表第1个

数组类型:以"["开始。如上表第2个(n维数组的话,则是前面多少个"["而已,如"[[[D"表示“double[][][]”)

对象数组类型:上述两者结合,如上表第3个

3.1、对象类型与数组类型的举例:

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

  1. Z型射精管理Android(4),Android的NDK开发(4)————JNI数据结构之JNINativeMethod

    /******************************************************************************************** * auth ...

  2. Android的NDK开发(3)————JNI数据类型的详解

    原文:http://blog.csdn.net/conowen/article/details/7523145 在Java中有两类数据类型:primitive types,如,int, float, ...

  3. JNI编程基础(二)——Android Studio NDK开发

    由于笔者目前的工作是Android开发,所以在JNI开发系列博客中穿插一篇AndroidStudio NDK开发介绍. 随着Android Studio 2.2的推出,Android Studio的N ...

  4. Android之NDK开发

    一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语 ...

  5. Android之NDK开发学习总结

    Android之NDK开发 http://www.cnblogs.com/devinzhang/archive/2012/02/29/2373729.html 一.NDK产生的背景 Android平台 ...

  6. delphi android jni,Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用...

    一.Android平台编程方式: 1.基于Android SDK进行开发的第三方应用都必须使用Java语言(Android的SDK基于Java实现) 2.自从ndk r5发布以后,已经允许完全用C/C ...

  7. Android下NDK开发环境搭建

    Android下NDK开发环境搭建 1.     AndroidNDK安装与配置 1.1  NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...

  8. 【Android NDK 开发】JNI 方法解析 ( JNIEnv *env 参数 )

    文章目录 一. JNI 方法解析 二. JNIEnv *env 参数解析 三. C 语言 环境中 JNIEnv *env 参数解析 四. C ++ 环境中 JNIEnv *env 参数解析 总结 : ...

  9. 安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】

    Android Studio开发JNI示例:https://blog.csdn.net/wzhseu/article/details/79683045 JNI_动态注册_静态注册.zip : http ...

最新文章

  1. 直播 | ACL 2021论文解读:提升预训练语言模型实体与关系理解的统一框架
  2. AIRec个性化推荐召回模型调参实战
  3. 中文-自然语言处理-开源工具-流行度调查+句法依存树可视化调研
  4. ie6 offsetWidth/offsetHeight无效
  5. java 普通类request_[Java教程]spring在普通类中获取session和request
  6. TCP Traffic Analyzer
  7. Bandicam视频录制技巧总结+小丸工具箱压缩视频解决视频体积问题
  8. 评测网站的十个指标!
  9. ddwrt开启USB硬盘
  10. mac 自带连接ftp服务器,Mac自带FTP工具使用
  11. SQL语法整理(五)-视图
  12. MessageDigest详解
  13. 工程上为什么常用3dB带宽?而不是1dB或者2dB
  14. 关于如何用centos7和阿里云服务器去创建一个网站
  15. chm转换html,chm无法用浏览器打开,Windows下如何把chm转换为html?
  16. python实现向qq邮箱发送邮件
  17. 钉钉群机器人关键词自动回复_wetool自动接受新好友wetool pc版-客服
  18. 类型转换——int转换成char(截短)
  19. Oracle EBS子库存转移,项目转移whole LPN
  20. 使用order by 按照指定顺序排序或自定义顺序排序

热门文章

  1. python中访问命令行参数_如何在Python中访问命令行参数?
  2. java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...
  3. SQL server 中SQL语句实战操作
  4. NMS 非极大值抑制
  5. 【年终总结】2019年有三AI知识星球做了什么,明年又会做什么
  6. 全球及中国钒(V)蒸发材料行业发展动态分析及未来前景预测报告2021年版
  7. 中文代码示例之5分钟入门TypeScript
  8. 使用wrk进行性能测试
  9. 2017中国大学生程序设计竞赛 - 网络选拔赛 [1005 - CaoHaha's staff] 贪心
  10. java 基础学习——基本语法(三)