问题描述
我在使用原生的OpenCV 2.4.11(3.0.0也行)与Android工作室1.3+,与新的NDK支持的麻烦。有关.mk文件的所有教程,但我想用新的gradle实验使用它。
使用基兰答案
我achived在java中很好地工作。此外,我已经改变了
gradle-wrapper.properties:
distributionUrl = HTTPS \\://services.gradle.org/distributions/gradle-2.5-all.zip
的build.gradle(应用程序):
类路径com.android.tools.build:gradle-experimental:0.2.0
的build.gradle(模块):
应用插件:'com.android.model.application模型{
安卓{
compileSdkVersion = 23
buildToolsVersion =23.0.0 defaultConfig.with {
的applicationID =android.overloaded.nativetestv4
minSdkVersion.apiLevel = 18
targetSdkVersion.apiLevel = 23
版本code = 1
的versionName =1.0
}
} android.ndk {
MODULENAME =MyModule的
LDLIBS + = ['登录']
CPPFLAGS + =-std = C ++ 11
CPPFLAGS + =-fexceptions
CPPFLAGS + =-I $ {文件(C:/ DevAndroid / OpenCV的,Android的SDK / SDK /本地/ JNI /包括)}的toString()。
CPPFLAGS + =-I $ {文件(C:/ DevAndroid / OpenCV的,Android的SDK / SDK /本地/ JNI /有/ OpenCV的)}的toString() LDLIBS + =机器人,东瀛,GLESv2,DL,日志,Z] //添加ž
STL =stlport_static//gnustl_shared改成静态的STLport
} android.buildTypes {
发布 {
minifyEnabled = FALSE
proguardFiles + =文件(proguard-rules.pro')
}
}
android.productFlavors {//添加的所有productFlavors code
创建(ARM){
ndk.with {
abiFilters + =armeabi
文件CURDIR =文件(./)
CURDIR =文件(curDir.absolutePath)
字符串libsDir = curDir.absolutePath +\\\\ \\\\的src \\\\主要\\\\ jniLibs \\\\ armeabi// - L+
LDLIBS + = libsDir +libnative_camera_r4.3.0.so
LDLIBS + = libsDir +libopencv_contrib.a
LDLIBS + = libsDir +libopencv_core.a
LDLIBS + = libsDir +libopencv_highgui.a
LDLIBS + = libsDir +libopencv_imgproc.a
LDLIBS + = libsDir +libopencv_info.so
LDLIBS + = libsDir +libopencv_java.so
LDLIBS + = libsDir +libopencv_legacy.a
LDLIBS + = libsDir +libopencv_ml.a
LDLIBS + = libsDir +libopencv_ts.a
}
}
创建(ARMv7的){
ndk.with {
abiFilters + =armeabi-V7A
文件CURDIR =文件(./)
CURDIR =文件(curDir.absolutePath)
字符串libsDir = curDir.absolutePath +\\\\ \\\\的src \\\\主要\\\\ jniLibs armeabi-V7A \\\\// - L+ LDLIBS + = libsDir +libnative_camera_r4.3.0.so
LDLIBS + = libsDir +libopencv_contrib.a
LDLIBS + = libsDir +libopencv_core.a
LDLIBS + = libsDir +libopencv_highgui.a
LDLIBS + = libsDir +libopencv_imgproc.a
LDLIBS + = libsDir +libopencv_info.so
LDLIBS + = libsDir +libopencv_java.so
LDLIBS + = libsDir +libopencv_legacy.a
LDLIBS + = libsDir +libopencv_ml.a
LDLIBS + = libsDir +libopencv_ts.a
}
}
创建(胖){
}
}
依赖{
编译文件树(包括:['的* .jar'],DIR:库)
编译com.android.support:appcompat-v7:23.0.0
编制项目(':openCVLibrary2411')
}
有了这个改变我可以叫我的家乡虚拟函数在C JNI文件夹下++文件。此外的#include< opencv2 /核心/ core.hpp>
和其他受支持的克利翁...当我宣布CV ::凉席;给我这个错误:
链接器失败而连接libmymodule.so失败。
C:\\ DevAndroid \\ OpenCV的,Android的SDK \\ SDK \\本地\\ JNI \\包含/ opencv2 /核心/ mat.hpp:278:错误:未定义引用CV :: fastFree(无效*)'
C:\\ DevAndroid \\ OpenCV的,Android的SDK \\ SDK \\本地\\ JNI \\包含/ opencv2 /核心/ mat.hpp:367:错误:未定义引用'简历:: ::垫解除分配()
collect2.exe:错误:LD返回1退出状态
C ++ code:
的#include< jni.h>
#包括LT&;矢量>
#包括LT&;串GT;
#包括helpers.h
#包括LT&; opencv2 /核心/ core.hpp> //这是通过支持克利翁
#包括LT&; opencv2 / imgproc / imgproc.hpp>
#包括LT&; opencv2 / highgui / highgui.hpp>
使用命名空间std;为externC{
JNIEXPORT的jstring JNICALL
Java_android_overloaded_nativetestv4_MainActivity_FuncV1(JNIEnv的* ENV,JCLASS型){
CV ::凉席; //导致错误 字符串s =.cpp的V1 - SUCC
返回env-> NewStringUTF(s.data());
}}
更新
- 增加Z来LDLIBS
- 增加android.productFlavors阻止
现在编译全成,应用程序启动的第二次,然后用此讯息
崩溃
事件日志:
抛出:IllegalArgumentException:错误,同时启动本地调试会话:无法找到程序对设备华为huawei_y530_u00-64a6513ccd8e android.overloaded.nativetestv4
调试信息:
重新启动亚行整合,然后再试一次
等待的过程:android.overloaded.nativetestv4
DEVICE Shell命令:运行作为android.overloaded.nativetestv4的mkdir -p /data/data/android.overloaded.nativetestv4/lldb/bin
DEVICE SHELL命令:cat /数据/本地的/ tmp / LLDB服务器|运行作为android.overloaded.nativetestv4 SH -c'猫> /data/data/android.overloaded.nativetestv4/lldb/bin/lldb-server;搭配chmod 700 /data/data/android.overloaded.nativetestv4/lldb/bin/lldb-server
设备的外壳命令:RM /数据/本地的/ tmp / LLDB服务器
DEVICE shell命令:猫/data/local/tmp/start_lldb_server.sh |运行作为android.overloaded.nativetestv4 SH -c'猫> /data/data/android.overloaded.nativetestv4/lldb/bin/start_lldb_server.sh;搭配chmod 700 /data/data/android.overloaded.nativetestv4/lldb/bin/start_lldb_server.sh
DEVICE shell命令:RM /data/local/tmp/start_lldb_server.sh
现在启动本机调试会话
错误,同时启动本地调试会话:java.lang.IllegalArgumentException异常:找不到过程android.overloaded.nativetestv4设备上华为huawei_y530_u00-64a6513ccd8e
日志:
A / libc中:致命的信号11(SIGSEGV)为00000000(code = 1),螺纹3077(ed.nativetestv4)
疼痛的几个星期之后,我赢得成功。这是我正确的code为Android 1.3.1工作室,OpenCV的2.4.11。首先,你应该做的Android Studio中这这的OpenCV(不要使用含有白色的路径空间,无论是对项目和OpenCV提取文件夹),之后,你应该有正常工作的Java应用程序结果
2.在项目的根目录更改的build.gradle:
buildscript {
库{
jcenter()
}
依赖{
类路径com.android.tools.build:gradle-experimental:0.4.0 //注意:不要在这里把你的应用程序依赖关系;他们属于
//在单个模块的build.gradle文件
}
}allprojects {
库{
jcenter()
}
}任务清除(类型:删除){
删除rootProject.buildDir
}
Change build.gradle in opencv module:
Change build.gradle in app module:
Create dir app/src/main/jniMy, this is place for yours .cpp files
Optionally create file chelper.c in jniMy, with this code:
Create file native_exporter.cpp in jniMy, with this code:
Code in MainActivity.java:
Android Studio will ask you to change jdk, also it will install new gradle, you should do everything it ask.
这篇关于OpenCV的与Android工作室1.3+使用的gradle新 - 未定义参考的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!