Було знайдено більше одного файлу з незалежною ОС "META-INF / LICENSE"


332

Під час створення програми я отримую таку помилку:

Помилка: Не вдалося виконати завдання ": 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)

У кого є ідеї, як це вирішити?


Я зіткнувся з тією ж проблемою, коли звертався до клієнтської бібліотеки API для Android. Вирішено проблему, виключивши модуль HttpClient із залежностей градусів. Див документів 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"? Дякую!
Shreshth Kharbanda

@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") у список
пакунківОпції

129

У моєму випадку достатньо було виключити yourProject/app/build.gradleвсередину лише шлях "META-INF / DEPENDENCIES" android{} . Ось

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

Потім виконайте проект «Очистити проект» та відновити проект.


11
Спробуйте виключити "META-INF / DEPENDENCIES", а не виключити "META-INF / LICENSE"
Pelanes

7
Пояснення будь ласка
Мохаммед Алі

1
@SilSur виключає той файл, який, таким чином, ви помиляєтесь, як і в моєму коді, однакову помилку для "META-INF / proguard / androidx-annotations.pro" цього файлу, і тоді я додав виключити 'META-INF / proguard / androidx-анотації. про 'та її робота.
Gunavant Patel

4
Хоча це може відповісти на питання, краще додати деякий опис того, як ця відповідь може допомогти вирішити проблему. Прочитайте, будь ласка, як мені написати гарну відповідь, щоб дізнатися більше.
Рошана Пітігала

Вам не потрібно чистити просто синхронізувати файли gradle
steve moretz

75

Рішення тут мені не допомогли, але це посилання все- таки зробило.

Якщо у вас є бібліотека, яка додає деякі андроїд-файли .so-like 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 і після додавання PackaOptions для бібліотеки він працює зараз.
Містер Риб

1
Дякую! Допоміг, коли в мене була армія JNA, як вкладена залежність
faisal00813

31

Було подібне повідомлення

Помилка: Не вдалося виконати для завдання ': app: transformResourcesWithMergeJavaResForDebug'. Було знайдено більше одного файлу з незалежним контуром OS 'permanent-values.html'

Щоб вирішити це, мені довелося включити перегляд пакетів ( 1 ) в Android Studio, потім переглядати дерево в бібліотеках та знаходити дублікати ( 2 )

Потім, ctrl + alt + f12 (або меню RMB) ( 3 ) - і знайшов бібліотеки, які викликали проблему. Склав список файлів всередині цих файлів, які спричинили проблеми, і записав їх у файл build.gradle програми app у розділі Android . Інший варіант - мати справу з бібліотекою, що містить дублікати файлів

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

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


1
Як ви "потім переглядаєте дерево в бібліотеках та знаходите дублікати"? Ви справді переглядали всі файли у всіх папках?
андроїд розробник

1
Мене також бентежить "знайти дублікати". Можливо, у додатку / бібліотеках є 100 підкаталогів ... як можна шукати дублікати?
Freewalker

28

В основному, коли gradle з'єднує файл apk, він копіює вміст з усіх залежностей від компіляції. Він досить розумний, щоб побачити, що існує два копії файлу, що надходить з двох різних файлів jar. Це може бути будь-який файл на зразок a.txt або META-INF / DEPENDENCIES. Можливо, найкраще виключити ці файли, використовуючи наведене нижче, якщо файл там присутній лише в інформаційних цілях.

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

Або якщо у випадку, файл - це обов'язковий файл, як файл класу, який дублюється через дві залежності один від одного, залежно один від одного, найкраще знайти альтернативи цим банкам, як більш сумісну версію.


Коли я додаю це до свого проекту, я отримую ще одну помилку, яку я знову не в змозі вирішити! Будь-яке інше рішення?
hetsgandhi

Хетві Ганді, яка помилка ви бачите?
анк

20

У мене була така ж проблема, і я спробував це

Помилка: було знайдено більше одного файлу з незалежним ОС "META-INF / proguard / androidx-annotations.pro"

Рішення. Все, що вам потрібно зробити, щоб виправити це, - додати це до розділу Android {} у програмі 'build.gradle' програми.

packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
}

18

Це відбувається при використанні

org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.2.0

І фіксується в наступній версії

org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.2.1


1
аналогічна проблема з org.jetbrains.kotlinx: kotlinx-coroutines-core: 1.3.6, що є останнім на сьогодні. довелося понизити число
farhan patel

Так, той же випуск 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'
    }

}

Про це сказано в сотнях інших відповідей на SO
Atul

11

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

android {
    defaultConfig {
    }
    buildTypes {
    }
    packagingOptions{
        exclude 'META-INF/rxjava.properties'
    }
}

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, які можуть бути схожими за назвою та форматом. Вони спричиняють видачу дублікатів файлів, тому їх потрібно видалити.
Abhinav Саксен

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.

По-друге, я зрозумів, що у мене є деякі залежності у файлі gradle. Я використовував наведений нижче код

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

а також у мене були такі самі поштові пакети в розташуванні: \ Users \ user \ AndroidStudioProjects \ git \ appname \ app \ libs \ google-http-client-1,23 !.

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

По-третє, gradle також робить блискавку з цих файлів помилок у цьому місці (принаймні для мене це зробили) - 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 також звідси.

Якщо ви все ще плутаєтеся, просто перейдіть на "пошук скрізь" в андроїд-студії, знайдіть там екземпляри свого файлу, і вам доведеться видалити один з них. Знайдіть свій час і з’ясуйте, який саме.


3

Додавання

android.useAndroidX = вірно

android.enableJetifier = вірно

to gradle.properties працював на мене.


1

Я зіткнувся з цим питанням спочатку з деякими рідними бібліотеками (.so файлами), а потім із файлами java / kotlin. Виявилось, я включав бібліотеку з джерела, а також посилався на артефактор через перехідну залежність. Перевірте своє дерево залежності, щоб побачити, чи є зайві записи. Використовуйте ./gradlew :app:dependenciesдля отримання дерева залежності. Замініть "додаток" на ім'я вашого модуля, якщо назва головного модуля інша.


1

Спробуйте змінити мінімальну версію Android> = 21 у своєму андроїді build.gradle {}


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

Спробуйте видалити мультидекс з конфігурації за замовчуванням і перевірте журнал помилок побудови. Якщо цей журнал пов'язаний із класом 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 він знову відновив частину мого проекту і проблему вирішено.


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

У багатьох відповідях на цю проблему пропонується додати, 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

Вам потрібно просто вимкнути кеш і перезапустити , після цього Очистити проект

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.