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

错误:执行失败任务':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)

谁有办法解决这个问题?


当前回答

此错误是由于添加支持库而不是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>

其他回答

我已经阅读了所有关于在Android Studio中得到这条消息的答案:

发现了多个具有操作系统独立路径的文件 “meta - inf /许可证”

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

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

}

我也遇到过类似的问题。我得到了错误信息-

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.

我终于解决了这个问题。

首先(在我的情况下willclosewhenclose .java是复制文件),在android工作室你有一个选项“搜索无处不在”。在那里写入并搜索文件。在那里我发现了这个文件的多个实例。所以我点击了这两个实例,通过右键单击文件,看到它们的位置,当它们在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个文件。所以我删除了我的压缩包,它解决了我的错误。做这件事的时候要小心。你必须找出要删除的文件或包是正确的。

第三,gradle还将这些bug文件压缩到这个位置(至少对我来说是这样的)- C:\Program Files\Android\Android Studio\gradle\m2repository\com\谷歌\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar!

所以我删除了jsr305-1.3.9.jar文件。

如果你仍然感到困惑,只要在android studio中“到处搜索”,找到你文件的实例,你就必须删除其中一个。慢慢来,想想是哪个。

此错误是由于添加支持库而不是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>

我也有同样的问题,只是通过改变multidex实现来解决

From

implementation 'com.android.support:multidex:1.0.3'

To

implementation 'androidx.multidex:multidex:2.0.1'

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