创建NDK项目
第一步 , 创建支持C++的项目
其他的选项使用默认的即可 。
第二步 , 关联NDK
创建完成之后会报如下错误:
在项目配置中 , 关联NDK之后就会ok
第三步 , 编写native类及处理方法
在创建项目的时候 , 勾选了C++ support , 项目创建完成之后 , 会自动帮我们生成一个cpp/native-lib.cpp
你可以不用修改文件名 , 在新建native
方法的时候 , 会提示你创建一个C++的JNI函数 , 直接创建就会生成一个JNI函数 , 都不用使用javah
生成一个头文件 , 然后再引入头文件了 , 非常之方便 。
创建函数:
在这里 , 就不使用默认的.cpp
文件了 , 我们新建一个.c
文件 , 创建了HelloNDK.c
文件之后 , Android Studio会提示我们 , 需要在Android.mk/CMakeLists.txt
中进行声明 , 这里 , 我们使用默认的CMakeLists.txt
建构工具 (创建项目的时候自动生成)。
第四步 , build.gradle配置:
externalNativeBuild {
cmake {
cppFlags ""
// 指定只用clang编译器
// Clang是一个C语言、Objective-C、C++语言的轻量级编译器。
arguments "-DANDROID_TOOLCHAIN=clang"
// 生成.so库的目标平台
abiFilters "armeabi-v7a" , "armeabi"
}
}
// 配置CMakeLists.txt路径
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
第五步 , 修改CMakeLists.txt
add_library( # Sets the name of the library.
HelloNDK # 生成的.so库文件名称
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
# Associated headers in the same location as their source
# file are automatically included.
# 需要生成的.so库的文件路径
src/main/cpp/HelloNDK.c
)
target_link_libraries( # Specifies the target library.
# 项目链接的.so库名称
HelloNDK
# Links the target library to the log library
# included in the NDK.
${log-lib} )
第六步 , 编写
native
方法,以及C函数
/**
* Created by Zeno on 2016/9/10.
*
* NDK Demo
*/
public class HelloNDK {
public static native String sayHelloNDK() ;
static {
System.loadLibrary("HelloNDK");
}
}
#include <jni.h>
JNIEXPORT jstring JNICALLJava_com_zeno_encryptanddecrypt_ndk_HelloNDK_sayHelloNDK(JNIEnv *env, jclass thiz) {
// TODO
return (*env)->NewStringUTF(env, "this String come from C ");
}
native
方法的编写以及C函数的写法, 我们都非常熟悉了 , 这里就不再解释各自的意义了 。
第七步 , 编译
编译完成之后 ,我们可以切换到project
视图,来查看.so
文件
第八步 , 运行
作者:逝我
链接:http://www.jianshu.com/p/f1b8b97d2ef8
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。