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

时间:2017-06-03 09:31:08

标签: 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'
}

当我将这些代码添加到我的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)

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

34 个答案:

答案 0 :(得分:294)

您可以在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'
      }          
}

答案 1 :(得分:88)

在我的情况下,只在yourProject/app/build.gradleandroid{}排除路径'META-INF / LICENSE'就足够了。这是

packagingOptions {
    exclude 'META-INF/LICENSE'
}

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

答案 2 :(得分:54)

这里的解决方案对我没有帮助,但是this link做了。

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

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

在使用React Native应用程序作为Android项目中的库时遇到此问题。希望它有所帮助

答案 3 :(得分:26)

有类似的消息

  

错误:任务':app:transformResourcesWithMergeJavaResForDebug'执行失败。   在OS独立路径&constant-values.html'

中找到了多个文件

要解决此问题,我必须在Android Studio中启用包视图( 1 ),然后浏览树到库,找到重复项( 2 )< / p>

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

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

enter image description here

答案 4 :(得分:20)

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

错误:任务执行失败 ':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。 之后一切正常。

答案 5 :(得分:18)

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

ExceptT

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

答案 6 :(得分:18)

我遇到了同样的问题,并且尝试了

  

错误:发现多个文件具有与操作系统无关的路径   'META-INF / proguard / androidx-annotations.pro'

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

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

答案 7 :(得分:14)

我遇到了相同的错误,我发现这是由于不同的模块包含来自不同软件包的相同类造成的。

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

我通过使用Android Studio的内置功能将androidx之前的模块迁移到androidx来解决了此问题:“重构->迁移到Androidx ...”

>

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

答案 8 :(得分:11)

在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") 
      } 

答案 9 :(得分:10)

我将Studio从Java 7更新为Java 8,并且发生了此问题。然后我以这种方式解决了这个问题:

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

答案 10 :(得分:7)

我的应用程序中,我正在添加如下所示的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')

它工作正常。

答案 11 :(得分:2)

我有类似的问题。我收到了错误消息 -

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文件(至少对我而言) - 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中搜索“无处不在”,在那里找到你文件的实例,你就必须删除其中一个。花点时间找出哪一个。

答案 12 :(得分:2)

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

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

解决方案:

android {
    packagingOptions {
    exclude 'META-INF/library_release.kotlin_module'
    }
}

https://github.com/WindSekirun/NaraeImagePicker/issues/7

为我工作。...

答案 13 :(得分:1)

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

答案 14 :(得分:1)

使用时会发生这种情况

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

并在下一版本中已修复

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

答案 15 :(得分:1)

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

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

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

答案 16 :(得分:1)

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

  

发现多个文件具有与操作系统无关的路径   'META-INF / LICENSE'

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

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

}

答案 17 :(得分:0)

对我来说,我正在使用某人的项目,而在编译lib时遇到了问题。

添加packagingOptions的解决方案没有帮助,因为它会阻止编译armeabi-v7a的最新.so文件,并将.so文件从jniLibs复制到内置的APK文件中

我从jniLibs删除了\app\src\main文件夹,它解决了问题

Project file view in Android Studio

答案 18 :(得分:0)

应用GROUP BY

build.gradle

答案 19 :(得分:0)

我有相同的错误,我使用此错误解决了

解决方案和代码

在应用的build.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'
    }
   
}

答案 20 :(得分:0)

此错误是由添加支持库而不是AndroidX引起的。 确保使用哪个:

对于AndroidX:

dependencies {
    def multidex_version = "2.0.1"
    implementation 'androidx.multidex:multidex:$multidex_version'
}

如果您不使用AndroidX:

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

还在清单中使用应用程序类名称代替应用程序标记中的“ android.support.multidex.MultiDexApplication”(我的应用程序类名称为G):

错误:

<application
            android:name="android.support.multidex.MultiDexApplication" >
        ...
</application>

右:

<application
            android:name=".G" >
        ...
</application>

答案 21 :(得分:0)

如果您遇到此问题并且您有一个 gradle .jar dependency,如下所示:

implementation group: 'org.mortbay.jetty', name: 'jetty', version: '6.1.26'

间隔版本直到匹配并解决异常,并应用此线程的最佳答案。`

答案 22 :(得分:0)

如果您使用多模块项目并在 espresso 测试时遇到此问题,则需要在每个 gradle 文件中添加 PackagingOptions 代码。就我而言,我为每个 gradle 文件添加了以下代码。

packagingOptions {
    exclude 'META-INF/lib_release.kotlin_module'
}

答案 23 :(得分:0)

multiDexEnabled true内添加android {}

并从依赖项中删除 implementation 'com.android.support:multidex:x.x.x'

答案 24 :(得分:0)

由于尚未提及,您也可以合并文件以保持符合许可要求(或仅使用 Daniel Reina 所述的 pickFirst)。

packagingOptions {
    merge "META-INF/LICENSE"
    merge "META-INF/AL2.0"
    merge "META-INF/LGPL2.1"
}

参考:Gradle API 4.2 Packaging Options

答案 25 :(得分:0)

在关于此问题的许多关于SO的答案中,建议添加exclude 'META-INF/DEPENDENCIES'和其他一些排除项。但是这些都不对我有用。就我而言,情况是这样的:

我在依赖关系中添加了此内容:

implementation 'androidx.annotation:annotation:1.1.0'

我也已经在gradle.properties中添加了它:

android.useAndroidX=true

我都添加了这两种方法,因为我遇到了构建错误“找不到符号类为Nullable”,并且在诸如here

的某些答案中建议将其作为解决方案

但是,最终我陷入了错误:

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

没有exclude为我工作。最后,我只是出于怀疑而删除了上面添加的那些行(以某种替代方式解决了“找不到符号类为Nullable”),最后我摆脱了这个“在OS中发现多个文件...”的构建错误。我浪费了我的时间。但终于摆脱了它。

答案 26 :(得分:0)

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

答案 27 :(得分:0)

添加

android.useAndroidX = true

android.enableJetifier = true

gradle.properties 对我有用。

答案 28 :(得分:0)

我已经连线,但是我的项目已经迁移到AndroidX,但是在再次迁移到androidX之后,它重构了我项目的一部分,问题得以解决。

答案 29 :(得分:0)

我发现了另一种解决方案。确保在gradle中,相同的父库和子库的版本相同,如下所示:

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    **implementation 'com.google.android.gms:play-services-maps:12.0.1'**
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.android.support:mediarouter-v7:28.0.0'
    **implementation 'com.google.android.gms:play-services:12.0.1'**
}

答案 30 :(得分:0)

对于我来说,以下解决方案可行,您也可能会获得帮助,我在应用程序的gradle文件中写了以下行

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

答案 31 :(得分:0)

尝试从默认配置中删除multidex,然后检查构建错误日志。 如果该日志与INotification类有关。在android {}

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

这对我有帮助。

答案 32 :(得分:-1)

对我来说,它是.md而不是.txt

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

答案 33 :(得分:-3)

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