美文网首页
1分钟学会NDK开发

1分钟学会NDK开发

作者: hellogoogle | 来源:发表于2021-12-07 14:06 被阅读0次

一、android studio的ndk环境搭建

1、下载安装包

File-setting-Appearance&Behavior-System Settings-Android SDK-SDK Tools
找到NDK Cmake选项并选中,点击Apply,会下载对应的安装包。

2、配置路径

File-Project Structure-SDK Location配置下载的NDK的路径
D:\software\sdk\ndk\21.0.6113669
(这个是我ndk下载存放的目录,路径一定要带上ndk的版本号,如果遇到手动选路径不可点击的情况,就要去local.properties文件中,手动添加
sdk.dir=D:\software\sdk
ndk.dir=D:\software\sdk\ndk\21.0.6113669)

二、新建一个C++的工程

File-new-New Project 选择 native C++ ,点next,生成C++工程,直接运行,会出现Hello from C++ 的提示语,这就是java直接调用本地C++代码的Demo。

下面是C++代码的实现部分,也是后面编译成so文件的核心代码
//#include <jni.h>
//#include <string>
//extern "C" JNIEXPORT jstring JNICALL
//Java_com_kn_ctest_MainActivity_stringFromJNI(
// JNIEnv* env,
// jobject /* this */) {
// std::string hello = "Hello from C++12567";
// return env->NewStringUTF(hello.c_str());
//}

三、CMake编译生成so文件

Build-Make Project 就会在app/build/intermediates/cmake/debug/obj 目录底下生成
armeabi-v7a arm64-v8a x86 x86_64四个文件,以及对应平台的libxxx.so文件(xxx默认就是新建项目的名称,比如我的叫CTest,对应的so文件名就叫libctest.so)
(每次build-make project 的时候,要先删除jniLibs文件夹下的so文件,否则会报错
If you are using jniLibs and CMake IMPORTED targets, see )

四、调用.so及其方法

1、新建jniLibs文件

在app-src-main目录底下,新建一个jniLibs文件,将app/build/intermediates/cmake/debug/obj 生成的armeabi-v7a文件一块拷贝过来。

2、gradle配置jniLibs

gradle的android{}中 配置
sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}
}

并注释掉 (不注释掉,会导致调用stringFromJNI方法,调用不到so的方法,而是本地c++的方法)
// externalNativeBuild {
// cmake {
// path file('src/main/cpp/CMakeLists.txt')
// version '3.18.1'
// }
// }

Sync Now一下

3、调用so方法

在要调用C++的activity中,添加so文件加载方法
static {
System.loadLibrary("ctest");
}
调用C++中声明的方法:
tv.setText(stringFromJNI());
public native String stringFromJNI();//该方法一定要和C++中声明的方法一样,而且包名路径都要一样,否则会调用失败的。

直接运行,android调用自己ndk编译的so文件,就成功了,soEasy!!!

相关文章

网友评论

      本文标题:1分钟学会NDK开发

      本文链接:https://www.haomeiwen.com/subject/rtooxrtx.html