Найдено несколько файлов с независимым от ОС путем «META-INF / LICENSE»

333

Когда я создаю свое приложение, я получаю следующую ошибку:

Ошибка: не удалось выполнить задачу ': app: transformResourcesWithMergeJavaResForDebug'. Найдено несколько файлов с независимым от ОС путем «META-INF / LICENSE»

Это мой файл build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "cn.sz.cyrus.kotlintest"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        javaCompileOptions{
            annotationProcessorOptions{
                includeCompileClasspath = true
            }
        }
        multiDexEnabled true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
 /*       exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'*/
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    compile 'com.github.GrenderG:Toasty:1.2.5'
    compile 'com.orhanobut:logger:1.15'

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.umeng.analytics:analytics:latest.integration'
    compile 'ai.api:libai:1.4.8'
    compile 'ai.api:sdk:2.0.5@aar'
// api.ai SDK dependencies
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'commons-io:commons-io:2.4'
    compile 'com.android.support:multidex:1.0.1'
}

Когда я добавляю этот код в мой файл build.gradle,

  packagingOptions {
            exclude 'META-INF/DEPENDENCIES'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE.txt'
        }

Эта ошибка будет решена, но возникнет другая проблема. Как это:

java.lang.NoClassDefFoundError: com.squareup.leakcanary.internal.HeapAnalyzerService
at com.squareup.leakcanary.LeakCanary.isInAnalyzerProcess(LeakCanary.java:145)
at cn.sz.cyrus.wemz.TestApplication.onCreate(TestApplication.kt:32)

У кого есть идеи как это решить?

Кир
источник
Я столкнулся с той же проблемой при доступе к клиентской библиотеке Google API для Android. Решил проблему, исключив модуль HttpClient из зависимостей gradle. См документов Google для более подробной информации developers.google.com/api-client-library/java/... искать страницу Документов с «На Android, вам нужно будет явно исключить неиспользуемые зависимости:»
mifthi

Ответы:

493

Вы можете добавить это yourProject/app/build.gradleвнутриandroid{}

android {      
      packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        exclude("META-INF/*.kotlin_module") 
      }          
}
Шаабан Эбрахим
источник
23
Не могли бы вы объяснить, почему это работает и что означает «META-INF»? Спасибо!
Шрешт Харбанда
@CodeSlave вызывает некоторые проблемы с apk, если мы не исключили эти файлы из google.github.io/android-gradle-dsl/current/… Исключить Пути, соответствующие шаблону исключения, не будут включены в APK. это все, что я знаю. я не имею полного представления об этой проблеме
Шаабан Ибрагим
11
Хотя это может ответить на вопрос, лучше добавить описание того, как этот ответ может помочь решить проблему. Пожалуйста, прочитайте Как мне написать хороший ответ, чтобы узнать больше.
Рошана Питигала
3
В моем случае мне также нужно было добавить «META-INF / LICENSE.md» и «META-INF / LICENSE-notice.md»
Klyner
1
Добавить исключение ( "META-INF / * kotlin_module.") В списке packaginOptions
Jaspal
129

В моем случае этого было достаточно, чтобы исключить только путь «META-INF / DEPENDENCIES» yourProject/app/build.gradleвнутри android{} . Вот

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

А затем сделать Чистый проект и перестроить проект.

Mara
источник
11
Попробуйте исключить «META-INF / DEPENDENCIES», вместо этого исключите «META-INF /
LICENSE
7
Пояснения пожалуйста
Мохаммед Али
1
@SilSur исключить этот файл, который, таким образом, вы по ошибке, как в моем коде та же ошибка для «META-INF / proguard / androidx-annotations.pro» этого файла, а затем я был добавлен исключить «META-INF / proguard / androidx-annotations. Pro 'и его работа.
Гюнавант Патель
4
Хотя это может ответить на вопрос, лучше добавить описание того, как этот ответ может помочь решить проблему. Пожалуйста, прочитайте Как мне написать хороший ответ, чтобы узнать больше.
Рошана Питигала
Вам не нужно чистить, просто синхронизируйте файлы Gradle
Стив Моретц,
75

Решения здесь не помогли мне, но эта ссылка сделала.

Если у вас есть библиотека, в которую добавляются некоторые файлы Android .so - как libassmidi.soили libgnustl_shared.so- вы должны указать gradle, что при упаковке нужно выбрать только одну, иначе вы получите конфликт.

