转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119152933
本文出自【赵彦军的博客】

文章目录

  • java数组和jni数组对应关系
  • jobjectArray 实战
    • 获取数组长度
    • 获取数组第一个元素
  • jintArray 实战
    • 获取第一个元素

java数组和jni数组对应关系

kotlin jni
IntArray jintArray
DoubleArray jdoubleArray
LongArray jlongArray
CharArray jcharArray
ShortArray jshortArray
Array jobjectArray
  //kotlinexternal fun arrayInt(array: IntArray): Stringexternal fun arrayDouble(array: DoubleArray): Stringexternal fun arrayLong(array: LongArray): Stringexternal fun arrayChar(array: CharArray): Stringexternal fun arrayShort(array: ShortArray): Stringexternal fun arrayString(array: Array<String>): String
//jni
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_arrayInt(JNIEnv *env, jobject thiz, jintArray array) {// TODO: implement arrayInt()
}extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_arrayDouble(JNIEnv *env, jobject thiz,jdoubleArray array) {// TODO: implement arrayDouble()
}extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_arrayLong(JNIEnv *env, jobject thiz, jlongArray array) {// TODO: implement arrayLong()
}extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_arrayChar(JNIEnv *env, jobject thiz, jcharArray array) {// TODO: implement arrayChar()
}extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_arrayShort(JNIEnv *env, jobject thiz,jshortArray array) {// TODO: implement arrayShort()
}extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_arrayString(JNIEnv *env, jobject thiz,jobjectArray array) {// TODO: implement arrayString()
}

jobjectArray 实战

获取数组长度

class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root)val array = arrayOf("first", "two")binding.sampleText.text = "长度为:" + arrayLength(array)}/*** A native method that is implemented by the 'native-lib' native library,* which is packaged with this application.*/external fun arrayLength(array: Array<String>): Intcompanion object {// Used to load the 'native-lib' library on application startup.init {System.loadLibrary("native-lib")}}
}

native-lib.cpp

extern "C"
JNIEXPORT jint JNICALL
Java_com_example_myapplication_MainActivity_arrayLength(JNIEnv *env, jobject thiz,jobjectArray array) {//获取数组长度int length = env->GetArrayLength(array);return length;
}

获取数组第一个元素

lass MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root)val array = arrayOf("first", "two")binding.sampleText.text = "第一个元素:" + arrayFirst(array)}/*** A native method that is implemented by the 'native-lib' native library,* which is packaged with this application.*/external fun arrayFirst(array: Array<String>): Stringcompanion object {// Used to load the 'native-lib' library on application startup.init {System.loadLibrary("native-lib")}}
}

native-lib.cpp

extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_arrayFirst(JNIEnv *env, jobject thiz,jobjectArray array) {//获取array第一个元素jobject first = env->GetObjectArrayElement(array, 0);//把jobject强转成jstringreturn static_cast<jstring>(first);
}

jintArray 实战

获取第一个元素

class MainActivity : AppCompatActivity() {private lateinit var binding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding = ActivityMainBinding.inflate(layoutInflater)setContentView(binding.root)val array = intArrayOf(1, 2, 3)binding.sampleText.text = "第一个元素:" + arrayInt(array)}/*** A native method that is implemented by the 'native-lib' native library,* which is packaged with this application.*/external fun arrayInt(array: IntArray): Intcompanion object {// Used to load the 'native-lib' library on application startup.init {System.loadLibrary("native-lib")}}
}

native-lib.cpp


extern "C"
JNIEXPORT jint JNICALL
Java_com_example_myapplication_MainActivity_arrayInt(JNIEnv *env, jobject thiz, jintArray array) {jint *result = env->GetIntArrayElements(array, JNI_FALSE);//获取第一个元素return result[0];
}

