当我建立我的应用程序,我得到以下错误:

错误:执行失败任务':app:transformResourcesWithMergeJavaResForDebug'。 在OS独立路径'META-INF/LICENSE'中发现了多个文件

这是我的身材。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)

谁有办法解决这个问题?


当前回答

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

错误:任务执行失败 “应用程序:transformResourcesWithMergeJavaResForDebug”。多个文件 发现OS独立路径'META-INF/AL2.0'

我的几个模块报告了这个问题,上面的解决方案都没有解决它。 事实证明,我使用的是Coroutines 1.3.6版本,它似乎嵌入了META-INF/AL2.0,而我使用的另一个库已经嵌入了META-INF/AL2.0。为了解决这个问题,我向构建中添加了以下代码片段。失败模块的Gradle:

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

    }
}

鉴于它发生在多个模块上,我已经将resolutionStrategy代码移动到我的项目级别build.gradle。 从那以后一切都正常了。

其他回答

在我的应用程序中,我像这样添加了jar依赖:

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

但我意识到它们已经被添加了,因为下面的第一行依赖项:

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

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

因此,在删除额外的依赖实现文件('libs/json-simple-1.1.1.jar')之后

它工作得很好。

在我的例子中,只排除你的项目/app/build上的“META-INF/DEPENDENCIES”路径就足够了。Gradle在android{}内。在这里

packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
}

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

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

对于安卓X:

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>

根据@JohnnyLambada和@Shaaban Ebrahim提供的答案

为了排除嵌套文件,我使用了以下方法。

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

PS:不是垃圾邮件与相同的答案,但只是一个建议,如果你得到一个错误之类的

4 files found with path 'META-INF/gradle/incremental.annotation.processors'.

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

在许多关于这个问题的SO答案中,有人建议添加排除'META-INF/DEPENDENCIES'和其他一些排除。然而,这些方法对我都不起作用。我的情况是这样的:

我在依赖关系中添加了这个:

implementation 'androidx.annotation:annotation:1.1.0'

我还在gradle.properties中添加了这个:

android.useAndroidX=true

这两个我都添加了,因为我得到了构建错误“无法找到符号类Nullable”,它被建议作为解决这个问题的一些答案,比如这里

然而,最终我陷入了get错误:

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

没有排斥对我有效。最后,我只是删除了上面添加的那些行只是出于怀疑(解决了'无法找到符号类Nullable'以某种替代方式),最后我摆脱了这个“不止一个文件被发现与操作系统…”构建错误。我浪费了好几个小时。但最后还是摆脱了。