楼主几周前搞的一个项目,源代码:https://github.com/nikolajohn/NFC-Based-Multiplexed-Sensor
最近由于课题组需要,重新拿起这个项目使用
但是在打开时却出现了很神奇的报错:
报错信息很简洁,当然报错信息的简洁也意味着你拿到的信息很少
Process 'command 'C:\Users\Administrator\AppData\Local\Android\Sdk\build-tools\27.0.0\aapt.exe'' finished with non-zero exit value 1
如图所示
一开始楼主以为这只是一个很小的错误,稍微改点东西就好,甚至一开始都没有把这个问题放在心上
但是不久后马上就被教做人了qwq
楼主被这个小问题卡了整整2天,期间试了各种方法都没有效果,简直无颜向导师和课题组师兄汇报
这2天里楼主查遍Google、百度、Bing、StackOverflow、CSDN等等各种平台,发现不少朋友们都遇到过这个问题,总结的解决可以归纳为如下几种:
首先申明,上面提到的这些方法或许对某些朋友来说确实奏效
但是在我这边统统没有用(或者说太笼统,没有切实可行的解决步骤)qwq
其实很早楼主就知道这个是资源文件的问题了,因为:
说归这样说,但是因为项目体量太大,项目里的资源文件实在太多了
楼主的资源文件,大家可以感受下
随便打开一个目录,都是一大片
所以虽然楼主知道是资源文件出的问题,但是在这多资源文件里去定位问题所在,无异于大海捞针
而且像这种问题,很可能是你的某个文件里的某一句代码出了问题,如果你要一句句地去找,只会事倍功半
选择最末尾的红色行,可以拿到Android Studio Build 控制台给出的更多报错信息
就像这样
楼主曾经把这些报错的日志全部打印下来一点点的寻找,但是仍然没有找到任何有用的信息,一切线索也止步于错误在资源文件这一点上
这是楼主参考的最重要的一篇文章,这篇文章为接下来的调试提供了思路
https://blog.csdn.net/tcpipstack/article/details/51559613
首先win+R,输入cmd,进入控制台
回车后,查看是否有java版本的显示,如果没有,请按照以下的方法配置JDK和Jre
(此处参考文章:https://blog.csdn.net/u012187452/article/details/72595040)
有的同学可能会有疑问,为什么我用gradlew但是要配置JDK和Jre呢?
原因很简单:你的gradlew需要用到java环境,可以打开你的项目目录下的gradlew.bat批处理文件
使用notepad++打开(Notepad++:https://notepad-plus-plus.org/download/v7.5.9.html)
大约在30几行的样子,可以看到用到了java的环境变量
言归正传
打开你的Android Studio,然后点击这个地方
这里就是你的JDK地址
复制一下这个目录,然后打开
这个jre不是你自己安装,而是你在安装Android Studio时,Android Studio帮你安装的(看这个路径也可以看出一些名堂)
在你的系统变量下,点击新建
名字就叫做JAVA_HOME,就叫这个名字,不要乱改...
地址就是你刚刚从Android Studio里复制过来的那个
然后找到Path这个变量,双击一下编辑之
然后点击编辑文本
把这段话复制到最前面,注意不要自己乱改,要一字不差地复制过去
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
加完以后就是这样
然后再点这个新建
变量名字叫classpath
变量值如下:(注意要一字不差,最前面有个点,代表的是当前路径,一定要加上)
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
解析来还是去cmd里面看一下
这样说明刚刚的设置成功了!
接下来还是回到Android Studio打开下面的这个地方
使用Android Studio自带的终端进行调试
当然你也可以用cmd做,其实是一样的,但是那样会比较麻烦
cmd常用指令:
在这个Android终端里,我们输入java -version看一下
接下来输入一条非常关键的指令:
gradlew processDebugResources --debug
这个信息量是很大的,如果一条一条去看,估计可以看好几天
但是好在这些信息给了我们更多的提示
那么如何从这么多的信息中找到我们想要的东西呢?
鼠标从最下面开始拉
一直拉到最上面
打开Notepad++,把所有信息复制进去
嗯...确实很夸张
接下来Ctrl+F,搜索aapt,然后点击计数
可以发现aapt这个关键词在这整篇的日志里一共出现了9次
因为报错是在aapt里,所以我们重点关注aapt的信息
其实这里已经给得很清楚了
16:10:03.184 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'C:\Users\Administrator\AppData\Local\Android\Sdk\build-tools\27.0.0\aapt.exe''
16:10:03.844 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: FAILED
16:10:03.844 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'command 'C:\Users\Administrator\AppData\Local\Android\Sdk\build-tools\27.0.0\aapt.exe'' finished with exit value 1 (state: FA
ILED)
16:10:03.845 [DEBUG] [org.gradle.api.Project] Failed to generate resource table for split ''
16:10:03.855 [ERROR] [org.gradle.api.Project] C:\Users\Administrator\Desktop\NFC-Based-Multiplexed-Sensor-master\app\build\intermediates\res\merged\debug\values\values.xml:129:41-72: AAPT: No resource fo
und that matches the given name (at 'app_color_description' with value '@color/qmui_config_color_gray_5').
16:10:03.856 [ERROR] [org.gradle.api.Project] Failed to generate resource table for split ''
C:\Users\Administrator\Desktop\NFC-Based-Multiplexed-Sensor-master\app\build\intermediates\res\merged\debug\values\values.xml:129: error: Error: No resource found that matches the given name (at 'app_col
or_description' with value '@color/qmui_config_color_gray_5').
他告诉路径
告诉你错在哪里
打开那个文件,果然如此
直接注释掉,完美解决!
为什么会出现这个问题呢?因为楼主之前用过QMUI的UI库,但是后来发现效果不好,就放弃了,但这个库一直是在项目里的
近期Android Plugin更新,发现这个库用不了了,楼主就直接把这个库给删除了,结果没想到有些小东西还没删干净(其实有好几处,但是本文里演示只演示一处)
要是没有这种新的调试方法,楼主还不知道要调到什么时候啊...
刚刚在文中已经提到了两篇最重要的参考文章
除此之外还有一些其他的文章,可以帮助了解gradlew:
https://blog.csdn.net/CheDanDeHuiYi/article/details/78513444
https://blog.csdn.net/liveTXL/article/details/79083811
https://blog.csdn.net/suwu150/article/details/81006992
https://blog.csdn.net/a925177652/article/details/68947539