按照各种指令,我似乎应该将本机库添加到app/src/main/jniLibs中,它们将自动地链接起来。但是,当我这样做(对于OpenCV)时,我会得到以下内容:
Error:duplicate files during packaging of APK /.../app/build/outputs/apk/app-debug-unaligned.apk
Path in archive: lib/armeabi/libopencv_java.so
Origin 1: /.../app/src/main/jniLibs/armeabi/libopencv_java.so
Origin 2: /.../build/intermediates/exploded-aar/AppName/.libraries/opencv/unspecified/jni/armeabi/libopencv_java.so
You can ignore those files in your build.gradle:
android {
packagingOptions {
exclude 'lib/armeabi/libopencv_java.so'
}
}
Error:Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK lib/armeabi/libopencv_java.so
File 1: /.../app/src/main/jniLibs/armeabi/libopencv_java.so
File 2: /.../app/src/main/jniLibs/armeabi/libopencv_java.so添加exclude部分不起作用。文件只有一个副本,但不知怎么的,它被引用了两次,而第二个(build)包含似乎是自动生成的。我能做什么?
发布于 2014-07-01 08:54:09
ndk-build正在从OpenCV生成所有包的副本。除了实际的应用程序库之外,我还从我的应用程序中删除了所有的.so库,然后它打包得很好。
发布于 2016-05-09 03:57:18
在重复库(*.so)文件的情况下,排除选项不会有帮助,因为我们不能完全排除本机二进制文件。在packagingOptions中还有一个选项。这是“挑选第一”。我们可以避免重复的文件错误,并包括编译器遇到的第一个错误。
packagingOptions {
pickFirst 'lib/armeabi/libopencv_java.so'
}发布于 2015-02-27 03:31:40
我也有过这个问题。这似乎是因为关于为Android设置OpenCV的文档和各种对话线程说,将JNI库放在path /src/main/jniLibs或/src/main/libs中。问题是/src/文件夹用于源代码,而不是库。解决方案是将/main/文件夹移出/src/并进入项目根,这就是Google如何记录这个项目结构:https://developer.android.com/tools/projects/index.html
我在build.gradle中还有以下设置:
android {
sourceSets {
main {
jni.srcDirs = [] //disable automatic ndk-build call
jniLibs.srcDir 'main/libs'
}
}
}https://stackoverflow.com/questions/24330366
复制相似问题