当我构建我的应用程序时,我收到以下错误:
错误:任务“: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{}
内的 yourProject/app/build.gradle
中添加它。 exclude 函数将命名资源添加到未打包在 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/*")
}
}
就我而言,仅在 android{}
内的 yourProject/app/build.gradle
上排除路径 'META-INF/DEPENDENCIES' 就足够了。这里是
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}
然后做清洁项目和重建项目。
exclude 'DebugProbesKt.bin'
添加到 packagingOptions
时有所帮助。
这里的解决方案对我没有帮助,但 this link 对我有帮助。
如果您的库添加了一些 android .so 文件(例如 libassmidi.so
或 libgnustl_shared.so
),您必须告诉 gradle 在打包时只选择一个,否则会发生冲突。
android {
packagingOptions {
pickFirst 'lib/armeabi-v7a/libassmidi.so'
pickFirst 'lib/x86/libassmidi.so'
}
}
在将 React Native 应用程序用作 Android 项目中的库时,我遇到了这个问题。希望能帮助到你
pickFirst "**/libarcore_sdk_c.so"
,效果很好
基本上,当 gradle 将 apk 文件放在一起时,它会从所有编译依赖项中复制内容,它足够聪明地看到有一个重复的文件..来自两个不同的 jar 文件。这可以是任何文件,例如 a.txt 或 META-INF/DEPENDENCIES。最好使用以下内容排除这些文件,以防该文件仅用于提供信息。
android{
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}
}
或者,如果该文件是类文件之类的强制文件,并且已在两个彼此相关的 jar 依赖项中重复,则最好以更兼容的版本的方式找到这些 jar 的替代品。
我在多模块应用程序环境中遇到了类似的问题:
错误:任务“:app:transformResourcesWithMergeJavaResForDebug”执行失败。发现多个文件具有独立于操作系统的路径“META-INF/AL2.0”
我的几个模块报告了这个问题,上述解决方案都没有解决它。原来,我使用的是 Coroutines 1.3.6 版本,它似乎嵌入了 META-INF/AL2.0,而我正在使用的另一个库已经嵌入了 META-INF/AL2.0。为了解决这个问题,我在失败的模块的 build.gradle 中添加了以下代码片段:
configurations.all {
resolutionStrategy {
exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug"
}
}
鉴于它发生在多个模块上,我已将该 resolutionStrategy
代码移至我的项目级 build.gradle。之后一切正常。
有类似的消息
错误:任务':app:transformResourcesWithMergeJavaResForDebug'的执行失败。找到多个文件,其独立于操作系统的路径为“constant-values.html”
为了解决这个问题,我必须在 Android Studio 中启用包视图(1),然后通过树浏览到库,并找到重复项(2)
然后,ctrl+alt+f12(或 RMB 菜单)(3) - 找到导致问题的库。列出了导致问题的那些库中的文件,并将它们写入应用程序的 build.gradle 文件中的 android 部分。其他选项是处理包含重复文件的库
packagingOptions {
exclude 'allclasses-frame.html'
exclude 'allclasses-noframe.html'
<..>
https://i.stack.imgur.com/go5VH.png
排除所有仅用于文档和信息目的的元信息文件是完全安全的:
android{
packagingOptions {
exclude 'META-INF/*'
}
}
来源:https://stackoverflow.com/a/49101232/13093413
在 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")
}
使用时会出现这种情况
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.2.0
并在下一个版本中修复
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.2.1
我遇到了同样的问题,我试过这个
错误:发现多个文件具有独立于操作系统的路径“META-INF/proguard/androidx-annotations.pro”
解决方案:解决此问题所需要做的就是将其添加到应用程序“build.gradle”中的 android { } 部分
packagingOptions {
exclude 'META-INF/proguard/androidx-annotations.pro'
}
我遇到了同样的错误,我发现它是由不同的模块包含来自不同包的相同类引起的。
例如,一个使用 androidx 包,另一个使用 pre-androidx
我通过使用 Android Studio 的内置功能将 pre-androidx 模块迁移到 androidx 解决了这个问题:“重构 --> 迁移到 Androidx ...”而不排除任何内容。
对于您的情况,您可以检查模块之间是否存在任何依赖项不匹配。
我已阅读与在 Android Studio
中获取此消息相关的所有答案:
发现多个文件具有独立于操作系统的路径“META-INF/LICENSE”
但是在这种情况下不需要排除类,我们只需要排除 'META-INF/DEPENDENCIES'
,这可以在 /app/build.gradle
内完成:
android{
...
...
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}
}
我是我的应用程序,我正在添加这样的 jar 依赖项:
implementation files('libs/json-simple-1.1.1.jar')
但我意识到它们已经被添加,因为依赖项中的以下第一行:
implementation fileTree(include: ['*.jar'], dir: 'libs')
这一行将 lib 文件夹中的所有 jars 添加到应用程序依赖项中。
因此,在移除额外的依赖项 implementation files('libs/json-simple-1.1.1.jar')
它工作正常。
我将 Studio 从 Java 7 更新到 Java 8,出现了这个问题。然后我以这种方式解决了它:
android {
defaultConfig {
}
buildTypes {
}
packagingOptions{
exclude 'META-INF/rxjava.properties'
}
}
对于 Gradle 7.2 及更高版本添加应用内 Gradle 文件
android {
packagingOptions {
resources.excludes.add("META-INF/*")
}
}
这对我有用
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
设置了我的依赖项
添加
android.useAndroidX=true
android.enableJetifier=true
到 gradle.properties 为我工作。
由于尚未提及,您也可以合并文件以符合许可证要求(或仅使用 Daniel Reina 所述的 pickFirst
)。
packagingOptions {
merge "META-INF/LICENSE"
merge "META-INF/AL2.0"
merge "META-INF/LGPL2.1"
}
参考:Gradle API 4.2 Packaging Options
merge
比 exclude
和 pickFirst
函数更“合法”。
我有一个类似的问题。我收到错误消息-
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 中“到处搜索”,在那里找到您的文件实例,然后您将不得不删除其中一个。花点时间弄清楚是哪一个。
我有同样的问题,我试过这个
错误:发现多个文件具有独立于操作系统的路径 'META-INF/library_release.kotlin_module'
解决方案:
android {
packagingOptions {
exclude 'META-INF/library_release.kotlin_module'
}
}
此错误是由添加支持库而不是 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>
把它放在 build.gradle (Module AppName)
android {
// ....
packagingOptions{
pickFirst "androidsupportmultidexversion.txt"
}
}
为我工作。将这些添加到您应用的 build.gradle 中的 android{} 块中。
packagingOptions {
exclude 'META-INF/AL2.0'
exclude 'META-INF/LGPL2.1'
}
我遇到了这个问题,首先是一些本机库(.so 文件),然后是 java/kotlin 文件。结果我从源代码中包含了一个库,并通过传递依赖项引用了工件。检查您的依赖关系树以查看是否有任何冗余条目。使用 ./gradlew :app:dependencies
获取依赖关系树。如果主模块名称不同,请将“app”替换为您的模块名称。
尝试从默认配置中删除 multidex 并检查构建错误日志。如果该日志与 INotification 类相关。在 android 中使用它{}
configurations {
all*.exclude group: 'com.android.support', module: 'support-v4'
}
这对我有帮助。
在 gradle 7.2 及更高版本中,您可以解决如下问题:
在 android
块中的 app/build.gradle
中:
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")
}
在关于这个问题的许多 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”),最后我摆脱了这个“在操作系统中发现了多个文件......”构建错误。我浪费了我的时间。但最终摆脱了它。
如果您遇到此问题并且您有 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'
}
不定期副业成功案例分享