NDK-Java与native互相传递复杂对象

  • 内容
  • 评论
  • 相关

前言

在前几篇博客中分别介绍了Java与native层方法互相调用的问题,接下来本篇博客将会介绍如何在Java以及native之间传递复杂参数(对象)。

在native中返回一个复杂对象

首先我们简单的写一个Student类,实现无参构造函数以及有参构造函数。具体如下。

在Java中,我们想实例化一个对象只需要使用new即可,如Student stu = new Student();这样会调用Student的无参构造函数实例化出一个对象,那么我们想在native中实例化一个对象就只需要调用对应对象的构造方法即可。在上一篇中我介绍了native如何调用Java方法的步骤,首先获取对应的jclass对象,然后获取jmethodID,这样我们就能直接调用构造方法了。

获取jmethodID需要使用方法签名,Java构造函数的签名为<init>,返回值为void

下面这个例子为直接调用无参构造函数

下面这个例子为调用有参数的构造函数

完整代码请查看文末给出的链接。

Java中传递一个复杂对象给native

为了测试是否传递成功,我们需要让native能直接打印log到logcat中,要想实现这个功能,我们需要使用#include "android/log.h"包含日志输出的头文件。具体步骤如下。

1、让生成的so文件中包含系统的日志输出模块。

对于这一点,我们直接仿照系统的CMakeLists.txt设置一下即可。

2、包含头文件,并且定义相应的宏函数

3、输出log

CMakeLists.txt的其他配置可以查看NDK-CMake初探

为了节省便宜,对于很多基本代码进行了省略,具体的可以查看下面的Demo链接。

Demo地址:github

评论

0条评论

发表评论

电子邮件地址不会被公开。