web-dev-qa-db-ja.com

APK META-INF /library_release.kotlin_moduleにコピーされた重複ファイル

最近、JitPackを介して2つの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を介していないことを除いて)

8
Allan W

これをアプリのbuild.gradleファイルのAndroidタグ内に追加する必要があります

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

投稿で示唆されているように Kotlin M13が出ています! by 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という名前のリソースファイルが生成されます。重複ファイルはこれ以上見つかりません。

詳細については、これ post およびthis post を読むことができます。

9
daemon.yang

他の競合を調べた後、解決策は

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

アプリのgradleのAndroidの下。

これにより、apkをビルドできます

6
Allan W