2016-11-28 6 views
1

私はAndroid Studio 2.2でopencvネイティブライブラリをリンクしようとしています。私が見つけたすべてのトピックは、Android.mkファイルやその他のメソッドをAndroid Studioが見つけることができないbuild.gradleファイルで使用しています。Androidスタジオ2.2リンクopencvスタティックライブラリ

私はAndroid Studio 2.2を使用しており、C++をサポートする新しいプロジェクトを作成してプロジェクトを作成しました。

#include <jni.h> 
#include <string> 
#include "opencv.hpp" 

extern "C" 
jstring 
Java_com_rvstudios_roomscanner_capp_MainActivity_stringFromJNI(
     JNIEnv *env, 
     jobject /* this */) { 
    std::string hello = "Hello from C++"; 

    cv::Mat image; 
    cv::cvtColor(image, image, CV_BGR2GRAY); 

    return env->NewStringUTF(hello.c_str()); 
} 

私はこれを構築しようとした際、私は静的ライブラリ(ためであるOpenCVの関数に未定義の参照のエラーを取得:

は、これまでのところ私は、C++ソース・ファイル内のOpenCVのライブラリを含むことに成功しました。ファイル)をリンクする必要があります。私がすでに読んだことから、これはbuild.gradleファイルで行うべきです。私は静的ライブラリをリンクする方法を知らないので、私はここで立ち往生しています

apply plugin: 'com.android.application' 

def targetPlatform = "mips" 

android { 
    compileSdkVersion 23 
    buildToolsVersion "25.0.1" 
    defaultConfig { 
     applicationId "com.rvstudios.roomscanner.capp" 
     minSdkVersion 18 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
     externalNativeBuild { 
      cmake { 
       cppFlags "" 
       cppFlags.add("-isystem${project.rootDir}/app/src/main/cpp/vision".toString()) 
      } 
     } 
    } 
    sourceSets.main { 
     jni.srcDirs = ["${project.rootDir}/app/src/main/jniLibs/${targetPlatform.toString()}/"] 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    externalNativeBuild { 
     cmake { 
      path "CMakeLists.txt" 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.android.support:design:23.4.0' 
    testCompile 'junit:junit:4.12' 
} 

これは、これまで私のbuild.gradleファイルがあります。私はすでに同じ問題について大量のSOトピックを見てきましたが、私が読んだのはさまざまなプロジェクト設定を使用しています。私はAndroid開発には新しく、全く知識がありません。

EDIT1: マイCMakeLists.txt:

# Sets the minimum version of CMake required to build the native 
# library. You should either keep the default value or only pass a 
# value of 3.4.0 or lower. 

cmake_minimum_required(VERSION 3.4.1) 

# Creates and names a library, sets it as either STATIC 
# or SHARED, and provides the relative paths to its source code. 
# You can define multiple libraries, and CMake builds it for you. 
# Gradle automatically packages shared libraries with your APK. 

add_library(# Sets the name of the library. 
      native-lib 

      # Sets the library as a shared library. 
      SHARED 

      # Provides a relative path to your source file(s). 
      # Associated headers in the same location as their source 
      # file are automatically included. 
      src/main/cpp/native-lib.cpp 
      src/main/cpp/vision/opencv.hpp) 

# Searches for a specified prebuilt library and stores the path as a 
# variable. Because system libraries are included in the search path by 
# default, you only need to specify the name of the public NDK library 
# you want to add. CMake verifies that the library exists before 
# completing its build. 

find_library(# Sets the name of the path variable. 
       log-lib 

       # Specifies the name of the NDK library that 
       # you want CMake to locate. 
       log) 

# Specifies libraries CMake should link to your target library. You 
# can link multiple libraries, such as libraries you define in the 
# build script, prebuilt third-party libraries, or system libraries. 

target_link_libraries(# Specifies the target library. 
         native-lib 

         # Links the target library to the log library 
         # included in the NDK. 
         ${log-lib} 

         ) 
+0

あなたはCMakeLists.txtにライブラリとして 'opencv.hpp' を追加しましたか? – mcemilg

+0

はい、私はしました!私はCMakeLists.txtを質問フィールドに追加しました! –

+0

次のように 'opencv.hpp'ファイルをインクルードしてください。 #include "vision/opencv.hpp" – mcemilg

答えて

0

CMakeLists.txtには、追加:

set(pathToOpenCV /Users/admin/Projects/OpenCV-android-sdk/sdk/native/) // Replace with your OpenCV SDK path 
include_directories(${pathToOpenCV}/jni/include) 
関連する問題