Android NDK学习笔记2:数组相关推荐

  1. Android NDK学习笔记1:基础

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119005718 本文出自[赵彦军的博客] 文章目录 (一)什么是Android N ...

  2. Android NDK学习笔记(转)

    前言 Android系统中的应用程序都是用Java开发的.Android NDK使我们能够在android上使用C/C++开发的原生代码.有两个理由使用NDK: 一是合理的重用现有的代码:二是在程序中 ...

  3. Android NDK学习笔记3:JNI访问Java属性、方法

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119209444 本文出自[赵彦军的博客] 文章目录 Java 类型和JNI符号对比 ...

  4. Android NDK学习笔记6:异常处理

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119547007 本文出自[赵彦军的博客] 文章目录 JNI捕获异常 JNI抛出异常 ...

  5. Android NDK学习笔记5:引用类型管理

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119545225 本文出自[赵彦军的博客] 文章目录 局部引用 全局引用 弱引用 总 ...

  6. Android NDK学习笔记4:JNI访问Java构造函数

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119348263 本文出自[赵彦军的博客] 文章目录 方式一:NewObject 方 ...

  7. Android 开发学习笔记:七大知识点板块汇总

    前言 我从事 Android 开发行业也有些年头,工作期间也接触过很多 Android 开发者, 因此也非常清楚 程序员最大的限制并非年龄而是实力: 但大多数初中级Android工程师,想要提升技能, ...

  8. NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM(方法签名,CallXXXMethod)

    NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM 题目有点复杂,不过确实就是那么回事.这章想记录的内容比较多,先列出来: native static 与 nat ...

  9. NDK学习笔记:FFmpeg音视频同步3(你追我赶,升级ffmpeg/libyuv支持neon)

    NDK学习笔记:FFmpeg音视频同步3 本篇内容说多不多,但如果要说得明明白白的,可能就有点难度了.所以我决定把我的调试过程日志都呈现出来,方便大家理解.继上一篇文末,我们学习到了什么是DTS/PT ...

最新文章

  1. 转载 - 10个基于jQuery实现的漂亮网站赏析
  2. openJDK与JDK的区别
  3. 在Ubuntu 14.04中使SublimeText 3支持中文输入法
  4. The disk contains an unclean file system\
  5. mysql专门导入程序_从MySQL导入导出大量数据的程序实现方法
  6. Oracle 跨库 查询 复制表数据 分布式查询
  7. android面试详解
  8. webpack devserver配置_在webpack中使用babel
  9. asp.net 页面跳转的方法
  10. STC 32位8051单片机开发实例教程 二 I/O工作模式及其配置
  11. 假设检验的基本原理和T检验
  12. Android 应用换肤功能(白天黑夜主题切换)
  13. c语言创建二叉树从小到大_用C语言编写二叉树的建立与遍历
  14. 创建Docker镜像
  15. 模拟电路50(开关电容滤波器)
  16. php编写古诗,古诗写作方法集锦
  17. node.js 安装,详细步骤教程
  18. EasyExcel基础使用教程
  19. 中小网站如何使用谷歌Adsence国际化优势赚钱?
  20. CentOS 6.8 安装TigerVNC 实现 Linux 远程桌面并安装火狐浏览器

热门文章

  1. mac pdf去水印_今天才知道,Word、PDF文档去水印这么简单!一键水印说拜拜
  2. catia的vh轴怎么显示_Origin入门教程(三):Origin中曲线怎么平移?
  3. java 今天 昨天_js获取当前时间(昨天、今天、明天)
  4. php 单元测试 麻烦,php – 正确的单元测试
  5. 用计算机做科学计算是绝对精确的吗,科学计算与数学建模 - osc_3gfjojb2的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. 依赖注入底层反射原理_Spring中反射与反射的原理(转载)
  7. centos7无法使用ifconfig且无法上网
  8. Transformer变体层出不穷,它们都长什么样?
  9. 岗位推荐 | 阿里巴巴达摩院招聘自然语言处理、机器翻译算法专家
  10. 三味Capsule:矩阵Capsule与EM路由