前一篇简单介绍了Android Studio环境下NDK的配置,本篇将通过一个简单的例子,介绍Android Studio中C/C++代码的编写与编译。

下面我们通过一个例子,在native层实现字符串的拼接。

一、添加native方法

首先我们新建一个类,例如取名叫"JniUtil",然后新建一个native方法,用来实现字符串拼接,如下图:

792b0ee81ad73dff5c5cc01f4e798356.png

二、生成头文件

1. 生成class文件

Build一下工程,Build成功后,会在app\build\intermediates\classes\debug目录下会自动生成所有类的class文件,如下图:

9b539308c3f8fcf451af4b7cc533a576.png

2. 在Terminal中切换到debug目录

在Android Studio上找到Terminal标签页,然后通过命令切换到app\build\intermediates\classes\debug目录。

0bd5fe7b724e28cbb918492dcf668bc7.png

3. 生成头文件

通过"javah -jni"命令,生成头文件,我们要生成com\samonxu\jnitest目录下的JniUtil.class文件对应的头文件,命令如下图所示:

502b4c6173798b7e1b88c078ba4fea43.png我们就会发现,debug目录下多了一个.h文件。

1745f2ae1d933c76ae0e75ca2bc64fa5.png

若查看这个.h文件的内容,你会发现我们在JniUtil类中定义的native方法对应的C/C++函数,在头文件中已经声明好了。

f07d5607c86df6d906a641232d6f913b.png

然后我们将这个.h文件复制到我们的jni目录下。

6b425292b71d6685945e2bdcb08d28bb.png

记得在Terminal中退出到主目录,否则Rebuild工程的时候,无法执行clean操作。

206bc682c02720f7f9f2d4390b5ef703.png

三、实现头文件中声明的函数

在jni目录下,新建一个.c文件,例如取名叫"jnitest.c";

34520ea50b3eaa6fdef0ddab5a73947b.png

编写代码,实现函数Java_com_samonxu_jnitest_JniUtil_append()

5179bef762ef38b679f0e0bb80a08e5e.png

四、调用native方法

首先在JniUtil类中添加一段static的代码,加载我们的.so库。

d2290e30cab4d194b9b418cb24d51fc4.png

然后创建个Activity,调用append()方法,将"abc"和"123"的拼接结果显示到一个TextView上。

90dd2167a3e53e9b72622958e5b3278c.png

五、编译运行程序

编译并运行程序,结果如下图:

8938d15d3404925b11a9f2eed50607ec.png

至此,一个简单的JNI程序就完成了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