10

我最近通过 JitPack 添加了两个 Android 库,但出现以下错误:

Duplicate files copied in APK META-INF/library_release.kotlin_module

我已经清除了缓存,并尝试使用排除模块

exclude group: 'org.jetbrains'

exclude group: 'org.jetbrains.kotlin'

但似乎都没有解决问题。有什么方法可以阻止通过 JitPack 添加 kotlin stdlib?奇怪的是,像 DbFlow 这样的其他库没有这个问题,虽然我没有看到他们的设置有什么特别之处(除了它不是通过 JitPack)

4

3 回答 3

18

您应该将此添加到标签build.gradle内的应用程序文件中android

packagingOptions {
    exclude 'META-INF/library_release.kotlin_module'
}
于 2017-06-12T22:30:13.240 回答
18

正如帖子中所建议的,Kotlin M13 已经发布!通过jetbrains

确保这些 .kotlin_module 文件不会被您的打包过程剥离。

所以,我们不能使用exclude选项来排除这个资源文件的生成。

正如Kotlin M13 中所描述的那样!, 我们应该:

在 Maven 中,我们使用 groupId 和 artifactId 作为模块名称,但你可以说

<configuration>
    <moduleName>com.example.mymodule</moduleName>
</configuration>

在 Gradle 中它是项目名称 + 构建任务名称,用于自定义:

compileKotlin {
    kotlinOptions.moduleName = "com.example.mymodule"    
}

这是我对Android库项目的配置:

ext {
    GROUP_ID = 'custom.group.id'
    ARTIFACT_ID = 'artifactid'
}

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"

    compileOptions {
        kotlinOptions.freeCompilerArgs += ['-module-name', "$GROUP_ID.$ARTIFACT_ID"]
    }

    defaultConfig {
        ...
    }
    buildTypes {
        ...
    }
}

META-INF/custom.group.id.artifactId.kotlin_module将生成名为的资源文件,而不是生成META-INF/library_release.kotlin_module。不会再找到重复的文件。

您可以阅读这篇文章和这篇文章以获取更多信息。

于 2019-05-27T16:35:11.333 回答
10

在查看其他冲突之后,似乎解决方案是

packagingOptions {
    pickFirst 'META-INF/library_release.kotlin_module'
}

android应用程序gradle下。

这允许 apk 构建

于 2017-06-12T22:30:20.477 回答