android - 如何从 Gradle 项目依赖项中排除重复的 native 库?

标签 android gradle java-native-interface android-gradle-plugin build.gradle

我有两个适用于 Android 的 Gradle 模块,一个是库,一个是应用程序,应用程序依赖于模块,如下所示:compile project(path ':library' configuration: 'debug' )

问题是两个模块都使用了JNI,所以都封装了libc++_shared.so 来自 NDK,导致:

com.android.build.api.transform.TransformException:
com.android.builder.packaging.DuplicateFileException:
Duplicate files copied in APK lib/armeabi-v7a/libc++_shared.so

我尝试使用 packagingOptions,但似乎我只能使用它来完全排除该文件被打包,而不仅仅是从其他模块复制?

最佳答案

您尝试使用哪种类型的packagingOptions?可能是排除?看起来 pickFirst 应该适合您。在这种情况下,您明确告诉 Gradle 您知道该问题并接受这些文件中的任何一个。根据您支持的体系结构,您可能只需要其中的一些行。详情可以找in documentation

android {

 // some stuff
 packagingOptions {
        pickFirst 'lib/armeabi-v7a/libgnustl_shared.so'
        pickFirst 'lib/arm64-v8a/libgnustl_shared.so'
        pickFirst 'lib/x86_64/libgnustl_shared.so'
        pickFirst 'lib/x86/libgnustl_shared.so'
    }
}

关于android - 如何从 Gradle 项目依赖项中排除重复的 native 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46103055/

相关文章:

带有 C++ 库的 Java JNI "symbol lookup error"

Android Pusher 未连接到专用 channel

java - 由于Lombok导致编译失败

android - 如何建立从 iOS Safari 到 Android Chrome 的 Webrtc 连接

android - 使用 Gradle Kotlin-DSL 时如何使用 flavorDimensions 为每种 flavor 组合设置不同的 applicationId?

java - 未捕获的翻译错误 : com. android.dx.cf.code.SimException

java - JNI GetMethodID 在 native 线程中导致错误

java - 检查是否已加载 dll 库? ( java )

android - 在 while 循环中更新 Android-UI 的最佳方式

java - 在 Android Studio 1.5 中设置 NDK 开发