2015-09-28 3 views
0

Я совершенно новый, используя Android Studio 1.3.2 и даже больше, используя NDK. Я пытаюсь использовать OpenCV 2.4.11 и C++. Я использую Gradle 2.6.Android studio 1.3 NDK не может разрешить заголовок/код C++

До сих пор и, как ни странно, OpenCV не генерирует ошибок в коде C++. Просто Когда я включаю заголовки C++, например, или, они не могут их разрешить. То же самое касается Try ... Catch, которые не разрешены. Опять же, я начал использовать Android Studio, как 2 недели назад, и NDK 1 неделю назад. Я все еще не уверен, что делаю.

#include "jni.h" 
#include <vector> 
#include <string> 
#include <opencv2/contrib/contrib.hpp> 

#ifdef __cplusplus 
extern "C" { 
#endif 

JNIEXPORT jlong JNICALL Java_face_rt_facert_FisherFaceRecognizer_createFisherFaceRecognizer_10(JNIEnv *env, 
                     jclass type) { 

try { 
    cv::Ptr<cv::FaceRecognizer> pfr = cv::createFisherFaceRecognizer(); 
    pfr.addref(); // this is for the 2.4 branch, 3.0 would need a different treatment here 
    return (jlong) pfr.obj; 
    } catch (...) { 
    jclass je = env->FindClass("java/lang/Exception"); 
    env->ThrowNew(je, "sorry, dave.."); 
    } 
    return 0; 
} 

#ifdef __cplusplus 
} 
#endif 

Моего файл build.gradle для проекта:

apply plugin: 'com.android.model.application' 

model { 
android { 
    compileSdkVersion = 23 
    buildToolsVersion = "23.0.1" 

    defaultConfig.with { 
     applicationId = "face.rt.facert" 
     minSdkVersion.apiLevel = 19 
     targetSdkVersion.apiLevel = 19 
     versionCode = 1 
     versionName = "1.0.1" 
    } 

} 

android.buildTypes { 
    release { 
     minifyEnabled = false 
     proguardFiles += file('proguard-rules.txt') 
    } 
} 

android.ndk { // keeping it to make AS correctly support C++ code editing and debugging 
    moduleName = "Face" 
    ldLibs += ['log'] 
    cppFlags += "-std=c++11" 
    cppFlags += "-fexceptions" 
    cppFlags += "-I${file("src/main/jni/prebuilts/include")}".toString() 
    cppFlags += "-I${file("C:/Android-dev/SDKs/OpenCV-android-sdk/sdk/native/jni/include")}".toString() 
    cppFlags += "-I${file("C:/Android-dev/SDKs/OpenCV-android-sdk/sdk/native/jni/include/opencv")}".toString() 
    cppFlags += "-I${file("C:/Android-dev/SDKs/OpenCV-android-sdk/sdk/native/jni/include/opencv2")}".toString() 
    stl = "gnustl_shared" //"stlport_static" 
} 


android.productFlavors { 
    // for detailed abiFilter descriptions, refer to "Supported ABIs" @ 
    // https://developer.android.com/ndk/guides/abis.html#sa 
    create("arm") { 
     ndk.with { 
      abiFilters += "armeabi" 

      File curDir = file('./') 
      curDir = file(curDir.absolutePath) 
      String libsDir = curDir.absolutePath+"\\src\\main\\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" 

     } 
    } 
    create("armv7") { 
     ndk.with { 
      abiFilters += "armeabi-v7a" 

      File curDir = file('./') 
      curDir = file(curDir.absolutePath) 
      String libsDir = curDir.absolutePath+"\\src\\main\\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" 

     } 
    } 
    create("x86") { 
     ndk.with { 
      abiFilters += "x86" 
     } 
    } 
    create("mips") { 
     ndk.with { 
      abiFilters += "mips" 
     } 
    } 
    create("fat") { 

    } 

    // To include all cpu architectures, leaves abiFilters empty 
    create("all") 
} 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile project(':openCVLibrary2411') 
} 

И это моя зависимость в моем проекте:

classpath 'com.android.tools.build:gradle-experimental:0.3.0-alpha3' 

EDIT:

Удалены Try ... Поймать функцию для целей тестирования. Странно, векторные и строковые заголовки теперь разрешены и работают.

Но теперь я получаю несколько ошибок относительно OpenCV во время компиляции.

+0

Если вы получаете ошибки (любого вида), пожалуйста, включите их в теле вопроса. –

ответ

1

Я нашел в моем build.gradle:

// To include all cpu architectures, leaves abiFilters empty 
    create("all") 

все средства 32 и 64 бита. Поскольку мои библиотеки имеют только 32 бита, компилятор не нашел версию 64-битной версии и не удалось.

я удалил эту строку и она работает лучше (Тем не менее есть некоторые ошибки, но ошибки не компиляции)

Смежные вопросы