我想使用Android Studio使用Gradle构建工具开发应用程序。我无法在build.gradle
上插入OpenCV repo和库。我的.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?
答案 0 :(得分:129)
您可以在Android Studio中轻松完成此操作。
在项目主目录下创建一个libraries
文件夹。例如,如果您的项目是OpenCVExamples
,则可以创建OpenCVExamples/libraries
文件夹。
转到SDK“\ OpenCV-2.4.8-android-sdk \ sdk”的位置,在这里找到java
文件夹,将其重命名为opencv
。< / p>
现在将SDK中的完整opencv目录复制到刚刚创建的libraries文件夹中。
现在在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'
将您的项目与Gradle同步,它应该是这样的
右键单击您的项目,然后单击Open Module Settings
,然后从左侧列表中选择Modules,单击您的应用程序模块,单击Dependencies选项卡,然后单击+按钮添加一个新的模块依赖。
选择Module dependency
。它将打开一个对话框,其中包含可供选择的模块列表;选择“:libraries:opencv”。
在jniLibs
位置创建一个/app/src/main/
文件夹,并在{{1}中复制所有带* .so文件的文件夹(armeabi,armeabi-v7a,mips,x86)来自OpenCV SDK。
单击“确定”。现在一切都已完成,去享受OpenCV。
答案 1 :(得分:25)
根据OpenCV文档(1),以下使用 OpenCV管理器的步骤是将OpenCV用于生产运行的推荐方法。但是,OpenCV经理(2)是Google Play商店的额外安装。所以,如果您更喜欢自包含的apk(不使用OpenCV管理器)或者当前处于<em>开发/测试阶段,我建议您在https://stackoverflow.com/a/27421494/1180117处回答。
使用OpenCV管理器在Android Studio中使用OpenCV的建议步骤。
File -> Import Module
,在解压缩的opencv存档中选择sdk/java
文件夹。 build.gradle
以更新4个字段以匹配项目的build.gradle
a)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);
}
}
注意:在onManagerConnected
方法上收到成功回调后,您才能进行OpenCV调用。在运行期间,系统将提示您从Play商店安装OpenCV管理器(如果尚未安装)。在开发过程中,如果您无法访问Play商店或使用emualtor,请在下载的OpenCV sdk存档下的apk
文件夹中使用相应的OpenCV manager apk。
<强>赞成强>
缺点
答案 2 :(得分:9)
如果您不想使用JavaCV,这对我有用......
从http://opencv.org/downloads.html
下载OpenCV Android SDK复制libopencv_info.so&amp;来自
的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']
}
}
}
在Project Root settings.gradle文件中,将其更改为:
include ':Project Name:libs:OpenCV', ':Project Name'
在您的项目根目录中 - &gt;项目名称 - &gt;依赖项部分中的build.gradle文件添加以下行:
compile project(':Project Name:libs:OpenCV')
重建,您应该能够导入并开始在项目中使用OpenCV。
import org.opencv.android.OpenCVLoader;
...
if (!OpenCVLoader.initDebug()) {}
我知道这有点像黑客,但我想我还是会发布它。
答案 3 :(得分:7)
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
}
}
这对我有用:)
答案 4 :(得分:7)
我发布了一篇关于如何使用OpenCV构建Android NDK应用程序的新帖子 使用Android Studio和Gradle。可以看到更多信息here,我总结了两种方法:
(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
答案 5 :(得分:7)
由于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");
}
...
...
...
...
答案 6 :(得分:5)
它也适用于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.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)* .so目录"armeabi", "armeabi-v7a", "mips", "x86"
中的文件可以在(默认OpenCV位置)下找到:..\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\native\libs
(TGMCians回答中的第9步)。
享受,如果这有帮助,请给予积极的声誉。我需要50才能直接回答答案(19左):)
答案 7 :(得分:3)
这些是在Android Studio 1.2中使用OpenCV所需的步骤:
sdk/java
opencv
compileSdkVersion
和buildToolsVersion
更新为您计算机上的版本将compile project(':opencv')
添加到您的app build.gradle
dependencies {
...
compile project(':opencv')
}
按使用Gradle文件同步项目
答案 8 :(得分:2)
我已将OpenCV SDK中的Java项目导入到Android Studio gradle项目中,并在https://github.com/ctodobom/OpenCV-3.1.0-Android
处可用您可以将它包含在您的项目中,只需在build.gradle
文件中添加两行,这要归功于jitpack.io服务。
答案 9 :(得分:2)
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 {
}
答案 10 :(得分:1)
AndroidManifest.xml文件中需要以下权限和功能,否则您将获得以下对话框
&#34;您的设备似乎不支持相机(或已锁定)。申请将被关闭&#34;
<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"/>
答案 11 :(得分:0)
其他答案都没有帮助我。这对我有用。我正在使用opencv中的tutorial-1示例,但我将在我的项目中使用NDK,因此我使用的gradle-experimental插件与gradle插件的结构不同。
应安装Android工作室,Android NDK应通过Android SDK Manager安装,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浏览到此目录并打开项目。
使用以下命令在命令行上构建tutoral:
./gradlew assembleDebug
它应该构建你的apk,把它放在./build/outputs/apk