将.so文件添加到Android Studio中的jniLibs:在打包APK期间重复文件

fre*_*ley 4 android opencv android-studio

按照各种说明,似乎我应该添加本机库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
Run Code Online (Sandbox Code Playgroud)

添加该exclude部分不起作用.该文件只有一个副本,但不知何故它被引用了两次,而且似乎第二个(build)包含是自动生成的.我能做什么?

小智 5

如果存在重复的库(*.so)文件,则排除选项将无济于事,因为我们无法完全排除本机二进制文件.packagingOptions还有一个选项.这是'pickFirst'.我们可以避免重复文件错误,并包括编译器遇到的第一个错误.

packagingOptions {    
    pickFirst 'lib/armeabi/libopencv_java.so'
}
Run Code Online (Sandbox Code Playgroud)


fre*_*ley 1

ndk-build正在从 OpenCV 生成所有包的副本。除了我的实际应用程序库之外,我从应用程序中删除了所有.so库,然后它就很好地打包了。