android {
  packagingOptions {
    pickFirst 'lib/armeabi-v7a/libassmidi.so'
    pickFirst 'lib/x86/libassmidi.so'
  }
}

У меня возникла эта проблема при использовании приложения React Native в качестве библиотеки в проекте Android. Надеюсь, поможет

Даниэль Рейна
источник
2
Спасибо, у меня была такая же проблема только с одним .so файлом. В этой же папке есть еще один файл с именем gdbserver, и после добавления опции PackagingOptions для библиотеки он теперь работает.
Мистер Фиш
1
Спасибо! Помогли, когда у меня был JNA Aar как вложенная зависимость
faisal00813
31

Было похожее сообщение

Ошибка: не удалось выполнить задачу ': app: transformResourcesWithMergeJavaResForDebug'. Найдено несколько файлов с независимым от ОС путем «constant-values.html»

Чтобы решить эту проблему, мне пришлось включить просмотр пакетов ( 1 ) в Android Studio, затем просмотреть дерево в библиотеках и найти дубликаты ( 2 )

Затем, Ctrl + Alt + F12 (или меню RMB) ( 3 ) - и нашел библиотеки, которые вызвали проблему. Составил список файлов внутри этих библиотек, которые вызвали проблемы, и записал их в файл build.gradle приложения в разделе Android . Другой вариант - разобраться с библиотекой, содержащей дубликаты файлов.

packagingOptions {
    exclude 'allclasses-frame.html'
    exclude 'allclasses-noframe.html'
    <..>

введите описание изображения здесь

Дмитрий Чичук
источник
1
Как вы «затем просматриваете дерево в библиотеках и находите дубликаты»? Вы действительно просмотрели все файлы во всех папках?
Android-разработчик
1
Я также смущен "найти дубликаты". В приложении / Библиотеки может быть около 100 подстатей ... как найти дубликаты?
Freewalker
28

По сути, когда gradle собирает файл apk, он копирует содержимое из всех зависимостей компиляции. Он достаточно умен, чтобы увидеть, что есть дубликат файла ..coming из двух разных файлов jar. Это может быть любой файл, такой как .txt или META-INF / DEPENDENCIES. Возможно, было бы лучше исключить эти файлы, используя приведенные ниже, если файл присутствует там только в ознакомительных целях.

android{
    packagingOptions {
       exclude 'META-INF/DEPENDENCIES'
    }
}

Или, если в этом случае файл является обязательным файлом, таким как файл класса, который был продублирован по двум зависимостям jar, которые связаны друг с другом, лучше найти альтернативы этим jar-файлам в виде более совместимой версии.

апк
источник
Когда я добавляю это в свой проект, я получаю еще одну ошибку, которую я снова не могу устранить! Любое другое решение?
Хетсганди
Хетви Ганди, какую ошибку ты видишь?
апк
20

У меня была такая же проблема, и я попробовал это

Ошибка: найдено несколько файлов с независимым от ОС путем «META-INF / proguard / androidx-annotations.pro»

Решение: все, что вам нужно сделать, чтобы это исправить, это добавить его в раздел android {} в build.gradle вашего приложения.

packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
}
Апурва джайн
источник
18

Это происходит при использовании

org.jetbrains.kotlinx: kotlinx-сопрограмма-ядро: 1.2.0

И исправлено в следующей версии

org.jetbrains.kotlinx: kotlinx-сопрограмма-ядро: 1.2.1

Vairavan
источник
1
аналогичная проблема с org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.3.6, которая является самой последней на данный момент. пришлось понизить
Фархан Патель
Ага, тот же вопрос на 1.3.6
Шефченко
17

Я столкнулся с одной и той же ошибкой и обнаружил, что она возникла из-за того, что разные модули содержали одни и те же классы из разных пакетов .

Например, один использованный пакет androidx, а другой использованный до androidx

Я решил эту проблему, перенеся модуль pre-androidx на androidx, используя встроенную функцию Android Studio: «Refactor -> Migrate to Androidx ...», не исключая ничего.


В вашей ситуации вы можете проверить наличие несоответствий между модулями.

Оуэн Чен
источник
1
Не забудьте сделать резервную копию текущей версии вашего проекта, так как переход на AndroidX может сломать ваш проект!
Катир
12

Я прочитал все ответы, связанные с получением этого сообщения Android Studio:

Найдено несколько файлов с независимым от ОС путем «META-INF / LICENSE»

