Android Studioを使用して、Gradleビルドツールを使用してアプリを開発します。 build.gradle
にOpenCVリポジトリとライブラリを挿入できません。私の.gradle
ファイルは以下のようなものです:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'Android'
repositories {
mavenCentral()
}
dependencies {
compile 'com.Android.support:support-v4:13.0.+'
}
Android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
プロジェクトにOpenCVを追加するにはどうすればよいですか?
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'Android'
repositories {
mavenCentral()
maven {
url 'http://maven2.javacv.googlecode.com/git/'
}
}
dependencies {
compile 'com.Android.support:support-v4:13.0.+'
compile 'com.googlecode.javacv:javacv:0.5'
instrumentTestCompile 'junit:junit:4.4'
}
Android {
compileSdkVersion 14
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 14
}
}
これは私のために働いています:)
これはAndroid Studioで非常に簡単に行えます。
プロジェクトのメインディレクトリの下にlibraries
フォルダーを作成します。たとえば、プロジェクトがOpenCVExamples
の場合、OpenCVExamples/libraries
フォルダーを作成します。
SDK「\ OpenCV-2.4.8-Android-sdk\sdk」がある場所に移動すると、Java
フォルダーが見つかります。名前をopencv
に変更します。
次に、完全なopencvディレクトリをSDKから作成したライブラリフォルダーにコピーします。
ここで、opencv
ディレクトリに次の内容のbuild.gradle
ファイルを作成します
apply plugin: 'Android-library'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.9.+'
}
}
Android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 2480
versionName "2.4.8"
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
Java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
aidl.srcDirs = ['src']
}
}
}
アプリケーションのメインディレクトリでsettings.gradleファイルを編集し、次の行を追加します。
include ':libraries:opencv'
プロジェクトをGradleと同期すると、次のようになります
プロジェクトを右クリックし、Open Module Settings
をクリックしてから、左側のリストからモジュールを選択し、アプリケーションのモジュールをクリックして、[依存関係]タブをクリックし、[+]ボタンをクリックして新しいモジュールの依存関係を追加します。
Module dependency
を選択します。選択するモジュールのリストを含むダイアログが開きます。 「:libraries:opencv」を選択します。
/app/src/main/
の場所にjniLibs
フォルダーを作成し、OpenCV SDKからjniLibs
にある* .soファイル(armeabi、armeabi-v7a、mips、x86)を含むすべてのフォルダーをコピーします。
OKをクリックします。これですべてが完了し、OpenCVをお楽しみください。
OpenCV docs( 1 )によると、OpenCV managerを使用する以下の手順は、生産にOpenCVを使用する推奨方法ですが実行されます。ただし、OpenCVマネージャー( 2 )は、Google Playストアからの追加インストールです。したがって、自己完結型のapk(OpenCVマネージャーを使用しない)を好む場合、または現在development/testingフェーズにある場合は、 https:// stackoverflow。 com/a/27421494/1180117 。
OpenCVマネージャーを使用してAndroid StudioでOpenCVを使用するための推奨手順。
File -> Import Module
から、解凍されたopencvアーカイブのsdk/Java
フォルダーを選択します。build.gradle
を更新して、プロジェクトのbuild.gradle
a)compileSdkVersion b)buildToolsVersion c)minSdkVersionおよび4)targetSdkVersionに一致する4つのフィールドを更新します。Application -> Module Settings
でモジュールの依存関係を追加し、Dependencies
タブを選択します。下部(または右)にある[+
]アイコンをクリックし、Module Dependency
を選択して、インポートしたOpenCVモジュールを選択します。最後のステップとして、Activityクラスで、以下のスニペットを追加します。
public class SampleJava extends Activity {
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch(status) {
case LoaderCallbackInterface.SUCCESS:
Log.i(TAG,"OpenCV Manager Connected");
//from now onwards, you can use OpenCV API
Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
break;
case LoaderCallbackInterface.INIT_FAILED:
Log.i(TAG,"Init Failed");
break;
case LoaderCallbackInterface.INSTALL_CANCELED:
Log.i(TAG,"Install Cancelled");
break;
case LoaderCallbackInterface.INCOMPATIBLE_MANAGER_VERSION:
Log.i(TAG,"Incompatible Version");
break;
case LoaderCallbackInterface.MARKET_ERROR:
Log.i(TAG,"Market Error");
break;
default:
Log.i(TAG,"OpenCV Manager Install");
super.onManagerConnected(status);
break;
}
}
};
@Override
protected void onResume() {
super.onResume();
//initialize OpenCV manager
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
}
}
注:onManagerConnected
メソッドで成功コールバックを受け取った後にのみOpenCV呼び出しを行うことができます。実行中に、PlayストアからOpenCVマネージャーをインストールするように求められます(まだインストールされていない場合)。開発中にPlayストアにアクセスできない場合、またはemualtorを使用している場合は、ダウンロードしたOpenCV sdkアーカイブの下のapk
フォルダーにある適切なOpenCVマネージャーapkを使用します。
長所
短所
OpenCVの統合はこのような努力であるため、事前にパッケージ化し、JCenter経由で公開しました: https://github.com/quickbirdstudios/opencv-Android
これをモジュールのbuild.gradle依存関係セクションに含めるだけです
dependencies {
implementation 'com.quickbirdstudios:opencv:3.4.1'
}
これはプロジェクトのbuild.gradleリポジトリセクションにあります
repositories {
jcenter()
}
Gradleインポート後にlintエラーは発生しませんが、MainActivityでこのようなOpenCVライブラリを初期化することを忘れないでください
public class MainActivity extends Activity {
static {
if (!OpenCVLoader.initDebug())
Log.d("ERROR", "Unable to load OpenCV");
else
Log.d("SUCCESS", "OpenCV loaded");
}
...
...
...
...
JavaCVを使用したくない場合、これは私のために機能します...
OpenCV Android SDKを http://opencv.org/downloads.html からダウンロードします
Libopencv_info.soとlibopencv_Java.soをコピーします
OpenCV-2.?.?-Android-sdk -> sdk -> native -> libs -> armeabi-v7a
に
Project Root -> Your Project -> lib - > armeabi-v7a
Libフォルダーを圧縮して、そのZipの名前をwhatever-v7a.jarに変更します。
この.jarファイルをコピーして、プロジェクトのここに配置します
Project Root -> Your Project -> libs
依存関係セクションのプロジェクトbuild.gradleにこの行を追加します
compile files('libs/whatever-v7a.jar')
コンパイルすると、おそらく.apkが約4MB大きくなっていることがわかります。
(ARMv6もサポートしたい場合は、「armeabi」を繰り返します。おそらくもう必要ありません。)
Javaフォルダーをここからコピーします
OpenCV-2.?.?-Android-sdk -> sdk
に
Project Root -> Your Project -> libs
(.jarファイルと同じ場所);
(「Java」フォルダー名を「OpenCV」に変更できます)
この新しくコピーされたフォルダーに、典型的なbuild.gradleファイルを追加します。私はこれを使用しました:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'Android-library'
repositories {
mavenCentral();
}
Android {
compileSdkVersion 19
buildToolsVersion "19"
defaultConfig {
minSdkVersion 15
targetSdkVersion 19
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
Java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
}
プロジェクトルートのsettings.gradleファイルで、次のように変更します。
include ':Project Name:libs:OpenCV', ':Project Name'
プロジェクトルート->プロジェクト名-> build.gradleファイルの依存関係セクションで、次の行を追加します。
compile project(':Project Name:libs:OpenCV')
再構築すると、プロジェクトでOpenCVをインポートして使用できるようになります。
import org.opencv.Android.OpenCVLoader;
...
if (!OpenCVLoader.initDebug()) {}
少しハックすればこれを知っていますが、とにかく投稿すると思いました。
Android StudioとGradleを使用してOpenCVを含むAndroid NDKアプリケーションを構築する方法に関する新しい投稿を投稿しました。より多くの情報を見ることができます here 、私は2つの方法をまとめました:
(1)Gradleタスク内でndk-build
を実行します
sourceSets.main.jni.srcDirs = []
task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
ndkDir = project.plugins.findPlugin('com.Android.application').getNdkFolder()
commandLine "$ndkDir/ndk-build",
'NDK_PROJECT_PATH=build/intermediates/ndk',
'NDK_LIBS_OUT=src/main/jniLibs',
'APP_BUILD_SCRIPT=src/main/jni/Android.mk',
'NDK_APPLICATION_MK=src/main/jni/Application.mk'
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
(2)外部ツールでndk-build
を実行します
パラメーター:NDK_PROJECT_PATH=$ModuleFileDir$/build/intermediates/ndk NDK_LIBS_OUT=$ModuleFileDir$/src/main/jniLibs NDK_APPLICATION_MK=$ModuleFileDir$/src/main/jni/Application.mk APP_BUILD_SCRIPT=$ModuleFileDir$/src/main/jni/Android.mk V=1
より多くの情報を見ることができます here
Android Studio 1.2 + OpenCV-2.4.11-Android-sdk(.Zip)でも動作します。
以下を実行してください。
1)「Android Studioで非常に簡単にこれを行うことができます。以下の手順に従って、プロジェクトにOpenCVをライブラリとして追加します。」で始まる回答に従ってください。 TGMCiansによる。
2)<yourAppDir>\libraries\opencv
フォルダーで、新しく作成したbuild.gradle
を(TGMCiansの答えのステップ4、OpenCV2.4.11-Android-sdkに適応したに変更します。 gradle 1.1.0)を使用して:
apply plugin: 'Android-library'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:1.1.0'
}
}
Android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 8
targetSdkVersion 21
versionCode 2411
versionName "2.4.11"
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
Java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
aidl.srcDirs = ['src']
}
}
}
3)"armeabi", "armeabi-v7a", "mips", "x86"
ディレクトリにある* .soファイルは、(デフォルトのOpenCV-location):..\OpenCV-2.4.11-Android-sdk\OpenCV-Android-sdk\sdk\native\libs
(TGMCiansの答えのステップ9)にあります。
楽しんでください、そして、これが助けたならば、ポジティブな評判を与えてください。答えに直接答えるには50が必要です(残り19):)
これらは、OpenCVをAndroid Studio 1.2で使用するために必要な手順です。
sdk/Java
を選択しますopencv
に設定しますcompileSdkVersion
およびbuildToolsVersion
をマシン上のバージョンに更新しますcompile project(':opencv')
をアプリのbuild.gradleに追加します
dependencies {
...
compile project(':opencv')
}
を押してプロジェクトをGradleファイルと同期します
OpenCV Android SDKには、役立つコメント付きのサンプルgradle.buildファイルがあります。 https://github.com/opencv/opencv/blob/master/modules/Java/Android_sdk/build.gradle .in
//
// Notes about integration OpenCV into existed Android Studio application project are below (application 'app' module should exist).
//
// This file is located in <OpenCV-Android-sdk>/sdk directory (near 'etc', 'Java', 'native' subdirectories)
//
// Add module into Android Studio application project:
//
// - Android Studio way:
// (will copy almost all OpenCV Android SDK into your project, ~200Mb)
//
// Import module: Menu -> "File" -> "New" -> "Module" -> "Import Gradle project":
// Source directory: select this "sdk" directory
// Module name: ":opencv"
//
// - or attach library module from OpenCV Android SDK
// (without copying into application project directory, allow to share the same module between projects)
//
// Edit "settings.gradle" and add these lines:
//
// def opencvsdk='<path_to_opencv_Android_sdk_rootdir>'
// // You can put declaration above into gradle.properties file instead (including file in HOME directory),
// // but without 'def' and apostrophe symbols ('): opencvsdk=<path_to_opencv_Android_sdk_rootdir>
// include ':opencv'
// project(':opencv').projectDir = new File(opencvsdk + '/sdk')
//
//
//
// Add dependency into application module:
//
// - Android Studio way:
// "Open Module Settings" (F4) -> "Dependencies" tab
//
// - or add "project(':opencv')" dependency into app/build.gradle:
//
// dependencies {
// implementation fileTree(dir: 'libs', include: ['*.jar'])
// ...
// implementation project(':opencv')
// }
//
//
//
// Load OpenCV native library before using:
//
// - avoid using of "OpenCVLoader.initAsync()" approach - it is deprecated
// It may load library with different version (from OpenCV Android Manager, which is installed separatelly on device)
//
// - use "System.loadLibrary("opencv_Java3")" or "OpenCVLoader.initDebug()"
// TODO: Add accurate API to load OpenCV native library
//
//
//
// Native C++ support (necessary to use OpenCV in native code of application only):
//
// - Use find_package() in app/CMakeLists.txt:
//
// find_package(OpenCV 3.4 REQUIRED Java)
// ...
// target_link_libraries(native-lib ${OpenCV_LIBRARIES})
//
// - Add "OpenCV_DIR" and enable C++ exceptions/RTTI support via app/build.gradle
// Documentation about CMake options: https://developer.Android.com/ndk/guides/cmake.html
//
// defaultConfig {
// ...
// externalNativeBuild {
// cmake {
// cppFlags "-std=c++11 -frtti -fexceptions"
// arguments "-DOpenCV_DIR=" + opencvsdk + "/sdk/native/jni" // , "-DANDROID_ARM_NEON=TRUE"
// }
// }
// }
//
// - (optional) Limit/filter ABIs to build ('Android' scope of 'app/build.gradle'):
// Useful information: https://developer.Android.com/studio/build/gradle-tips.html (Configure separate APKs per ABI)
//
// splits {
// abi {
// enable true
// reset()
// include 'armeabi-v7a' // , 'x86', 'x86_64', 'arm64-v8a'
// universalApk false
// }
// }
//
apply plugin: 'com.Android.library'
println "OpenCV: " + project.buildscript.sourceFile
Android {
compileSdkVersion 27
//buildToolsVersion "27.0.3" // not needed since com.Android.tools.build:gradle:3.0.0
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_6
targetCompatibility JavaVersion.VERSION_1_6
}
sourceSets {
main {
jniLibs.srcDirs = ['native/libs']
Java.srcDirs = ['Java/src']
aidl.srcDirs = ['Java/src']
res.srcDirs = ['Java/res']
manifest.srcFile 'Java/AndroidManifest.xml'
}
}
}
dependencies {
}
OpenCV SDKからJavaプロジェクトをAndroid Studio gradleプロジェクトにインポートし、 https://github.com/ctodobom/OpenCV-3.1で利用可能にしました。 .0-Android
Jitpack.ioサービスのおかげで、build.gradle
ファイルに2行追加するだけでプロジェクトに含めることができます。
AndroidManifest.xmlファイルには、次のダイアログボックスが表示されますが、次のアクセス許可と機能が必要です。
「お使いのデバイスはカメラをサポートしていない(またはロックされているようです。アプリケーションは終了します)
<uses-permission Android:name="Android.permission.CAMERA"/>
<uses-feature Android:name="Android.hardware.camera" Android:required="false"/>
<uses-feature Android:name="Android.hardware.camera.autofocus" Android:required="false"/>
<uses-feature Android:name="Android.hardware.camera.front" Android:required="false"/>
<uses-feature Android:name="Android.hardware.camera.front.autofocus" Android:required="false"/>
他の答えはどれも私を助けませんでした。これが私のために働いたものです。 opencvのtutorial-1サンプルを使用していますが、プロジェクトでNDKを使用するので、gradleプラグインとは異なる構造を持つ gradle-experimental プラグインを使用しています。
Androidスタジオをインストールし、Android NDKをAndroid SDKマネージャー経由でインストールし、 OpenCV Android SDK をインストールする必要があります。ダウンロードして解凍しました。
これは、コンパクトでありながら完全な状態を保つために、bashスクリプトの塊になっています。 IDEの進化に伴い、IDE内の命令が廃止されたという大きな問題があったため、すべてコマンドラインにもあります。
まず、OpenCV SDKのルートディレクトリの場所を設定します。
export OPENCV_SDK=/home/user/wip/OpenCV-2.4.11-Android-sdk
cd $OPENCV_SDK
Gradleビルドファイルを作成...
まずOpenCVライブラリ
cat > $OPENCV_SDK/sdk/Java/build.gradle <<'==='
apply plugin: 'com.Android.model.library'
model {
Android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
minSdkVersion.apiLevel = 8
targetSdkVersion.apiLevel = 23
}
}
Android.buildTypes {
release {
minifyEnabled = false
}
debug{
minifyEnabled = false
}
}
Android.sources {
main.manifest.source.srcDirs += "."
main.res.source.srcDirs += "res"
main.aidl.source.srcDirs += "src"
main.Java.source.srcDirs += "src"
}
}
===
次に、チュートリアルサンプルに、ライブラリのラベルの付け方と場所を伝えます。
cat > $OPENCV_SDK/samples/tutorial-1-camerapreview/settings.gradle <<'==='
include ':openCVLibrary2411'
project(':openCVLibrary2411').projectDir = new File('../../sdk/Java')
===
チュートリアル用のビルドファイルを作成します。
cat > $OPENCV_SDK/samples/tutorial-1-camerapreview/build.gradle <<'==='
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle-experimental:0.2.1'
}
}
allprojects {
repositories {
jcenter()
}
}
apply plugin: 'com.Android.model.application'
model {
Android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "org.opencv.samples.tutorial1"
minSdkVersion.apiLevel = 8
targetSdkVersion.apiLevel = 23
}
}
Android.sources {
main.manifest.source.srcDirs += "."
main.res.source.srcDirs += "res"
main.aidl.source.srcDirs += "src"
main.Java.source.srcDirs += "src"
}
Android.buildTypes {
release {
minifyEnabled = false
proguardFiles += file('proguard-rules.pro')
}
debug {
minifyEnabled = false
}
}
}
dependencies {
compile project(':openCVLibrary2411')
}
===
ビルドツールのバージョンを正しく設定する必要があります。インストールしたものを確認する簡単な方法を次に示します。 (Android SDK Managerを介して他のバージョンをインストールできます)。 23.0.2がない場合は、buildToolsVersionを変更します。
echo "Your buildToolsVersion is one of: "
ls $Android_HOME/build-tools
最初の行の環境変数をバージョン番号に変更します
REP=23.0.2 #CHANGE ME
sed -i.bak s/23\.0\.2/${REP}/g $OPENCV_SDK/sdk/Java/build.gradle
sed -i.bak s/23\.0\.2/${REP}/g $OPENCV_SDK/samples/tutorial-1-camerapreview/build.gradle
最後に、正しいgradleラッパーをセットアップします。これを行うには、Gradleにクリーンディレクトリが必要です。
pushd $(mktemp -d)
gradle wrapper --gradle-version 2.5
mv -f gradle* $OPENCV_SDK/samples/tutorial-1-camerapreview
popd
これで準備は完了です。これで、Android Studioを使用してこのディレクトリを参照し、プロジェクトを開くことができます。
次のコマンドを使用して、コマンドラインでチュートリアルを作成します。
./gradlew assembleDebug
Apkをビルドし、。/ build/outputs/apkに配置する必要があります