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

    

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


一、添加native方法

    

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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java


二、生成头文件

   

1. 生成class文件

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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_02


2. 在Terminal中切换到debug目录

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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_03


3. 生成头文件

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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_04我们就会发现,debug目录下多了一个.h文件。

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_05

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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_06

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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_07

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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_08



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


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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_09


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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_10


四、调用native方法


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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_11


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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_12

    

五、编译运行程序


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

Android Studio下的JNI开发(二):C/C++代码编写与编译_java_13


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