条目名称“META-INF/MANIFEST.MF”发生冲突

Posted

技术标签:

【中文标题】条目名称“META-INF/MANIFEST.MF”发生冲突【英文标题】:Entry name 'META-INF/MANIFEST.MF' collided 【发布时间】:2021-04-16 22:28:50 【问题描述】:

说明

我在运行detox build -c android时不断收到以下错误

> Task :app:packageDebugAndroidTest FAILED
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:packageDebugAndroidTest'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > Entry name 'META-INF/MANIFEST.MF' collided

复制

通过步骤here 为 android 设置 detox(没有测试管家步骤) 按照描述设置以下 2 个文件(减去我的依赖项) 运行detox build -c android(无论是否先构建了aosp模拟器)

我的文件

.detoxrc.json


  ...
    "android": 
      "binaryPath": "android/app/build/outputs/apk/debug/app-debug.apk",
      "build": "cd android && ./gradlew app:assembleDebug app:assembleAndroidTest -DtestBuildType=debug && cd ..",
      "type": "android.emulator",
      "device": 
        "avdName": "Pixel_API_28_AOSP"
      
    
  ...

android/app.build.gradle

前 3 个选项是修复问题的失败尝试。在尝试安装 Detox 之前,最后一个选项已经存在于项目中。

...
android 
    ...
    packagingOptions 
        // exclude 'META-INF/**'
        // pickFirst 'META-INF/**'
        // merge 'META-INF/**'
        pickFirst "**"
    
    ...


dependencies 
    implementation fileTree(dir: "libs", include: ["*.jar"])
    //noinspection GradleDynamicVersion
    implementation "com.facebook.react:react-native:+"  // From node_modules
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
    implementation 'com.facebook.fresco:animated-gif:2.0.0'
    debugImplementation("com.facebook.flipper:flipper:$FLIPPER_VERSION") 
        exclude group:'com.facebook.fbjni'
    
    debugImplementation("com.facebook.flipper:flipper-network-plugin:$FLIPPER_VERSION") 
        exclude group:'com.facebook.flipper'
        exclude group:'com.squareup.okhttp3', module:'okhttp'
    
    debugImplementation("com.facebook.flipper:flipper-fresco-plugin:$FLIPPER_VERSION") 
        exclude group:'com.facebook.flipper'
    
    addUnimodulesDependencies()

    if (enableHermes) 
        def hermesPath = "../../node_modules/hermes-engine/android/";
        debugImplementation files(hermesPath + "hermes-debug.aar")
        releaseImplementation files(hermesPath + "hermes-release.aar")
     else 
        implementation jscFlavor
    

    androidTestImplementation('com.wix:detox:+')
    androidTestImplementation(project(path: ":detox"))

...

环境

排毒:^17.14.3 React Native:0.63.2 com.android.tools.build:gradle: 4.0.1 节点:v12.19.0 设备:Android AOSP 像素模拟器 API 28 操作系统:MacOS Catalina v10.15.7 测试运行者:开玩笑

其他可能有用的信息

Detox 可以为 ios 构建和运行测试,但不适用于 android 使用--stacktrace 运行构建命令不会提供任何进一步的信息 这是我第一次尝试在这个项目上设置排毒 detox docs 中列出的解决方案尚未修复 我发现很多关于线程相关错误的东西(尽管没有提到排毒)与 gradle 版本有关。很多人建议降级。 我可以通过 android studio 使用 build 命令在普通 Pixel 模拟器和 AOSP 模拟器上构建实际应用程序。仅当尝试通过detox-cli 使用构建命令时才会出现此问题

【问题讨论】:

嘿alishaevn。作为初步步骤,我建议您尝试分别运行./gradlew assembleDebug./gradlew assembleAndroidTest,以便了解问题是否与构建test APK,特别是。 另外请注意,在 iOS 上成功运行并没有真正在此处添加重要信息,因为问题在于 build 阶段而不是测试的执行(即 测试阶段)。 无论如何,这听起来像是一个 Android 打包问题,可以通过适当的配置来解决。我们应该能够让您立即上手。 最后但并非最不重要 - 如果您提供 gradle 依赖项以供参考,可能会有所帮助。谢谢。 @d4vidi 我用我的 android/app/build.gradle 文件中的依赖项更新了帖子。 【参考方案1】:

可能的解决方法是禁用 Gradle Plugin 3.6.0-alpha09 中引入的 zipflinger。只需在 gradle.properties 中添加新行 android.useNewApkCreator=false

在Google blog 上阅读有关该标志的更多信息或查看similar issue。

【讨论】:

谢谢德里克。事实上,这就是我最终解决这个问题的方式;我只是忘了回来在这里记下。

以上是关于条目名称“META-INF/MANIFEST.MF”发生冲突的主要内容,如果未能解决你的问题,请参考以下文章

从 JAR 中读取 META-INF/MANIFEST.MF [重复]

Jar文件 META-INF/MANIFEST.MF文件详解

Gradle 重复输入错误:META-INF/MANIFEST.MF(或如何从 jar 中删除文件)

Android编译异常` Cause: duplicate entry: META-INF/MANIFEST.MF`

有没有java的高手看下这是啥问题,是否.jar文件解压后自动生成META-INF/MANIFEST.MF

JAR包结构,META-INF/MANIFEST.MF文件详细说明[全部属性][打包][JDK]