在APK META-INF / library_release.kotlin_module中复制的重复文件

时间:2017-06-12 22:23:37

标签: android kotlin conflicting-libraries

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

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

我已经清除了缓存,我尝试使用

排除模块
exclude group: 'org.jetbrains'

exclude group: 'org.jetbrains.kotlin'

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

3 个答案:

答案 0 :(得分:9)

您应该将其添加到build.gradle标记内的应用的android文件中

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

答案 1 :(得分:3)

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

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

在app gradle中的android下。

这允许apk构建

答案 2 :(得分:1)

jetbrains的帖子Kotlin M13 is out!中所建议:

  

确保打包过程未剥离这些.kotlin_module文件。

因此,我们不能使用exclude选项来排除此资源文件的生成。

Kotlin M13 is out!中所述,我们应该:

在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。将找不到更多重复的文件。

您可以阅读本post和本post以获得更多信息。