网站开发外包,北海网站建设网络公司,济南网站优化排名推广,建立新中国的构想及其实践首先New Project#xff0c;选择Native C#xff0c;点击Next。 填入项目名称和包名#xff0c;点击Next。 这里我们选择Cmake默认的C版本。 创建好的项目目录#xff0c;里面比我们正常的Android项目多了一个cpp目录 打开MainActivity。里面定义了一个jni方法stringFromJN…首先New Project选择Native C点击Next。 填入项目名称和包名点击Next。 这里我们选择Cmake默认的C版本。 创建好的项目目录里面比我们正常的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 libraryandroidlog)
再来看一下native-lib.cpp,毫无疑问这里面就是stringFromJNI方法的具体底层的实现。
#include jni.h
#include stringextern 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}}