Gradle重複エントリエラー:META-INF / MANIFEST.MF(またはjarからファイルを削除する方法)


19

コードを調べたかったのでgithubリポジトリのクローンを作成しましたが、Android Studioでそれをビルドしようとすると、いくつかの問題が発生しました。(Android Studioの指示に従って)google mavenリポジトリを追加し、Gradleプラグインのバージョンとグレードのバージョン(それぞれ3.5.2と5.4.1に)の両方を更新すると、次のエラーのためにビルドが失敗します。

原因:エントリが重複しています:META-INF / MANIFEST.MF

そして、より具体的には:

原因:java.util.zip.ZipException:重複したエントリ:META-INF / MANIFEST.MF

これが私のプロジェクトレベルのbuild.gradleファイルです。


    buildscript {
        repositories {
            jcenter()
            google()
        }

        dependencies {
            classpath 'com.android.tools.build:gradle:3.5.2'

            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }

    allprojects {
        repositories {
            jcenter()

            maven {
                url 'https://maven.google.com'
            }

        }
    }

これが私のモジュールのbuild.gradleファイルです(何かを試す前に):


    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 22
        buildToolsVersion '28.0.3'

        defaultConfig {
            applicationId "com.thelittlenaruto.supportdesignexample"
            minSdkVersion 11
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
        }

        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation ('com.android.support:appcompat-v7:22.2.1')
        implementation ('com.android.support:design:22.2.1')
        implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
    }

これが私がこれまでに試したことです:

  • モジュールのbuild.gradleファイルのandroidセクションに以下を追加します。

    sourceSets {
            main{
                java{
                    exclude '**/META-INF/MANIFEST'
                    exclude '**/META-INF/MANIFEST.MF'
                    exclude 'META-INF/MANIFEST'
                    exclude 'META-INF/MANIFEST.MF'
                    exclude '!META-INF/MANIFEST.MF'
                }
            }
        }
  • これを追加する:

    sourceSets.main.res.filter.exclude 'META-INF/MANIFEST'
        sourceSets.main.res.filter.exclude 'META-INF/MANIFEST.MF'
  • これも:

    packagingOptions {
            apply plugin: 'project-report'
            exclude '**/META-INF/MANIFEST'
            exclude '**/META-INF/MANIFEST.MF'
            exclude 'META-INF/MANIFEST'
            exclude 'META-INF/MANIFEST.MF'
            exclude '!META-INF/MANIFEST.MF'
        }
  • この:

    packagingOptions {
            pickFirst '**/META-INF/MANIFEST'
            pickFirst '**/META-INF/MANIFEST.MF'
            pickFirst 'META-INF/MANIFEST'
            pickFirst 'META-INF/MANIFEST.MF'
            pickFirst '!META-INF/MANIFEST.MF'
        }
  • この:

    aaptOptions {
            ignoreAssetsPattern "!META-INF/MANIFEST.MF"
            ignoreAssetsPattern "META-INF/MANIFEST.MF"
        }

私はこの質問のほとんどすべてを試したと思います: Android Studio Gradleビルドから特定のファイルを除外する方法は?

何もうまくいきませんでした。

解決策を探したところ、依存関係が重複していることが問題だと思います。だから私は以下を試しました:


    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation ('com.android.support:appcompat-v7:22.2.1'){
            exclude module: 'support-v4'
        }
        implementation ('com.android.support:design:22.2.1')
        implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
    }

この:


    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation ('com.android.support:design:22.2.1'){
            exclude module: 'support-v7'
        }
        implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
    }

それでも同じエラーが発生します。

誰か私が間違っていることを教えてもらえますか?よろしくお願いします。:)


私はGitHubの上で私のアプリRoboyardとここに同じ問題を抱えている:stackoverflow.com/q/59130438/1069083は たぶん、あなたはそこに類似点を見つける
rubo77を

回答:


22

以下のようRajen Raiyarelaは言った、ファイル- >プロジェクト構造- >プロジェクト- >アンドロイドのGradleプラグインのバージョンにアクセスして、3.5.2から3.5.1にダウングレード。


8
これは本当に解決策ではありません。Android Studioは毎回アップグレードするのに
苦労


6

プロジェクトの依存関係を次のように設定します。

classpath 'com.android.tools.build:gradle:3.5.3'

または最新のもの。

注:これを行うことで、私の問題は解決されました。


gradle 3.5.2に関する私の問題は3.5.3でも解決されていますが、注意してください。「このビルドでは非推奨のGradle機能が使用されていたため、Gradle 6.0と互換性がありません。」
rubo77

1

この問題は、依存関係が重複しているために発生しています。
Gradleアプリで複数の依存関係を確認します。


正解、これが問題です。
Gradle

1
@Srinivasan、重複がある場合、packageingOptionsでexcludeまたはpickfirstのいずれかによって解決されているはずですが、Gradleプラグインでのみ問題が発生します。Androidスタジオのバグトラッカーにリクエストを追加するための問題を再生成するためのサンプルアプリを作成して、より正確に検証することはまだしていません。
Rajen Raiyarela

0

一度パッケージするか、まったくパッケージしないかのどちらかです。

android {
    packagingOptions {
        pickFirst "META-INF/MANIFEST.MF"
        // exclude "META-INF/MANIFEST.MF"
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.