【问题标题】:Getting error says - "Entry name 'res/layout/test_toolbar.xml' collided" while creating signed apk出现错误说 - “条目名称 'res/layout/test_toolbar.xml' 冲突”,同时创建签名的 apk
【发布时间】:2020-06-09 20:40:48
【问题描述】:

我今天已将我的 android studio 从 3.5.x 更新到 3.6,并在为构建变体生成签名 apk 时出错,显示以下消息 - Entry name 'res/layout/test_toolbar.xml' collided 在整个项目中,我根本没有任何像这样命名的布局。我有一个名为“stage”的自定义构建变体,每当我尝试构建签名的 apk 时,它总是失败。我算找到任何解决方案了。请帮我解决这个问题。谢谢

更新: 以下这些消息也会出现同样的问题(我在 AS - 3.6.1 - Continues with 4.x.x 有时 中发现了它)。所以不要担心这些未知且不可解析的消息。到目前为止,我在生成签名 apk 时发现了两种新类型的消息:

  • Entry name 'kotlin/collections/MapWithDefault.kotlin_metadata' collided
  • Access Denied

结果是一样的。有时您可能需要为此 Invalidate Cache and Restart您的 AS。让我知道你的发现。谢谢

快速解决方案是:(作为最受欢迎的答案,我同意)

  1. delete projectFolder\build 删除 projectFolder\debug
  2. 删除项目文件夹\发布
  3. 删除项目文件夹\app\build
  4. 删除项目文件夹\app\build\debug
  5. 删除项目文件夹\app\build\release

所以你需要删除所有的构建, 调试和发布目录。

请注意,您可能无法删除整个调试和发布目录,但可以删除其所有内容。

