【问题标题】:Entry name 'AndroidManifest.xml' collided (Build failed after updating the android gradle plugin to 3.6.0)条目名称“AndroidManifest.xml”发生冲突(将 android gradle 插件更新到 3.6.0 后构建失败)
【发布时间】:2020-02-26 09:12:02
【问题描述】:

我最近将 Android Studio 从 3.5(稳定)更新到 3.6(稳定)。

然后我看到插件更新也可以了,所以我将“com.android.tools.build:gradle”的版本从3.5.0更新到了3.6.0,并将gradle版本更新到了5.6.4。

现在,当我尝试构建项目时,问题就开始了;它失败并显示消息 Entry name 'AndroidManifest.xml' collided

【问题讨论】:

  • 能否添加错误图片以便更好地理解?
  • 引起:java.lang.IllegalStateException:条目名称“AndroidManifest.xml”在 com.android.zipflinger.ZipArchive.validateName(ZipArchive.java:302) 在 com.android.zipflinger.ZipArchive 发生冲突.writeSource(ZipArchive.java:246) at com.android.zipflinger.ZipArchive.add(ZipArchive.java:126) at com.android.signflinger.SignedApk.add(SignedApk.java:135) ... at org.gradle .internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:131) ... 3 更多
  • 我遇到了同样的问题。我运行“./gradlew assembleDebug --debug”并得到这个错误日志“Task:app:packageDebug FAILED”。新的打包工具可能有问题。通过在 gradle.properties 文件中添加“android.useNewApkCreator=false”禁用它后构建成功
  • same here.. 将 android studio 更新到 3.6 并更新所有可用插件后,尝试运行应用程序和重建项目时会出现此问题。 条目名称“AndroidManifest.xml”发生冲突不知道该怎么办。

标签: android android-studio gradle android-gradle-plugin build.gradle


【解决方案1】:

这是由 Android Gradle 插件 3.6 引起的

通过在您的 gradle.properties 文件中包含以下内容来恢复使用旧打包工具将解决此问题

android.useNewApkCreator=false

更多信息请查看发行说明: https://developer.android.com/studio/releases/gradle-plugin#zipflinger

【讨论】:

  • 你应该在哪里添加这个?
  • gradle.properties
  • 这是一个有用的答案。如果能解释一下新工具不喜欢什么,那就更好了。
  • 我通过清理我的项目来解决这个问题。无效并重新启动一百万次。感谢这帮助 另外,我的错误是:条目名称 'kotlin/collections/MapWithDefault.kotlin_metadata' 碰撞
  • 使用这个,我在安装时收到无法在设备上解析 APK 的错误。
【解决方案2】:

我通过将其添加到应用程序的 build.gradle 中找到了解决方法:

android {
    packagingOptions {
        exclude 'AndroidManifest.xml'
    }
}

由于 Facebook 的 Audience Network,我在 Android Studio 3.5 上解决了创建捆绑包的问题。

【讨论】:

    【解决方案3】:

    我收到类似的错误:条目名称“resources.arsc”发生冲突。正如@Marco Batista 所说的解决方法:

    android {
        packagingOptions {
            exclude 'resources.arsc'
        }
    }
    

    【讨论】:

      【解决方案4】:

      根据 issue,当 JAR 依赖项包含 AndroidManifest.xml 文件时会发生这种情况。

      对于我的项目,原因是这个旧依赖:

      androidTestImplementation 'com.google.android:android-test:4.1.1.4' 
      

      它依赖于 com.google.android:android:4.1.1.4,而 AndroidManifest.xml 在 JAR 中。

      我是如何找到它的

      我在$HOME\.gradle\caches\modules-2\files-2.1 中搜索了所有包含AndroidManifest.xml.jar 文件(我使用了Total Commander)

      然后我用我的应用程序的依赖项交叉引用了结果。 要获取依赖树,请使用 Gradle 工具窗口运行 Tasks/android/androidDependencies gradle 任务。

      【讨论】:

      • 好主意。对我来说是 FirebaseCrashlytics
      【解决方案5】:

      解决这个问题的方法很少。

      1. 将 build.gradle 版本恢复为 3.5.3

        dependencies {
               // classpath 'com.android.tools.build:gradle:3.6.1'       
                  classpath 'com.android.tools.build:gradle:3.5.3'
                }
        
      2. 在app/build.gradle下添加packagingOptions

        android {
           ...
        
          packagingOptions {
              exclude 'AndroidManifest.xml'
          }
        
         }
        
      3. 在 gradle.properties 下,将 useNewApkCreator 设置为 false。添加此标志可能会导致一些 apk 安装问题。

        android.useNewApkCreator=false
        

      最后的办法,通过第三方库进行扫描。检查 androidx.core:core-ktx 插件。尝试更新到 1.2.0 或更高版本。

      【讨论】:

        【解决方案6】:

        AndroidManifest.xml 文件冲突时我遇到了同样的问题。首先,我尝试了useNewApkCreator 解决方法,它适用于我正在开发的应用程序变体。但是当我切换到另一个变体时,构建仍然成功,但应用程序拒绝从 Android Studio 安装。手动安装 .apk 也会导致设备出现解析错误。

        最后,我分析了两个变体的 .apk,发现损坏的 .apk 中包含错误的 AndroidManifest.xml。排除 packagingOptions 中的清单仍然有效。

        【讨论】:

          【解决方案7】:

          我试过了

          android.useNewApkCreator=false
          

          这是一个快速的胜利,因为我能够编译,但是 AndroidManifest.xml 仍然是错误的。我发现是因为我需要对 APK 应用强化过程,而该工具抱怨 AndroidManifest.xml。

          这是因为,正如其他人所解释的那样,APK 没有清单,而是来自依赖项。 我发现通过使用 Android Studio (build/analize APK) 分析 APK,我发现了问题的依赖关系。 Marco Batista 的解决方案很有用,但我将其放在依赖项的 gradle 中,而不是应用程序的 gradle 中。

          android {
              packagingOptions {
                  exclude 'AndroidManifest.xml'
              } 
          }
          

          【讨论】:

            猜你喜欢
            • 2021-01-17
            • 2021-11-17
            • 1970-01-01
            • 2021-06-03
            • 2021-03-15
            • 2015-04-11
            • 2023-03-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多