Android使用OpenCV4.2环境搭建
下载sdk
下载地址:https://opencv.org/releases/.
下载解压后目录:
创建新的Android项目
使用AndroidStudio新建项目选择c++支持,这是基础,新版本(AndroidStudio3.5.3)的as好像没有了这个选项。
如果在已创建的Android项目中需要接入时(在创建项目时"未勾选"includeC++suport)
1.需要在已支持C++的项目(或新建项目支持C++)中,将CMakeLists.txt文件复制一份到主工程app文件下
2.在main文件下创建cpp文件夹
3.在app的build.gradle中添加两处配置
android {
...
defaultConfig {
...
//配置1
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
}
}
}
buildTypes {
...
}
//配置2
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
...
}
项目配置
将解压后的sdk以Module方式导入项目并自行命名
修改导入Module下的build.gradle,并sync
将apply plugin: ‘com.android.application’
改为apply plugin: ‘com.android.library’
在app项目中将导入的Moduel以Modele Dependency方式引入
下面开始画重点
- 将so包引入项目中
在主工程的main文件下创建jniLibs(注意大小写),将解压后的sdk/native/libs下的文件复制一份放到创建的jniLibs下面。
- 在activity中进行初始化
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i("flag", "OpenCV loaded successfully");
// todo
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
@Override
protected void onResume() {
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.e("flag", "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, this, mLoaderCallback);
} else {
Log.e("flag", "OpenCV library found inside package. Using it!"); mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
或者简单一点可以直接这样:
@Override
protected void onResume() {
super.onResume();
new OpenCVNativeLoader().init();
}
- 配置app的build.gradle
在android/defaultConfig/externalNativeBuild/cmake下增加属性
arguments “-DANDROID_STL=c++_shared”
sync一下就可以愉快的进行开发了。
配置过程中遇到的问题
1:弹框提示需要opencv manager 支持,是否下载!
2:闪退,报错so包找不到!
检查:
配置是否支持c++(基础)
是否配置属性:arguments “-DANDROID_STL=c++_shared”
jniLibs下是否导入so文件
持续学习中~~~