【问题讨论】:

    标签: android android-studio build.gradle signed-apk build-variant


    【解决方案1】:

    在阅读下面的解决方案之前,请阅读我从 2020 年 4 月 1 日开始的更新,问题更严重,它在您的代码中。

    我在这次 3.6 更新后遇到了同样的问题。

    快速解决方案是:

    1. 删除项目文件夹\build
    2. 删除项目文件夹\debug*
    3. 删除项目文件夹\release*
    4. 删除项目文件夹\app\build
    5. 删除项目文件夹\app\build\debug*
    6. 删除项目文件夹\app\build\release*

    所以你需要删除所有的构建、调试和发布目录。

    请注意,您可能无法删除整个 debug 和 release 目录,但可以删除其所有内容。

    更新:

    我认为他们今天已经修复了这个错误:

    2020 年 3 月 3 日更新: 不幸的是,这个错误没有修复。

    更新 01.04.2020: (不是 4 月 1 日的玩笑:))

    自一个月以来,我与 Android Studio 开发人员一起工作,今天我被告知使用 JDK 而不是使用 JRE,因为日志中的一个深层错误表明它。

    在设置 JDK(文件->项目结构->SDK 位置->JDK 位置)而不是 JRE 后,我遇到了一些“构建输出”中未显示的其他错误,所以我运行 Analyze -> Inspect Code 并得到 EIGHTEEN 错误,例如在布局中引用错误的视图 ID、方向错误(您好 tools:ignore="MissingDefaultResource")以及清单中的错误方向:我读到这是 3.6.1 中的一些新更新 - 关于横向或纵向 screenOrientation,由 Studio 快速修复: <activity tools:ignore="LockedOrientationActivity" />

    当使用分析 -> 检查代码修复了所有错误后,我已成功使用 JDK 生成签名 APK,然后使用 JRE(仅用于测试)。

    因此,总而言之,这个错误是由于深度错误造成的,您只能使用Inspect Code 工具才能发现。

    我认为 AS 不会认为这是一个错误,我认为他们会说这是一个改进代码的新功能。 另外,我认为即使没有设置 JDK 而不是 JRE,您也应该尝试检查您的代码。

    来自 AS 支持的其他建议:

    顺便说一句,在导出 release 构建时,我们还会运行 lintVital,它会进行一些额外的检查,并且将一些错误标记为 fatal。此检查很昂贵,因此不会在 debug 构建中发生

    【讨论】:

    【解决方案2】:

    我删除了构建变体的先前构建输出,包括 APK 文件。这对我有帮助

    【讨论】:

    • 我尝试删除整个build 目录,仍然遇到同样的问题。你能详细说明你做了什么吗?
    • 你是否也删除了项目根目录下的 build 目录和 app/build 目录?在我的项目中,apk 的输出路径已更改,我只需删除它所在的先前 apk 文件。
    【解决方案3】:

    升级到最新的 Android Studio 3.6.1 时遇到的问题

    清除缓存、清理项目、删除build文件夹并没有解决问题。


    只需删除之前编译生成的apk即可。

    【讨论】:

    • 最快的解决方案!
    【解决方案4】:

    在生成 apk 时,检查目标文件夹,从中删除调试文件夹中的 output.json 和 app-debug.apk。在此之后尝试构建相同的。 AFAIK,这是 android studio 的一个 bug,希望他们能尽快解决这个问题 :)

    【讨论】:

      【解决方案5】:

      更新到 Android Studio 4.1 后,我遇到了类似的问题,对我来说是“条目名称 'classes.dex' 发生冲突”。 使用“生成签名包/APK”选项构建应用程序时出现错误。

      解决方案很简单:确保 Android Studio 在构建时没有运行应用程序(停止运行,然后重试)。

      【讨论】:

      • 感谢您的提示 ;-) 对我来说,只是手机已连接
      • 这对我来说大部分时间都有效(AVD 而不是连接手机),但有时需要额外重启 Android Studio。
      【解决方案6】:

      此问题已通过删除存在于发布和调试文件夹中的先前版本生成的 APK 得到解决。

      如果您没有删除以前生成的 APK,则无效缓存和重建将无济于事

      【讨论】:

      • 非常感谢,你拯救了我的一天!我尝试使缓存无效并重建很多次,但没有运气!这应该是 4.1 的错误,因为重建应该清除以前的构建文件夹。
      【解决方案7】:

      更新 android studio 后我遇到了同样的错误,我只通过清理项目(构建 > 清理项目)来解决问题!:)

      【讨论】:

        【解决方案8】:

        我只是删除了myProject\app\build\outputs\apk\debug 目录中的所有调试APKs,它对我有用。

        【讨论】:

          【解决方案9】:

          在创建签名的发布版本然后尝试创建调试版本后,我的项目遇到了类似的问题。

          要修复,只需转到菜单“构建”->“清理项目”,然后再次尝试构建。

          【讨论】:

            【解决方案10】:

            这可能有点矫枉过正,但我​​:

            1. 删除项目/构建文件夹
            2. 删除项目/app/build 文件夹
            3. 文件 > 使缓存无效/重新启动
            4. 清理项目

            【讨论】:

              【解决方案11】:

              我做了一个无效缓存并重新启动,它修复了它。

              【讨论】:

                【解决方案12】:

                BuildClean Project 总是为我解决这个问题。但这真的很痛苦。

                【讨论】:

                • 在那片刻,我想我必须阅读文本墙,这是在无效缓存/重启不起作用后接受的答案;)
                • 很高兴它对你有用。虽然这是一个真正的痛苦。我的新构建过程是清理、构建然后运行。有时只需清洁并运行!
                【解决方案13】:

                我遇到了类似的问题。我通过执行“清洁项目”解决了这个问题,然后进行了构建。

                【讨论】:

                  【解决方案14】:

                  已解决:
                  只需删除较早的 apk 文件。就是这样。
                  位置将是:YourProjectFolder/app/debug/

                  【讨论】:

                    【解决方案15】:

                    当您使用自动 viewBinding、使用 Kotlin 绑定或 3.6 的 viewBinding 功能时会发生这种情况。

                    如果您要添加元素共享相同 ID 的文件,ViewBinding 会混淆并产生此类错误。

                    让我举个例子来帮助你 适配器类有两个按视图类型分隔的布局文件:

                    import kotlinx.android.synthetic.main.frag_subscription_recommend.view.*
                    
                    
                    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
                       return ViewHolder(
                            LayoutInflater.from(parent.context).inflate(
                                if (viewType == 1) {
                                    R.layout.frag_subscription_recommend
                                } else
                                    R.layout.frag_subscription_common,
                                parent,
                                false
                            )
                        )
                    }
                    
                    onBinding(){
                      holder.itemView.id_button_submit.setOnClickListener {}
                    }
                    
                    
                     // which in case confusing which resource or layout full fill the requirement bcoz both have same ids of button.
                    

                    如果你必须使用:

                     onBinding(){
                      holder.itemView.findViewById<Button>(R.id.id_button_submit).setOnClickListener {}
                    }
                    

                    启用旧实现。

                    如果这对你有用,请告诉我?

                    【讨论】:

                    • 抱歉,问题出在构建、调试和发布目录上。包括输出 json 文件。不管怎样,谢谢你的回复
                    【解决方案16】:

                    这是由于 Gradle 中更新的配置更改所致。

                    那就试试File -&gt; File &gt; Invalidate Caches / Restart

                    或者 删除系统中的旧 APK

                    【讨论】:

                      【解决方案17】:

                      只需删除已编译好的 APK 文件,即使我们删除它也不起作用,所以请删除 APK @Suraj Gupta 答案是正确的。

                      【讨论】:

                        【解决方案18】:

                        问题是构建引起的。最好的解决方案是清理并重建项目。继续构建并清理项目。

                        【讨论】:

                          【解决方案19】:

                          要通过 CLI 进行清理,请在 /android 目录上运行 ./gradlew clean

                          这对我有用。

                          【讨论】:

                            【解决方案20】:

                            删除项目的“ProjectFolder/build”文件夹。 确保您已关闭 Android Studio,否则您将无法删除它。

                            【讨论】:

                              【解决方案21】:

                              我在生成签名的 APK 时收到此错误消息。

                              Entry name res/interpolator/btn_checkbox_checked_mtrl_animation_interpolator_0.xml collided
                              

                              通过删除现有的 APK 解决了这个问题。不过,这是一个非常奇怪的解决方案。

                              【讨论】:

                                【解决方案22】:

                                尝试清理您的构建并重建它,然后运行项目仍然没有工作,然后执行以下操作

                                文件->使 Cashes 无效 /restart-> 无效并重新启动

                                你可以清理你的构建

                                构建-> 清理项目

                                【讨论】:

                                  【解决方案23】:

                                  只需删除您计算机上project path 中的app&gt;buildbuild 文件夹!

                                  【讨论】:

                                    【解决方案24】:

                                    我所要做的就是重新启动我的系统并转到 Build > Clean Project

                                    【讨论】:

                                      【解决方案25】:

                                      我最近经常遇到这些 d@mned 碰撞错误。这次我只是在我一直在测试的所有四个设备上拔掉了电脑的电源。我有这个... 条目名称“classes.dex”发生冲突 然后我得到了这个... 在 5 秒内构建成功,这... 为具有 1 个构建变体的模块“HTMLSpyII.app”成功生成 APK:构建变体“发布”:定位或分析 APK。 :) :)

                                      【讨论】:

                                      • 我只是重新构建了一个项目,Entry name 'classes.dex' collided 消失了。
                                      【解决方案26】:

                                      我有the same issue。在问题的 cmets 中,我得到了指向 another issue 的链接,然后我得到了一个适合我的解决方案。

                                      我们的项目在专门针对 TeamCity 的 build.gradle(:app) 中有以下几行

                                      applicationVariants.all { variant ->
                                          variant.outputs.all {
                                              outputFileName = "../../" + outputFileName
                                          }
                                      }
                                      

                                      但它会使本地构建过程崩溃。

                                      所以我只需添加条件并解决问题!

                                      applicationVariants.all { variant ->
                                          variant.outputs.all {
                                              if (rootProject.hasProperty("teamcity"))
                                                  outputFileName = "../../" + outputFileName
                                          }
                                      }
                                      
                                      

                                      【讨论】:

                                      • 这个修复是如何工作的?这里要使用哪个字符串作为属性?
                                      • 修复帮助我在 TeamCity 上构建项目,但本地构建因错误而停止。只有在 TeamCity 上运行构建过程时,我才会添加条件并应用修复。
                                      猜你喜欢
                                      • 2020-06-11
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2019-07-14
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      相关资源
                                      最近更新 更多