но в этом случае исключение классов не является необходимым, нам нужно только исключить 'META-INF/DEPENDENCIES', это можно сделать внутри /app/build.gradle:

android{
    ...
    ...
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
    }

}
Jorgesys
источник
Это же было сказано в сотнях других ответов на SO
Атул
11

Я обновил Studio с Java 7 до Java 8, и эта проблема возникла. Тогда я решил это так:

android {
    defaultConfig {
    }
    buildTypes {
    }
    packagingOptions{
        exclude 'META-INF/rxjava.properties'
    }
}
Manasvi
источник
8

В моем приложении я добавляю зависимости jar следующим образом:

implementation files('libs/json-simple-1.1.1.jar')

Но я понял, что они уже были добавлены из-за следующей первой строки в зависимостях:

implementation fileTree(include: ['*.jar'], dir: 'libs')

Эта строка добавляет все фляги в папке lib к зависимости приложения.

Следовательно, после удаления дополнительной зависимости implementation files('libs/json-simple-1.1.1.jar')

это работает нормально.

Сандип Йоханс
источник
Это полезно, но не связано с ответом. В библиотеках вы найдете файлы метапапок META-INF, которые могут быть похожими по имени и формату. Они вызывают проблему дубликата файла, следовательно, должны быть удалены.
Абхинав Саксена
7

Я столкнулся с аналогичной проблемой, работая в среде приложений с несколькими модулями:

Ошибка: не удалось выполнить задачу ': app: transformResourcesWithMergeJavaResForDebug'. Найдено несколько файлов с независимым от ОС путем «META-INF / AL2.0»

Эта проблема была обнаружена несколькими моими модулями, и ни одно из вышеуказанных решений ее не исправляло. Оказывается, я использовал версию Coroutines 1.3.6, которая, казалось, встраивала META-INF / AL2.0, которая уже была встроена другой из библиотек, которые я использовал. Чтобы это исправить, я добавил следующий фрагмент кода в build.gradle модуля, который не работал:

configurations.all {
    resolutionStrategy {
        exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug"

    }
}

Учитывая, что это происходило в нескольких модулях, я переместил этот resolutionStrategyкод на мой уровень проекта build.gradle. После этого все заработало.

Фред Б.
источник
4

У меня та же проблема, и я попробовал это

Ошибка: найдено более одного файла с независимым от ОС путем «META-INF / library_release.kotlin_module»

Решение:

android {
    packagingOptions {
    exclude 'META-INF/library_release.kotlin_module'
    }
}
Бхавеш Морадия
источник
3

У меня была похожая проблема. я получаю сообщение об ошибке -

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.

More than one file was found with OS independent path 'javax/annotation/WillCloseWhenClosed.java'

Как указано в некоторых ответах выше, использование приведенного ниже кода работает

'packagingOptions {
       exclude 'allclasses-frame.html'
    }'

Но я получал эту ошибку для 20 разных файлов, поэтому после исключения 20 файлов я остановился и попытался найти достойное решение. Я также столкнулся с

'Unable to execute dex: Multiple dex files' error.

Мне наконец удалось решить это.

Во-первых (как в моем случае WillCloseWhenClosed.java был дубликатом файла), в андроид-студии у вас есть возможность «искать везде». Написать и найти файл там. Там я нашел несколько экземпляров этого файла. Поэтому я нажал на оба экземпляра и увидел их местоположение, щелкнув правой кнопкой мыши по файлу и увидев его местоположение, когда они открывались в Android Studio.

Во-вторых, я понял, что у меня есть некоторые зависимости в файле Gradle. Я использовал приведенный ниже код

dependencies {
    compile 'com.google.api-client:google-api-client:1.23.0'
}

а также у меня были такие же zip-пакеты в папке: \ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1.23 !.

Так что это было излишним, и поэтому gradle находит 2 файла. Таким образом, я удалил свои пакеты почтового индекса, и это решило ошибки для меня. Будьте осторожны при этом. Вы должны выяснить, какой файл или пакет является правильным для удаления.

В-третьих, gradle также создает zip из этих файлов ошибок в этом месте (по крайней мере, для меня это было сделано) - C: \ Program Files \ Android \ Android Studio \ gradle \ m2repository \ com \ google \ code \ findbugs \ jsr305 \ 1.3. 9 \ jsr305-1.3.9.jar!

поэтому я пошел и удалил файл jsr305-1.3.9.jar отсюда также.

