1.构建NDK开发环境
在Android Studio目录里面点击File-> Project Structure,选择SDK Location
2.新建CPP源文件夹
将项目目录视图,切换到project视图,在main目录下,新建cpp目录
3.新建java调用类
package com.example.myapplication.Util;
public class HelloNDK {
static {
System.loadLibrary("HelloNDK");
}
//声明一个native方法
public static native String accessMethod();
}
4.新建c源程序文件
#include "jni.h"
JNIEXPORT jstring JNICALL Java_com_example_myapplication_Util_HelloNDK_accessMethod
(JNIEnv *env, jobject obj, jint a, jint b) {
return (*env)->NewStringUTF(env,"HelloWord");
}
5. 创建CMakeLists.txt
代码如下:
# 指定 CMake 使用版本
cmake_minimum_required(VERSION 3.9)
add_library(HelloNDK SHARED src/main/cpp/HelloNDK.c)
6. 配置gradle
在app/build.gradle文件下增加gradle代码
android {
...
defaultConfig {
...
externalNativeBuild{
cmake {
// Passes optional arguments to CMake.
arguments "-DANDROID_TOOLCHAIN=clang"
abiFilters 'x86_64', 'x86', 'armeabi-v7a', 'arm64-v8a'
}
}
}
...
externalNativeBuild {
// Encapsulates your CMake build configurations.
cmake {
// Provides a relative path to your CMake build script.
path "CMakeLists.txt"
}
}
}
7. 调用
在activity的oncreate中调用
# <font color=blue>6. 配置gradle</font>
可以看到日志打印
com.example.myapplication I/测试: HelloWord
8. 生成so库
首先进入目录夹
然后调用javah -jni com.example.myapplication.Util.HelloNDK
C:\Users\admin\Desktop\NDKLearn\app\src\main\java>javah -jni com.example.myapplication.Util.HelloNDK
生成以下文件
将.h文件复制到
然后在HelloNDK.c源文件里面 #include “com_example_myapplication_Util_HelloNDK.h”
#include "jni.h"
#include "com_example_myapplication_Util_HelloNDK.h"
JNIEXPORT jstring JNICALL Java_com_example_myapplication_Util_HelloNDK_accessMethod
(JNIEnv *env, jclass jclass1) {
return (*env)->NewStringUTF(env,"HelloWord");
}
在CMakeLists.txt里面修改如下
# 指定 CMake 使用版本
cmake_minimum_required(VERSION 3.10.2)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})
add_library(HelloNDK SHARED src/main/cpp/HelloNDK.c)
然后点击
生成文件夹目录如下