Android studio报错:app:mergeDebugResources FAILED(记一次痛苦不堪的debug)

本文主要是介绍Android studio报错:app:mergeDebugResources FAILED(记一次痛苦不堪的debug),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、问题背景

最近接手了一个Android开发项目,由于之前的开发人员是用Android studio开发的,并且用的Android6.0的API,因此我之前用的eclipse就不能支持了,于是正式安装了Android studio,来体验一下google官方推荐的开发工具感觉如何。我的版本是2.2.2

2、问题描述

昨天上午,我在app中添加了一个activity并为之配了相应的布局文件,之后突然发现,应用报错了!!!!而且坑爹的Android studio没有给出任何的报错信息,只有一句话:app:mergeDebugResources FAILED。于是按照惯例,我首先去百度,一般来说,这种问题一定是大家都会遇到的,所以一般都会得到答案,但我万万没有想到,由于Android studio给出的这一句错误信息模糊不堪,而可以导致这个错误的原因有非常多,因此百度到的答案众说纷纭,没有一个能解决我的问题……但是学到了一个可以在Android studio中打印详细报错信息的方法,也算一点收获吧……

方法附上:

在命令行中进入项目的根目录,或者可以在Android studio的Terminal中直接操作也可以,然后敲入一个命令:

gradlew compileDebug --stacktrace

就可以输出较详细的信息,然后根据命令行给出的提示,还可以在后面加上-info或者-debug的选项得到更详细的信息,于是这个命令可以这样写:

gradlew compileDebug --stacktrace -info

或者:gradlew compileDebug --stacktrace -debug

但是并没有任何作用!给出的报错信息都是包中的类的错误位置,没有一句提到是我的代码的什么地方出了错,打印出的信息截图如下:



就这样整整耗费了我一整天的时间,debug没有任何进展,我带着万般无奈的心情在当天的bug还没有被解决的情况下睡觉了,盼望第二天能解决它……

3、排错过程

由于一直在想这个bug,我一晚上都没睡好,今天早早就醒了,起来继续debug,哎………………

前一天在百度的过程中,我看到一位大大在博客里写到出现这种报错一般是之前的代码哪里写错了,只要回复到之前的版本就可以了,但是我第一没有把项目推到github上,第二Android studio已经关闭过了,不可能使用Ctrl+z来恢复,不过我觉得这位大大说的还是很有道理的,因为我真的觉得没有什么导致了错误,也只能是这样了,于是我就顺着这个思路往下找,把项目中的十几个activity文件的代码逐行检查了一遍,同时把几十个layout文件也逐行检查了一遍,没有任何错误……崩溃

于是我又开始用老方法,企图从报错信息中找到一些蛛丝马迹。不过这一次我在打印出的信息中注意到了以前没有关注的细节,附图:


注意看我用红色标记的句子,它说compileDebug这个命令是模糊的,可以用后面那一大串来代替它,然后我突然反应过来,我报的错误一直提示什么resource的问题,于是我在这些候选命令里找到了红线标注的一句:compileDebugSources,本着死马当活马医的心态,我把打印报错信息的命令改成了如下这样:

gradlew compileDebugSources --stacktrace -info

然后还真的获得了一些不同的信息,附图如下:



注意我用红线标注的地方,它说我在drawable-xhdpi这个目录下少了一张图片,我很奇怪,因为程序出错的时候我根本没有动过图片,将信将疑地,我打开相关目录看了一下,方法如下:



如图,点击我用红线框起来的地方,把视图改成project,于是可以看到完整的目录结构:



找到报错信息提示的目录,我发现之前我用到的若干图片,只放在了mipmap-mdpi中而在mipmap-hdpi中没有,于是我复制了一份放到mipmap-hdpi中,再次尝试启动应用,神奇的事情发生了,程序正确运行,错误被排除了!!!!太感人了……

4、总结

这次的排错过程让我摸索出了很多东西,和大家分享一下

1、Android studio不像eclipse那样可以直接在logcat中打印错误信息,更别提错误代码的定位了

2、如果希望获得Android studio的报错信息,需要手动编译项目,方法我已经写在上面

3、排错时,首先用gradlew compileDebug --stacktrace -info来查看最基本的信息,然后根据这些信息进一步精确命令,比如在本例中我需要用compileDebugSources来获得更精确的定位

4、虽然感觉到Android studio用起来不如eclipse舒服,存在很多缺点:重量级,运行需要耗费许多计算资源、不能很好地给出错误提示,不能定位错误代码、有时候会出现一些莫名其妙的错误,但是毕竟它是google官方推荐的开发工具,并且目前对eclipse的维护已经停止,因此我们不得不将平台逐渐迁移到Android studio来,只好自己去适应这个工具的一些特点,相信我这次调错得到的一些经验对于今后的调试还是有一定帮助的

5、最后的最后,在编程的过程中,经验的指导作用还是相当重要的,因此当我们把每一次的debug当做一次积累经验的机会和学习调高的机会的话,那么debug也没有那么可怕了,甚至当排除一个奇怪的错误时还能获得很多的成就感。

这篇关于Android studio报错:app:mergeDebugResources FAILED(记一次痛苦不堪的debug)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/421493

相关文章

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n