我正在使用OpenCV(C而不是Java)开发一个新的Android应用程序,我是opencv和NDK的新手.我使用下面的Gradle文件成功构建(并运行),在Android Studio中我可以选择一个变体并点击构建(例如x86).
我有两个问题:
>我有没有办法建立一个支持所有架构的APK? (我知道文件大小会更大)
>我可以实现构建而不为每个变体指定所有相同的库.有没有什么办法可以让构建系统每次都拿起库,因为它们都在项目内部并按体系结构名称组织?
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.0.0"
defaultConfig {
applicationId "uk.co.xxx.androidcppimagereader"
minSdkVersion 17
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
def libsDir = projectDir.path + "/libs/"
productFlavors {
x86 {
versionCode Integer.parseInt("3" + defaultConfig.versionCode)
ndk {
abiFilter "x86"
moduleName "Processing"
stl "gnustl_static"
cFlags "-I/opt/local/include/opencv -I/opt/local/include"
ldLibs libsDir + "x86/libopencv_core.a"
ldLibs libsDir + "x86/libopencv_ts.a"
ldLibs libsDir + "x86/libopencv_contrib.a"
ldLibs libsDir + "x86/libopencv_ml.a"
ldLibs libsDir + "x86/libopencv_java.so"
ldLibs "log"
ldLibs "z", "jnigraphics"
}
}
armv7 {
versionCode Integer.parseInt("2" + defaultConfig.versionCode)
ndk {
abiFilter "armeabi-v7a"
moduleName "Processing"
stl "gnustl_static"
cFlags "-I/opt/local/include/opencv -I/opt/local/include"
ldLibs libsDir + "armeabi-v7a/libopencv_core.a"
ldLibs libsDir + "armeabi-v7a/libopencv_ts.a"
ldLibs libsDir + "armeabi-v7a/libopencv_contrib.a"
ldLibs libsDir + "armeabi-v7a/libopencv_ml.a"
ldLibs libsDir + "armeabi-v7a/libopencv_java.so"
ldLibs "log"
ldLibs "z", "jnigraphics"
}
}
arm {
versionCode Integer.parseInt("1" + defaultConfig.versionCode)
ndk {
abiFilter "armeabi"
moduleName "Processing"
stl "gnustl_static"
cFlags "-I/opt/local/include/opencv -I/opt/local/include"
ldLibs libsDir + "armeabi/libopencv_core.a"
ldLibs libsDir + "armeabi/libopencv_ts.a"
ldLibs libsDir + "armeabi/libopencv_contrib.a"
ldLibs libsDir + "armeabi/libopencv_ml.a"
ldLibs libsDir + "armeabi/libopencv_java.so"
ldLibs "log"
ldLibs "z", "jnigraphics"
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
}
解决方法:
在build.gradle文件中定义了计划包含在apk中的所有体系结构之后,请使用关键字“fat”,如下面的代码中突出显示的那样.这将构建FAT二进制文件.观看此视频了解更多详情https://www.youtube.com/watch?v=kFtxo7rr2HQ
arm {
versionCode Integer.parseInt("1" + defaultConfig.versionCode)
ndk {
abiFilter "armeabi"
moduleName "Processing"
stl "gnustl_static"
cFlags "-I/opt/local/include/opencv -I/opt/local/include"
ldLibs libsDir + "armeabi/libopencv_core.a"
ldLibs libsDir + "armeabi/libopencv_ts.a"
ldLibs libsDir + "armeabi/libopencv_contrib.a"
ldLibs libsDir + "armeabi/libopencv_ml.a"
ldLibs libsDir + "armeabi/libopencv_java.so"
ldLibs "log"
ldLibs "z", "jnigraphics"
}
fat // <- HERE
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。