使用操作系统独立路径“ 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)

谁有办法解决这个问题?


访问Android的Google API客户端库时,我遇到了同样的问题。通过从gradle依赖项中排除模块HttpClient解决了该问题。有关更多详细信息,请参阅Google文档developers.google.com/api-client-library/java/… 在文档页面上搜索“在Android上,您需要明确排除未使用的依赖项:”
mifthi

Answers:


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如果我们不从google.github.io/android-gradle-dsl/current/…中 排除这些文件,则会导致apk出现一些问题。排除匹配排除模式的路径不会包含在APK中。我所知道的一切。我对这个问题没有全面的了解
沙班易卜拉欣

11
尽管这可以回答问题,但最好添加一些有关此回答如何有助于解决问题的说明。请阅读我如何写一个好的答案以了解更多信息。
Roshana Pitigala

3
就我而言,我还需要添加“ META-INF / LICENSE.md”和“ META-INF / LICENSE-notice.md”
Klyner

1
在packaginOptions列表中添加exclude(“ META-INF / *。kotlin_module”)
Jaspal,

129

在我的情况下,它足以对仅排除路径“META-INF / DEPENDENCIES” yourProject/app/build.gradle里面android{} 。这里是

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

然后执行清理项目和重建项目。


11
尝试排除“ META-INF / DEPENDENCIES”而不是排除“ META-INF / LICENSE”
Pelanes

7
请解释一下
Mohammad Ali

1
@SilSur排除了该文件,因此您在错误中就像在我的代码中针对“ META-INF / proguard / androidx-annotations.pro”的错误一样,然后添加了排除'META-INF / proguard / androidx-annotations。亲”及其工作。
Gunavant Patel

4
尽管这可以回答问题,但最好添加一些有关此回答如何有助于解决问题的说明。请阅读我如何写一个好的答案以了解更多信息。
Roshana Pitigala

您无需清理同步gradle文件就可以了
steve moretz

75

这里的解决方案对我没有帮助,但是此链接对我有帮助。

如果您的图书馆要添加一些android .so文件(例如libassmidi.solibgnustl_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'找到多个文件

为了解决这个问题,我必须在Android Studio中启用包view(1),然后在树中浏览到库,然后找到重复项(2)。

然后,按ctrl + alt + f12(或RMB菜单)(3)-找到导致问题的库。列出导致问题的这些库中的文件列表,并将它们写入android节中应用的build.gradle文件。另一种选择是处理包含重复文件的库

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

在此处输入图片说明


1
您如何“然后浏览树中的库并找到重复项”?您是否真的遍历了所有文件夹中的所有文件?
Android开发人员

1
对于“查找重复项”,我也感到困惑。应用程序/库中可能有100个子条目...如何查找重复项?
Freewalker

28

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

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

或者,如果该文件是一个必需的文件(如类文件),并且已在彼此相关的两个jar依赖项之间复制,则最好以更兼容的版本找到这些jar的替代方案。


当我将其添加到项目中时,出现另一个错误,我无法解决!还有其他解决方案吗?
hetsgandhi

Hetvi Gandhi,您看到的是什么错误?
ank

20

我遇到了同样的问题,我尝试了这个

错误:使用操作系统独立路径“ META-INF / proguard / androidx-annotations.pro”找到了多个文件

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

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

我遇到了同样的错误,我发现它是由于不同的模块包含了来自不同package的相同类而导致的。

例如,一个使用androidx软件包,另一个使用androidx之前的版本

我通过使用Android Studio的内置功能将“ pre-androidx”模块迁移到androidx来解决了这一问题:“重构->迁移到Androidx ...”,不排除任何问题。


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


1
不要忘记备份项目的当前版本,因为迁移到AndroidX可能会破坏您的项目!
卡希尔

12

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

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

但是在这种情况下,没有必要排除类,我们只需要排除'META-INF/DEPENDENCIES',这可以在/app/build.gradle:中完成:

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

}

在SO上的其他数百个答案中也
提到了

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文件夹中的所有jar添加到应用程序依赖项。

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

它工作正常。


这很有用,但与答案无关。在库中,您找到文件元文件夹META-INF,该文件的名称和格式可能相似。这些导致重复的文件问题,因此必须删除。
Abhinav Saxena

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中,您可以选择“随处搜索”。在此处写入并搜索文件。在那里,我发现了该文件的多个实例。因此,我单击了两个实例,并通过右键单击文件并在它们在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个文件。所以我删除了我的zip包,它为我解决了错误。这样做时要小心。您必须确定哪个是要删除的正确文件或软件包。

第三,gradle还在这些位置(至少对我来说是这样)制作了这些bug文件的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中进行“无处不在搜索”,在那儿找到文件实例,就必须删除其中一个。花点时间找出哪一个。


3

新增中

android.useAndroidX = true

android.enableJetifier = true

to gradle.properties对我有用


1

我遇到了这个问题,首先遇到了一些本地库(.so文件),然后遇到了java / kotlin文件。原来,我从源头包括了一个库,并通过传递依赖关系引用了工件。检查您的依赖关系树以查看是否有任何冗余条目。使用./gradlew :app:dependencies得到的依赖关系树。如果主模块名称不同,则用模块名称替换“ app”。


1

尝试在build.gradle android {}中更改最低Android版本> = 21。


1

在android {}中的应用级gradel文件中添加以下内容

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之后,它重构了项目的一部分,问题得以解决。


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

在关于此问题的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”),最后我摆脱了“在OS中发现多个文件...”的构建错误。我浪费了我的时间。但终于摆脱了它。


-1

清理项目之后,您只需要使Cache&Restart无效即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.