在OS独立路径'META-INF/LICENSE'中找到多个文件

Cyr*_*rus 270 android gradle build.gradle

当我构建我的应用程序时,我得到了跟随错误.

错误:任务':app:transformResourcesWithMergeJavaResForDebug'的执行失败.在OS独立路径'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'
}
Run Code Online (Sandbox Code Playgroud)

当我将这些代码添加到我的gradle文件中时.

  packagingOptions {
            exclude 'META-INF/DEPENDENCIES'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE.txt'
        }
Run Code Online (Sandbox Code Playgroud)

这个错误将被解决,但另一个问题将会发生.像这样

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)
Run Code Online (Sandbox Code Playgroud)

谁有想法如何解决这个问题?

Sha*_*him 398

你可以在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'
      }          
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然这可能会回答这个问题,但最好添加一些关于此答案如何帮助解决问题的描述。请阅读[_如何写出一个好的答案_](https://stackoverflow.com/help/how-to-answer) 以了解更多信息。 (41认同)
  • 这有效但你可以解释一下原因 (17认同)
  • 你能解释一下为什么这有效以及"META-INF"的含义是什么?谢谢! (9认同)
  • @CodeSlave 如果我们没有从 https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html 中排除这些文件,它会导致 apk 出现问题排除 与排除模式匹配的路径将不会包含在 APK 中。我只知道这些。我对这个问题还没有完全的了解 (3认同)
  • 就我而言,我还需要添加“ META-INF / LICENSE.md”和“ META-INF / LICENSE-notice.md” (2认同)
  • 在 packaginOptions 列表中添加 except("META-INF/*.kotlin_module") (2认同)

Mar*_*ara 97

在我的情况下,仅在yourProject/app/build.gradle内部排除路径'META-INF/LICENSE'就足够了android{} .这里是

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}
Run Code Online (Sandbox Code Playgroud)

然后做清洁项目和重建项目.

  • 尝试排除'META-INF/DEPENDENCIES'而不是排除'META-INF/LICENSE' (11认同)
  • 请解释 (5认同)
  • 虽然这可能会回答这个问题,但最好添加一些关于此答案如何帮助解决问题的描述。请阅读[_如何写出一个好的答案_](https://stackoverflow.com/help/how-to-answer) 以了解更多信息。 (4认同)
  • @SilSur 排除了那个文件,所以你在我的代码中出现了错误,就像我的代码一样,“META-INF/proguard/androidx-annotations.pro”这个文件的错误,然后我添加了 exclude 'META-INF/proguard/androidx-annotations。 pro' 及其工作。 (3认同)

Dan*_*ina 70

这里的解决方案对我没有帮助,但这个链接确实如此.

如果你有一个库添加一些android .so文件 - libassmidi.so或者libgnustl_shared.so- 你必须告诉gradle在打包时只选择一个,否则你会得到冲突.

android {
  packagingOptions {
    pickFirst 'lib/armeabi-v7a/libassmidi.so'
    pickFirst 'lib/x86/libassmidi.so'
  }
}
Run Code Online (Sandbox Code Playgroud)

在使用React Native应用程序作为Android项目中的库时,我遇到了这个问题.希望能帮助到你

  • 谢谢,我只有一个 .so 文件时遇到了同样的问题。在同一个文件夹中有另一个名为 gdbserver 的文件,在为库添加了 PackagingOptions 后,它现在可以工作了。 (2认同)

小智 34

我在多模块应用程序环境中遇到了类似的问题:

错误:任务“: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"

    }
}
Run Code Online (Sandbox Code Playgroud)

鉴于它发生在多个模块上,我已将该resolutionStrategy代码移至我的项目级别 build.gradle。之后一切正常。


Dmi*_*huk 30

有类似的消息

错误:任务':app:transformResourcesWithMergeJavaResForDebug'的执行失败.使用OS独立路径'constant-values.html'找到多个文件

要解决它,我必须在Android Studio中启用包视图(1),然后浏览树到库,找到重复项(2)

然后,ctrl + alt + f12(或RMB菜单)(3) - 找到导致问题的库.制作导致问题的libs中的文件列表,并将它们写入android部分内的app的build.gradle文件中.其他选项是处理包含重复文件的库

packagingOptions {
    exclude 'allclasses-frame.html'
    exclude 'allclasses-noframe.html'
    <..>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 您如何“然后通过树浏览到库,并找到重复项”?你真的检查了所有文件夹中的所有文件吗? (4认同)
  • 我也对“定位重复项”感到困惑。应用程序/库中可能有 100 个子条目……如何定位重复项? (2认同)

Yog*_*dra 29

对于 Gradle 7.2 及更高版本 添加应用内 Gradle 文件

android {
  
   packagingOptions {
       resources.excludes.add("META-INF/*")
   }


}
Run Code Online (Sandbox Code Playgroud)


Mir*_*aig 25

在 android{} 内的应用级 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") 
} 

     
Run Code Online (Sandbox Code Playgroud)


