10

Does anybody knows how to debug this? I cannot figure out which libraries are generating the problem.

Side note, it only happens when I try to run Android tests so my best guess is it's related to some testing library.


    testImplementation "androidx.room:room-testing:$version_room"
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.4.0'
    // Compose Tests
    androidTestImplementation "androidx.compose.ui:ui-test-junit4:$version_compose"
    debugImplementation "androidx.compose.ui:ui-test-manifest:$version_compose"
    // Hilt test
    androidTestImplementation "com.google.dagger:hilt-android-testing:$version_hilt"
    kaptAndroidTest "com.google.dagger:hilt-android-compiler:$version_hilt"
    debugImplementation 'androidx.fragment:fragment-testing:1.3.6'
Execution failed for task ':app:mergeDebugAndroidTestJavaResource'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction
   > 2 files found with path 'META-INF/LGPL2.1' from inputs:
      - /home/lbenevento/.gradle/caches/transforms-3/1e2dfa6057fe4e701d175f47b1099efa/transformed/jetified-jna-platform-5.5.0.jar
      - /home/lbenevento/.gradle/caches/transforms-3/405542266c1c406c39ff1a20cb26a332/transformed/jetified-jna-5.5.0.jar
     Adding a packagingOptions block may help, please refer to
     https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html
     for more information

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:mergeDebugAndroidTestJavaResource'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:187)
    at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:268)
...

This is the full error: https://pastebin.com/74cLGMR9

3 Answers3

17

This happened for me when I added androidTestImplementation "androidx.compose.ui:ui-test-junit4:$version_compose".

Referring to the advice in this posting, I decided to use pickFirst as opposed to exclude.

According to the PackagingOptions documentation, pickFirst will allow for the first occurrence of the file to be packaged with the APK, whereas exclude would exclude all occurrences of the file.

This ended up working for me:

android {
    packagingOptions {
        pickFirst 'META-INF/AL2.0'
        pickFirst 'META-INF/LGPL2.1'
    }
}
JHowzer
  • 2,772
  • 3
  • 26
  • 33
  • It does work for me too indeed. But I'm still not getting what exactly is the problem and how could we know what dependencies are causing it, do you have any more insights? – Lorenzo Benevento Nov 05 '21 at 11:02
5

So the exclude and pickFirst already deprecated in kotlin DSL. put the following in your build.gradle.kts:

android {   
    packagingOptions {
        resources.excludes.apply {
            add("META-INF/LICENSE")
            add("META-INF/*.properties")
            add("META-INF/AL2.0")
            add("META-INF/LGPL2.1")
        }
    }
}
Mohsents
  • 461
  • 7
  • 8
3

This worked out for a similar issue for me:

android {
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/*.properties'
        exclude 'META-INF/AL2.0'
        exclude 'META-INF/LGPL2.1'
    }
}
Alejandro H. Cruz
  • 447
  • 1
  • 6
  • 15
  • 1
    Yeah, I've seen this solution but what does it means? I guess we are excluding some paths from those who get bundled into the APK, but how can we know there isn't something we need in there? Do you have any more info? Thank you anyway! – Lorenzo Benevento Nov 01 '21 at 16:43
  • Hey Lorenzo hi, sadly I don't have more information about this, haven't looked into it. The LICENSE file seems important... – Alejandro H. Cruz Nov 25 '21 at 16:08