首先New Project,选择Native C++,点击Next。
创建好的项目目录,里面比我们正常的Android项目多了一个cpp目录
打开MainActivity。里面定义了一个jni方法stringFromJNI()
在init方法里面load了一个firstndkdemo的native lib。
打开cpp目录里面有一个Cmakelists.txt, 这里面cmake_minimum_required指定了cmake的版本。
project方法指定了native lib的名字,也就是MainActivity中init方法load的lib。
add_library方法指定了一个c++文件:native–lib.cpp
target_link_libraries方法是用来指定一个目标文件(可执行文件或者库文件)需要链接的库文件的。这个方法可以让你在编译和链接阶段,正确地解析和链接依赖的库文件。你可以指定库文件的名称,也可以指定库文件的路径。你还可以指定链接的范围,比如PUBLIC、PRIVATE或者INTERFACE,来控制库文件的传递性。
cmake_minimum_required(VERSION 3.22.1)
project("firstndkdemo")
add_library(${CMAKE_PROJECT_NAME} SHARED
# List C/C++ source files with relative paths to this CMakeLists.txt.
native-lib.cpp)
target_link_libraries(${CMAKE_PROJECT_NAME}
# List libraries link to the target library
android
log)
再来看一下native–lib.cpp,毫无疑问这里面就是stringFromJNI方法的具体底层的实现。
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_firstndkdemo_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
这个方法给java层返回了一句话”Hello from C++“
直接运行程序,可以看到MainActivity中的textview获取到了c++方法返回的问候语。
忽略了一个事情,CMakeLists.txt的配置文件还需要在gradle里面指定一下
externalNativeBuild {
cmake {
path = file("src/main/cpp/CMakeLists.txt")
version = "3.22.1"
}
}
原文地址:https://blog.csdn.net/challenge51all/article/details/134739223
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_23704.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!