我想使用Android Studio开发使用摇篮构建工具的应用程序。 我不能插入OpenCV的回购和库中build.gradle
。 我.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的在我的项目?
Answer 1:
您可以在Android Studio中做到这一点很容易。
按照下面的步骤,在您的项目库中添加打开CV。
创建libraries
项目主目录下的文件夹中。 例如,如果你的项目是OpenCVExamples
,您将创建一个OpenCVExamples/libraries
文件夹。
转到您有SDK的位置“\ OpenCV的-2.4.8-Android的SDK \ SDK”在这里你会找到java
文件夹,重命名为opencv
。
现在从SDK复制完整的OpenCV的目录文件夹到你刚刚创建的库。
现在创建build.gradle
在文件opencv
包含以下内容目录
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'
同步与摇篮您的项目,它应该是这样的
右键单击您的项目,然后单击Open Module Settings
,然后选择左侧列表模块,单击您的应用程序的模块上,单击依存关系选项卡,并单击+按钮添加新的模块依赖。
选择Module dependency
。 这将打开与模块可供选择的列表的对话框; 选择“:图书馆:OpenCV的”。
创建jniLibs
在文件夹/app/src/main/
位置,并与*复制所有文件夹中的.so文件(armeabi,armeabi-V7A,MIPS,X86) jniLibs
来自OpenCV的SDK。
单击确定。 现在一切都做了,去和OpenCV的享受。
Answer 2:
按照OpenCV的文档( 1 ),下面使用的OpenCV管理器被使用OpenCV进行生产运行的推荐的方法步骤。 但是,OpenCV的经理( 2 )是一个额外的由谷歌安装Play商店。 所以,如果你喜欢一个自包含的apk(不使用OpenCV的经理)或正在开发/测试阶段,我建议在回答https://stackoverflow.com/a/27421494/1180117 。
推荐步骤Android Studio中使用的OpenCV与OpenCV的经理。
- OpenCV的解压Android SDK中从OpenCV.org下载( 3 )
- 从
File -> Import Module
,选择sdk/java
解压后OpenCV的存档文件夹。 - 更新
build.gradle
项下的进口OpenCV的模块更新4场,以配合您的项目build.gradle
一)compileSdkVersion B)buildToolsVersion C)的minSdkVersion和4)targetSdkVersion。 - 通过添加模块依赖
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);
}
}
注意: 您收到的成功回调后,您只能做OpenCV的电话onManagerConnected
方法 。 在运行过程中,系统会提示您从Play商店安装OpenCV的经理,如果尚未安装。 在开发过程中,如果你没有访问Play商店或在emualtor,使用适当的OpenCV的经理APK目前在apk
文件夹下下载OpenCV的SDK存档。
优点
- 约40 MB的APK大小减少(考虑升级太)。
- OpenCV的经理安装你的硬件,可以帮助速度优化的二进制代码。
- 升级到OpenCV的经理可能从OpenCV的错误保存您的应用程序。
- 不同的应用程序可以共享相同的OpenCV库。
缺点
- 最终用户体验 - 可能不喜欢与您的应用程序安装提示。
Answer 3:
如果你不想使用此JavaCV工作对我来说...
第1步 - 下载资源
从下载OpenCV的Android SDK中http://opencv.org/downloads.html
第2步 - 复制OpenCV的二进制文件到您的APK
复制libopencv_info.so&libopencv_java.so从
OpenCV-2.?.?-android-sdk -> sdk -> native -> libs -> armeabi-v7a
至
Project Root -> Your Project -> lib - > armeabi-v7a
邮编lib文件夹并重新命名拉链到任何-v7a.jar。
复制此.jar文件,在这里将其放置在您的项目
Project Root -> Your Project -> libs
该行添加到您的项目的build.gradle相关内容部分
compile files('libs/whatever-v7a.jar')
现在,当您编译你可能会看到你的apk文件大约是4MB大。
(重复“armeabi”如果你想支持ARMv6的太多,可能没有必要了。)
第3步 - 添加Java SDK添加到项目
从这里复制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')
第4步 - 在项目中使用的OpenCV
重建,你应该能够导入并开始在项目中使用的OpenCV。
import org.opencv.android.OpenCVLoader;
...
if (!OpenCVLoader.initDebug()) {}
我知道这是否有点黑客,但我想我会反正它张贴。
Answer 4:
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
}
}
这是为我工作:)
Answer 5:
我已经张贴了关于如何建立一个Android NDK应用程序使用Android Studio和摇篮与OpenCV中包括一个新的职位。 更多信息可以看到这里 ,我总结了两种方法:
(1)运行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
更多信息可以看出这里
Answer 6:
由于OpenCV的整合是这样的努力,我们预包装,再通过JCenter它发表在这里: https://github.com/quickbirdstudios/opencv-android
只是这包括在你的模块的build.gradle依赖节
dependencies {
implementation 'com.quickbirdstudios:opencv:3.4.1'
}
这在项目的存储库的build.gradle节
repositories {
jcenter()
}
你不会得到皮棉的gradle错误导入后,但不要忘了初始化OpenCV库这样在MainActivity
public class MainActivity extends Activity {
static {
if (!OpenCVLoader.initDebug())
Log.d("ERROR", "Unable to load OpenCV");
else
Log.d("SUCCESS", "OpenCV loaded");
}
...
...
...
...
Answer 7:
它的工作原理与Android 1.2工作室的OpenCV +-2.4.11-Android的SDK文件(.zip),太。
只要做到以下几点:
1)按照与开头的回答:“你可以在Android Studio中做到这一点很容易。按照以下步骤在您的项目库中添加OpenCV的。” 通过TGMCians。
2)在修改<yourAppDir>\libraries\opencv
文件夹中新创建build.gradle
到(步骤4中TGMCians'的回答, 适于OpenCV2.4.11-Android的SDK和使用1.1.0的gradle):
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)* .so文件是位于目录"armeabi", "armeabi-v7a", "mips", "x86"
可下(默认OpenCV的定位)发现..\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\native\libs
(步骤9在TGMCians'回答)。
享受,如果这有助于,请给予肯定的评价。 我需要50直接回答的答案(19人):)
Answer 8:
这些都是使用的OpenCV采用Android 1.2工作室的必要步骤:
Answer 9:
我已经导入来自OpenCV的SDK中的Java项目到Android Studio中gradle这个项目,并使其可在https://github.com/ctodobom/OpenCV-3.1.0-Android
您可以包括它在你的项目只增加两行build.gradle
文件感谢jitpack.io服务。
Answer 10:
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 {
}
Answer 11:
下面的权限和功能是必需在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"/>
Answer 12:
OpenCV的,Android的工作室1.4.1,gradle这个实验性的插件0.2.1
其他答案都不帮我。 下面是我工作。 我使用的是从OpenCV的教程-1样,但我会在我的项目中使用NDK的,所以我用做gradle这个实验性插件,它具有不同的结构比gradle这个插件。
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管理器等版本)。 更改buildToolsVersion如果你没有做23.0.2。
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这个包装。 摇篮需要一个干净的目录来做到这一点。
pushd $(mktemp -d)
gradle wrapper --gradle-version 2.5
mv -f gradle* $OPENCV_SDK/samples/tutorial-1-camerapreview
popd
你现在应该所有设置。 现在,您可以浏览到该目录与Android Studio并打开了该项目。
建立与下面的命令在命令行上tutoral:
./gradlew assembleDebug
应该建立自己的APK,把它在./build/outputs/apk
文章来源: How to use opencv in using Gradle?