9月 062019
一、环境
Android Studio 3.4.2
c++编译器:cmake
本文从一个不包含c++支持的项目开始添加ndk的开发
二、修改build.gradle
在app/build.gradle中的android节点中增加externalNativeBuild节点,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
apply plugin: 'com.android.application' android { compileSdkVersion 28 buildToolsVersion "29.0.1" defaultConfig { //... } buildTypes { //.... } externalNativeBuild { cmake { path "CMakeLists.txt" } } } dependencies { //.... } |
我们指定cmake的配置文件为CMakeLists.txt,其位置应该在app/CMakeLists.txt
二、创建CMakeLists.txt
创建文件app/CMakeLists.txt
三、新建一个java类用于调用c++的函数
因为jni的函数声明必须和具体的类名关联,我们新建一个CUtils类来处理,新建一个CUtils.java
(Android默认的例子中都是放在MainActivity中,所以你看到的c中的函数名都是类似这样的Java_com_xxx_xx_MainActivity_func这样的)
假设我们要测试一个实现求和的jni函数,名字叫getSum,先在CUtils.java中定义对native中的引用,CUtils.java代码如下:
1 2 3 4 5 6 7 8 9 |
package com.zht.car.ndktestapp; public class CUtils { static { System.loadLibrary("ndktest"); } public static native int getSum(int x, int y); } |
四、创建c++文件
选择菜单File->New->C/C++ Source File,输入名字test
1 2 3 4 5 6 7 8 9 10 11 |
#include "jni.h" extern "C"{ JNIEXPORT jint JNICALL Java_com_zht_car_ndktestapp_CUtils_getSum(JNIEnv *env, jobject /* this */, jint x, jint y){ return x + y; } } |
五、编辑CMakeLists.txt
1 2 3 4 5 |
add_library ( ndktest SHARED test.cpp ) |
Sorry, the comment form is closed at this time.