Kar*_*ram 24

基本上当gradle将apk文件放在一起时,它会复制所有编译依赖项中的内容,它足够智能,可以看到来自两个不同jar文件的重复文件.来自两个不同的jar文件.这可以是任何文件,如a.txt或META-INF/DEPENDENCIES.最好使用以下内容排除这些文件,以防文件存在时仅用于提供信息.

android{
    packagingOptions {
       exclude 'META-INF/DEPENDENCIES'
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果以防万一,该文件是类文件这样的强制文件,它是在两个相互关联的jar依赖项之间复制的,最好以更兼容的版本的方式找到这些jar的替代品.


Tec*_*hAJ 20

我有同样的问题,我试过这个

错误:在OS独立路径'META-INF/proguard/androidx-annotations.pro'中找到多个文件

解决方案: 要解决此问题,您需要做的就是将其添加到应用程序"build.gradle"中的android {}部分

packagingOptions {
    exclude 'META-INF/proguard/androidx-annotations.pro'
}
Run Code Online (Sandbox Code Playgroud)


Owe*_*hen 17

我遇到了同样的错误,我发现它是由不同的模块包含来自不同包的相同类.

例如,一个使用了androidx包,另一个使用了pre-androidx

我通过使用Android Studio的内置功能将pre-androidx模块迁移到androidx来解决它:"重构 - >迁移到Androidx ..."而不排除任何内容.


根据您的情况,您可以检查模块之间是否存在任何依赖性不匹配.


Vai*_*van 17

使用时会发生这种情况

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

并在下一版本中修复

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

  • 与 org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.6 类似的问题是目前最新的。不得不降级 (3认同)
  • 是的,1.3.6 上有同样的问题 (2认同)

Tra*_*tal 14

排除所有仅用于文档和信息目的的元信息文件是完全安全的:

android{
    packagingOptions {
       exclude 'META-INF/*'
    }
}
Run Code Online (Sandbox Code Playgroud)

来源:https : //stackoverflow.com/a/49101232/13093413


Fay*_*yaz 12

基于@JohnnyLambada 和@Shaaban Ebrahim 提供的答案

为了排除嵌套文件,我使用了以下内容。

    packagingOptions {
        resources.excludes.add("META-INF/**/*")
    }
Run Code Online (Sandbox Code Playgroud)

PS:不是用相同的答案发送垃圾邮件,而是在出现类似错误时提供建议

    packagingOptions {
        resources.excludes.add("META-INF/**/*")
    }
Run Code Online (Sandbox Code Playgroud)

它捕获来自嵌套目录的错误,仅供参考,我已经使用设置了我的依赖项kotlin-dsl


Jor*_*sys 11

我已经阅读了与获得此消息有关的所有答案Android Studio

使用操作系统独立路径“ META-INF / LICENSE”找到了多个文件

但是在这种情况下,没有必要排除类,我们只需要排除即可'META-INF/DEPENDENCIES',这可以在内部进行/app/build.gradle

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

}
Run Code Online (Sandbox Code Playgroud)

  • SO 的数百个其他答案中也讲述了同样的事情 (3认同)

小智 10

我将Studio从Java 7更新到Java 8,并且出现了这个问题.然后我这样解决了:

android {
    defaultConfig {
    }
    buildTypes {
    }
    packagingOptions{
        exclude 'META-INF/rxjava.properties'
    }
}
Run Code Online (Sandbox Code Playgroud)


San*_*ans 8

在我的应用程序中,我正在添加如下所示的jar依赖项:

implementation files('libs/json-simple-1.1.1.jar')
Run Code Online (Sandbox Code Playgroud)

但是我意识到由于依赖项中的以下第一行,已经添加了它们:

implementation fileTree(include: ['*.jar'], dir: 'libs')
Run Code Online (Sandbox Code Playgroud)

此行将lib文件夹中的所有jar添加到应用程序依赖项。

因此,在删除额外的依赖项之后 implementation files('libs/json-simple-1.1.1.jar')

它工作正常。


Par*_*ain 5

添加

android.useAndroidX=true

android.enableJetifier=true

gradle.properties对我有用。


小智 5

这对我来说工作

packagingOptions {
   exclude 'META-INF/*'
}
Run Code Online (Sandbox Code Playgroud)