创建Android工程
这里开始我不勾选supportC++选项,而是我想在一个非NDK工程上添加配置,使之成为NDK工程
编写Java代码
还是一个简单的例子
package com.newtrekwang.ndkpractice;
public class JNIUtils {
public static native String getStringFromC();
}
编写C/C++源码
在src/main下创建一个cpp文件夹,文件夹名字任取,不过IDE默认cpp存放c/c++源码
gradle配置c/c++源文件路径
在app Module的gradle里的android域添加sourceSets域,像这样
sourceSets{
main {
jni.srcDirs=["src/main/cpp"] //指定c/c++源码位置
}
}
gradle配置CMakeLists.txt文件的位置
在app Module的gradle里的android域添加externalNativeBuild域,像这样
externalNativeBuild{
cmake{
path "src/main/cpp/CMakeLists.txt"
}
}
CMakeLists.txt内容如下
cmake_minimum_required(VERSION 3.4.1)
add_library(hello
SHARED
hello.c)
然后gradle同步一下,接着就可以在JNIUtils的getStringFromC那儿,Alt+Enter直接跳到hello.c文件叫你编写C层的getStringFromC实现。
然后写完hello.c
#include <jni.h>
JNIEXPORT jstring JNICALL
Java_com_newtrekwang_ndkpractice_JNIUtils_getStringFromC(JNIEnv *env, jclass type) {
char* result="Hello from C!";
return (*env)->NewStringUTF(env, result);
}
然后没什么特殊的配置的话,就可以编译项目生成libhello.so了
具体ExternalNativeBuild域的配置可以查ExternalNativeBuild
最后,编译出的so文件会在build目录下