在创建带签名的 apk 时,获取错误命令为-“ Entry name‘ res/layp/test_toolbar.xml’ 碰撞”

今天我已经将我的 android 工作室从 3.5. x更新到 3.6,并且在为构建变体生成带签名的 apk 时出错,显示了以下消息- Entry name 'res/layout/test_toolbar.xml'冲突 在整个项目中,我没有任何像这样的布局。我有一个名为“ 舞台”的自定义构建变量,每当我尝试构建一个签名的 apk 时,它总是失败。我认为还没有找到任何解决办法。请帮我解决这个问题。谢谢

更新: 同样的问题也可能发生在以下消息中(正如我在 AS-3.6.1-有时继续使用4.x.x中发现的那样)。因此,不要担心这些类型的未知和无法解决的消息。到目前为止,在生成带签名的 apk 时,我发现了两种新类型的消息:

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

结果是一样的。有时你可能需要 Invalidate Cache and Restart你的 AS 为此。

74745 次浏览

I deleted the previous build outputs for the build variant, including the APK file. That's what helped me

While generating the apk, check for the destination folder, from which delete output.json and app-debug.apk from debug folder. Try building the same after this. AFAIK, it is a bug for android studio, hope they might fix this soon :)

It happen when you used auto viewBinding, Binding using Kotlin, or viewBinding feature of 3.6.

In case, you are adding files whose elements share the same IDs, ViewBinding confuses and creates such an error.

Let me help you by example Adapter class which has two layout file separating by view Type :

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.

in case you have to use :

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

which enables the old implementation.

Let me know if this working on your side?

Before reading the solution below, please read my update from 01.04.2020, the problem is deeper and it is in your code.

I've got the same problem after this 3.6 update.

The fast solution is:

  1. delete projectFolder\build
  2. delete projectFolder\debug*
  3. delete projectFolder\release*
  4. delete projectFolder\app\build
  5. delete projectFolder\app\build\debug*
  6. delete projectFolder\app\build\release*

So you need to delete all of the builds, debug and release directories.

Note that you may be not able to delete whole debug and release directories, but you can delete all of its contents.

UPDATE:

I think they have fixed this bug today: enter image description here

UPDATE 03.03.2020: Unfortunately, the bug doesn't fix.

UPDATE 01.04.2020: (Not 1st April joke:) )

Since month I worked with Android Studio developers and today I was told to use JDK instead of using JRE, because one of deep errors in logs said It.

After setting JDK (File->Project Structure->SDK Location->JDK Location) instead of JRE, I've got some other errors that were not shown in "build output" so I run Analyze -> Inspect Code and got EIGHTEEN errors such as referring to wrong view id in layouts, errors with orientation (hi to tools:ignore="MissingDefaultResource") and errors in manifest also with orientation: I read that this is some new update in 3.6.1 - about landscape or portrait screenOrientation, fixed fast by Studio with this: <activity tools:ignore="LockedOrientationActivity" />

When all of the errors were fixed with Analyze -> Inspect Code, I have successfully generated a signed APK using JDK and then using JRE (just for test).

So in summary, this bug caused because of deep errors which you can find out only with Inspect Code tool.

I think AS will not think that this is a bug, I think they will say that this is a new feature for improving your code. Also, I think you should try to inspect your code even without setting JDK instead of JRE.

Additional recommendation from AS support:

BTW when exporting a release build, we also run lintVital which does some extra checks and has some errors marked as fatal. This check is expensive so it does not happen in debug builds

I had the same error after updating Android Studio.

I fixed the problem by only cleaning the project (Build > Clean Project)

Delete "ProjectFolder/build" folder of your project. Make sure you Have Closed Android Studio, otherwise you would unable to delete it.

Problems encountered when upgrading to the latest Android Studio 3.6.1. Clearing the cache, clean the project, and deleting the build folder did not solve the problem.

Just delete the apk generated by the previous compilation.

This may have been overkill but I:

  1. Delete project/build folder
  2. Delete project/app/build folder
  3. File > Invalidate Caches / Restart
  4. Clean Project

It's due to updated configuration changes in the Gradle.

So just try File -> File > Invalidate Caches / Restart

I just delete all debug APKs in myProject\app\build\outputs\apk\debug directory and it worked for me.

This issue is resolved by deleting APKs generated by the previous builds existing in release and debug folders.

Invalidating cache and rebuild would not help if you have not deleted previously generated APKs

After updating to Android Studio 4.1 I faced similar issues, for me it was "entry name 'classes.dex' collided". The error arose when building the app using the option 'Generate Signed Bundle/APK'.

The solution was simple: make sure Android Studio is not running the app when building (stop running and then try again).

I had entry name 'classes.dex' collided

I just unplugged at the computer all four of the devices that I have been testing on.

Then the build succeeded.

To do a clean via the CLI, run ./gradlew clean on the /android directory

That worked for me.

I had the same issue. At issue' comments, I got the link to another issue, then I got a solution, which works for me.

Our project has the following lines at build.gradle(:app) specially for TeamCity

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

But it crashes the local build process.

So I just add condition and fix the issue!

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


Build
|-----> Clean project
|-----> Rebuild project

This worked for me.