上一篇文章讲述了在Android studio中配置opencv的JNI接口,配置好以后,我们的src/main/cpp文件夹下只有一个创建工程时自动生成的native-lib.cpp文件供我们写C++代码。考虑到很多时候会需要多个cpp文件来调用,这里说一下如何继续添加cpp文件,以及如何在CMakeLists.txt文件中进行注册添加。
一:在src/main/cpp文件夹下新建.cpp文件,用来写C++代码,新建是选择C/C++Source File,这样不会额外创建.h文件。
二:打开CMakeLists.txt文件,进行cpp文件的注册,例如我这里新建的cpp文件名为yxz.cpp,
在CMakeLists.txt文件中添加
add_library( # Sets the name of the library.
yxz
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
yxz.cpp)
以及
target_link_libraries( # Specifies the target library.
yxz
# Links the target library to the log library
# included in the NDK.
${log-lib})
这里要提醒一下,add_library()和target_link_libraries()是绑定添加的,不能单独添加其中一个,一定要两个函数都添加进去。每次添加cpp文件,都要添加注册一次。
三:
(1)完成添加后,页面切换到yxz.cpp文件下,这时文件中是空的,看到这句蓝色的提示了吗,点击sync Now,等待程序构建完成。
(2)构建完成后,这个cpp文件就已经添加到工程中了,可以开始写代码了,我们先粘贴以下代码进去,看一下cpp文件是否能够识别各种库文件
#include <jni.h>
#include <string>
using namespace std;
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_grsture02_MainActivity_yxz(
JNIEnv *env,
jobject /* this */) {
std::string hello="hello world";
return env->NewStringUTF(hello.c_str());
}
关于这种JNI接口文件的书写格式,需要各位自行学习一下,其中Java_com_example_grsture02_MainActivity_yxz,这一句需要替换成之前创建工程时native-lib.cpp文件中的类名,复制过来并将最后的类名改成yxz即可。
(3)上一步完成后,可以看到代码均能够被识别,且include的包也都是成功的。这就证明新建cpp文件已经成功链接到项目中了。接下来需要调用这个函数。在MainActivity.java文件中找到
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
System.loadLibrary("yxz");
}
将自己的yxz.cpp文件添加进去,然后就可以在代码中调用文件中写的函数了。