当我构建我的应用程序时,我遇到了错误。
错误:任务':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)
谁有想法如何解决这个问题?
答案 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.gradle
内android{}
排除路径'META-INF / LICENSE'就足够了。这是
packagingOptions {
exclude 'META-INF/LICENSE'
}
然后做清洁项目和重建项目。
答案 2 :(得分:54)
这里的解决方案对我没有帮助,但是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项目中的库时遇到此问题。希望它有所帮助
答案 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'
<..>
答案 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/*'
}
}
答案 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
文件夹,它解决了问题
答案 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"
}
答案 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'
}