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



我最近通过 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 的(

正如帖子中所建议的 Kotlin M13 已经出来了! by jetbrains

确保打包过程不会剥离这些.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 。不会再找到重复的文件。

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

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

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

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

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

在应用格拉德尔中的android下。

这允许 apk 构建

相关内容

  • 没有找到相关文章

最新更新