Если вы все еще в замешательстве, просто воспользуйтесь поиском везде в Android Studio, найдите там экземпляры вашего файла и вам придется удалить один из них. Не торопитесь и выясните, какой.

Vi012
источник
3

Добавление

android.useAndroidX = TRUE

android.enableJetifier = TRUE

чтобы gradle.properties работал для меня.

Параг Джайн
источник
1

Я столкнулся с этой проблемой, сначала с некоторыми нативными библиотеками (.so файлами), а затем с файлами java / kotlin. Оказалось, что я включал библиотеку из источника, а также ссылался на артефакт через транзитивную зависимость. Проверьте ваше дерево зависимостей, чтобы увидеть, есть ли какие-либо избыточные записи. Используйте ./gradlew :app:dependenciesдля получения дерева зависимостей. Замените «app» на имя вашего модуля, если имя основного модуля отличается.

ben_joseph
источник
1

Попробуйте изменить минимальную версию Android> = 21 в вашем build.gradle android {}

Джемт Тинхва
источник
1

Добавить следующее в файл уровня приложения уровня внутри Android {}

packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        exclude("META-INF/*.kotlin_module") 
      } 
Мирза Ахмед Байг
источник
0

Попробуйте удалить multidex из конфигурации по умолчанию и проверьте журнал ошибок сборки. Если этот журнал может быть связан с классом INotification. Используйте это в Android {}

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

Это помогает мне.

Суровый Миттал
источник
0

Для меня ниже решение работало, вы тоже можете получить помощь, я написал ниже строку в файле Gradle приложения

  packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
Джайкишан Севак
источник
0

Я был подключен, но мой проект уже был перенесен на AndroidX, но после повторной миграции на androidX он изменил часть моего проекта, и проблема была решена.

SinaMN75
источник
0

Добавьте приведенный ниже код в app.gradle, это решит все ошибки зависимости библиотеки

   packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/ASL2.0'
    exclude("META-INF/*.kotlin_module")
    exclude 'META-INF/library_release.kotlin_module'
    pickFirst 'lib/armeabi-v7a/libavdevice.so'
    pickFirst 'lib/armeabi/libavdevice.so'
    pickFirst 'lib/armeabi/libswresample.so'
    pickFirst 'lib/armeabi-v7a/libswresample.so'
    pickFirst 'lib/armeabi/libswscale.so'
    pickFirst 'lib/armeabi/libavcodec.so'
    pickFirst 'lib/armeabi-v7a/libavutil.so'
    pickFirst 'lib/armeabi/libavutil.so'
    pickFirst 'lib/armeabi-v7a/libavformat.so'
    pickFirst 'lib/armeabi/libavfilter.so'
    pickFirst 'lib/armeabi/libavformat.so'
    pickFirst 'lib/armeabi-v7a/libavcodec.so'
    pickFirst 'lib/armeabi-v7a/libswscale.so'
    pickFirst 'lib/armeabi/libpostproc.so'
    pickFirst 'lib/armeabi-v7a/libpostproc.so'
    pickFirst 'lib/armeabi-v7a/libavfilter.so'
}
Санджай
источник
-1

для меня это был .md, а не .txt

packagingOptions {
    exclude 'META-INF/LICENSE.md'
    exclude 'META-INF/NOTICE.md'
}
Амин Кешаварзян
источник
-1

Во многих ответах на SO по этой проблеме было предложено добавить exclude 'META-INF/DEPENDENCIES'и некоторые другие исключения. Однако ни один из них не работал для меня. В моем случае сценарий был такой:

Я добавил это в зависимости:

implementation 'androidx.annotation:annotation:1.1.0'

А также я добавил это в gradle.properties:

android.useAndroidX=true

Оба из них я добавил, потому что я получал ошибку сборки «не могу найти класс символов Nullable», и это было предложено в качестве решения этой проблемы на некоторых из ответов, как здесь

Однако, в конце концов я попал в ошибку:

 More than one file was found with OS independent path 'androidsupportmultidexversion.txt'

Нет excludeработал на меня. Наконец, я просто удалил эти добавленные строки просто из подозрения (Решено 'не может найти класс символов Nullable' каким-то альтернативным способом) и, наконец, я избавился от этой ошибки "Более одного файла было найдено с ОС ...". Я потратил впустую свои часы. Но в конце концов избавился от этого.

Атула
источник
-1

Вам просто нужно сделать Invalidate Cache & Restart , после этого Clean Project

E.Akkok
источник