在操作系统独立路径'META-INF/LICENSE'

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

错误:执行失败的任务':app:transformResourcesWithMergeJavaResForDebug'。 发现操作系统独立路径'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)

谁有办法解决这个问题?

455905 次浏览

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

packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}

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

你可以在yourProject/app/build.gradle中添加这个到android{}中。排除函数将命名资源添加到APK中未打包的资源列表中。

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

exclude函数在7.0.2中已弃用,你应该使用类似这样的函数:

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

有类似的信息

错误:执行失败的任务':app:transformResourcesWithMergeJavaResForDebug'。 发现不止一个文件的操作系统独立路径'constant-values.html'

为了解决这个问题,我不得不在Android Studio中启用包视图(1),然后浏览树到库,并找到重复的包(2)

然后,ctrl+alt+f12(或RMB菜单)(3.) -并找到导致问题的库。 列出这些库中导致问题的文件,并将它们写入应用程序的构建中。gradle文件在安卓部分。另一个选项是处理包含重复文件的库

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

enter image description here

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

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中“到处搜索”,找到你文件的实例,你就必须删除其中一个。慢慢来,想想是哪个。

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

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

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

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

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

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

或者,如果在这种情况下,该文件是一个强制性的文件,就像类文件一样,已经在两个相互关联的jar依赖项之间复制,那么最好找到这些jar的替代方案,以更兼容的版本。

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

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

我遇到过这个问题,首先是一些本地库(。文件),然后是java/kotlin文件。结果我从源代码中包含了一个库,并通过传递依赖项引用了artifactory。检查您的依赖项树,看看是否有多余的条目。使用./gradlew :app:dependencies获取依赖树。如果主模块名称不同,则将“app”替换为您的模块名称。

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

< >强错误: 在操作系统独立路径'META-INF/library_release.kotlin_module'

中发现了多个文件

# EYZ0

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

在我的应用程序中,我像这样添加了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')

它工作得很好。

我也遇到过同样的错误,我发现它是由不同的模块包含来自不同包的相同类引起的。

一个使用androidx包,另一个使用pre-androidx

我通过使用Android Studio: “Refactor ->迁移到Androidx…”的内置功能将pre-androidx模块迁移到androidx而不排除任何东西来解决这个问题。


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

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

错误:在操作系统独立路径下发现多个文件 “meta - inf /混淆器/ androidx-annotations.pro”< / p >

<强>解决方案: 你所要做的就是在应用程序的'build.gradle'

中将其添加到android{}部分
packagingOptions {
exclude 'META-INF/proguard/androidx-annotations.pro'
}

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

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

这对我有帮助。

这发生在使用

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

并在下一个版本中修复

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

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

发现操作系统独立路径的文件不止一个 “meta - inf /许可证”< / p >

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

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


}

添加

android.useAndroidX = true

android.enableJetifier = true

gradle.properties对我有用。

在许多关于这个问题的SO的答案中,已经建议添加exclude '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'

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

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


     

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

错误:执行任务失败 “应用程序: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。

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

如果你有这个问题,你有一个gradle .jar dependency,像这样:

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

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

如果你使用多模块项目,在espresso测试时遇到这个问题,你需要在每个gradle文件中添加packagingOptions代码。在我的例子中,我为每个gradle文件添加了下面的代码。

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

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

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

来源:# EYZ0

android {}内添加multiDexEnabled true

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

由于前面没有提到,您可以选择合并文件以符合许可要求(或者只使用Daniel Reina所述的pickFirst)。

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

参考:# EYZ0

将其放入构建中。gradle(模块AppName)

android {
// ....
packagingOptions{
pickFirst "androidsupportmultidexversion.txt"
}
}

这对我很有用

packagingOptions {
exclude 'META-INF/*'
}

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

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

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

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

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

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

gradle 7.2和以上,你可以这样解决问题:

在你的app/build.gradleandroid块:

  packagingOptions {
resources.excludes.add("META-INF/notice.txt")
resources.merges.add("META-INF/LICENSE")
resources.merges.add("META-INF/AL2.0")
resources.merges.add("META-INF/LGPL2.1")
}

为我工作。将这些添加到应用的构建中。android{}块中的Gradle。

packagingOptions {
exclude 'META-INF/AL2.0'
exclude 'META-INF/LGPL2.1'
}

对于Gradle 7.2及以后版本 添加应用内Gradle文件

android {
  

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




}

在我的情况下,代码bellow工作, 在你的< / p >

应用build.gradle

文件添加

android {
..
packagingOptions {
pickFirst  '**'
}
..
}