OpenCV的与Android工作室1

OpenCV的与Android工作室1

本文介绍了OpenCV的与Android工作室1.3+使用的gradle新 - 未定义参考的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用原生的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。首先,你应该做的Andr​​oid Studio中这这的OpenCV(不要使用含有白色的路径空间,无论是对项目和OpenCV提取文件夹),之后,你应该有正常工作的Java应用程序结果
2.在项目的根目录更改的build.gradle:

  buildscript {
    库{
        jcenter()
    }
    依赖{
        类路径com.android.tools.build:gradle-experimental:0.4.0        //注意:不要在这里把你的应用程序依赖关系;他们属于
        //在单个模块的build.gradle文件
    }
}allprojects {
    库{
        jcenter()
    }
}任务清除(类型:删除){
    删除rootProject.buildDir
}


  • 更改gradle-wrapper.properties:

    1. Change build.gradle in opencv module:

    2. Change build.gradle in app module:

    3. Create dir app/src/main/jniMy, this is place for yours .cpp files

    4. Optionally create file chelper.c in jniMy, with this code:

    5. Create file native_exporter.cpp in jniMy, with this code:

    6. 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新 - 未定义参考的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!