QingYi. 发表于 2021-12-15 18:59

通过JNI访问Java数组

首先我们在Java里面创建一个数组


如果我们正常在Java想调用这个方法,那么代码是这样的
Test t1 = new Test();
int []arr = t1.getArr();

那么在native里面我们首先要找到test这个方法,然后实例化一个对象,然后再调用getArr这个方法

先把test搞出来先


后面我们就要调用对象的方法


按照常理返回的是一个arr数组,我们来接一下.


然后它报错,我们强制转换一下.
jintArray myArr = static_cast<jintArray>(env->CallObjectMethod(testObj,getArrId));

我们现在要得到它里面的元素进行访问,所以调用GetIntArrayElements这个方法,返回值是jint类型的地址



第第二个值我们填null,在ndk里面就是nullptr
jint *arrays = env->GetIntArrayElements(myArr, nullptr);

代码书写完成.


运行一下,结果也是正确的得到了.


如果是以参数传进来的就更简单了


结果也是正确的


QingYi. 发表于 2021-12-16 08:52

莫问刀 发表于 2021-12-15 23:41
如果方法的入参是java的自定义类型,不是常用类型这个怎么做呢,还有就是,大佬最终的教程是想带我们干什么 ...

就是object啊,Java里面万物皆object.
这能做啥功能,这周就完结ndk的学习了.
学新的去{:1_918:}

debug_cat 发表于 2021-12-17 11:58

QingYi. 发表于 2021-12-16 08:52
就是object啊,Java里面万物皆object.
这能做啥功能,这周就完结ndk的学习了.
学新的去

{:1_907:}啊这,我以为要做什么牛逼黑科技

season123 发表于 2021-12-15 19:23

不错不错,还可以继续改善

Aa1140141768 发表于 2021-12-15 20:52

学习啦啊.,.{:1_905:}

赵晓帅i 发表于 2021-12-15 22:32


学习啦啊.,.

debug_cat 发表于 2021-12-15 23:41

如果方法的入参是java的自定义类型,不是常用类型这个怎么做呢,还有就是,大佬最终的教程是想带我们干什么牛逼哄哄的功能呢:lol

JerryLia 发表于 2021-12-16 07:36

感谢分享,下载看看!

jhmarryme 发表于 2021-12-16 08:56

学习了。。

Dream_Peng 发表于 2021-12-16 09:27

大佬搞得好高级的哦

小不点G 发表于 2021-12-16 10:09

study . exe
页: [1] 2 3
查看完整版本: 通过JNI访问Java数组