Помилка введення дублікату Gradle: META-INF / MANIFEST.MF (Або як видалити файл з jar)


19

Я клонував сховище github, тому що хотів вивчити код, але коли я спробував створити його в Android Studio, у мене виникли проблеми. Після додавання репозиторію google maven (на запит Android Studio) та оновлення версії плагіна Gradle та версії Grade (до 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'
    }

Ось що я спробував поки що:

  • Додавання до розділу Android для мого файлу build.gradle:

    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 build

Нічого не працювало.

Після пошуку рішення я думаю, що проблема полягає в тому, що я скопіював залежності. Тому я спробував таке:


    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'
    }

Я все одно отримую ту саму помилку.

Може хто-небудь скажіть мені, що я роблю не так? Дякую в очікуванні :)


У мене така ж проблема тут з моїм додатком Roboyard на GitHub: stackoverflow.com/q/59130438/1069083 Може бути , ви знайдете схожість є
rubo77

Відповіді:


22

Як сказав Rajen Raiyarela , перейдіть у меню Файл-> Структура проекту-> Проект-> Версія плагіна Android Gradle та зменшіть його з 3.5.2 до 3.5.1.


8
Це справді не є рішенням. Android Studio щоразу
насувається

Ця відповідь застаріла, оскільки натомість оновлення до gradle 3.5.3, здається,
вирішило

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, якщо були дублікати, то це повинно було бути вирішене або виключенням, або першочерговим способом в упаковціOptions, але це проблема лише з плагіном Gradle. Мені ще належить зробити більш точну перевірку та створити зразок програми, щоб відновити проблему для додавання запиту в помилку для програми для студії Android.
Rajen Raiyarela

0

Або упаковуйте його один раз, або зовсім не:

android {
    packagingOptions {
        pickFirst "META-INF/MANIFEST.MF"
        // exclude "META-INF/MANIFEST.MF"
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.