aapt.exe finished with non-zero exit value 1

完美解决Android编译时出现aapt.exe finished with non-zero exit value 1 吐血整理

2018年10月31日 17:32:03 CodeForCoffee 阅读数 7254

 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24118527/article/details/83586161

问题描述

楼主几周前搞的一个项目,源代码: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等等各种平台,发现不少朋友们都遇到过这个问题,总结的解决可以归纳为如下几种:

  • Android Studio 问题,重启后打开就好
  • Clean、Rebuild 缓存问题
  • SDK 版本问题
  • 项目中各种包之间版本互斥问题
  • 资源文件问题  用的图片应该是png而不是jpg
  • Build.Gradle 文件里加几句代码...

首先申明,上面提到的这些方法或许对某些朋友来说确实奏效

但是在我这边统统没有用(或者说太笼统,没有切实可行的解决步骤)qwq


问题分析

其实很早楼主就知道这个是资源文件的问题了,因为:

  • 楼主的项目里用了很多第三方库,容易出现版本冲突
  • 所有的.java文件里的R类都无法生成,这说明你的资源文件肯定是有问题的

说归这样说,但是因为项目体量太大,项目里的资源文件实在太多了

楼主的资源文件,大家可以感受下

随便打开一个目录,都是一大片

所以虽然楼主知道是资源文件出的问题,但是在这多资源文件里去定位问题所在,无异于大海捞针

而且像这种问题,很可能是你的某个文件里的某一句代码出了问题,如果你要一句句地去找,只会事倍功半

选择最末尾的红色行,可以拿到Android Studio Build 控制台给出的更多报错信息

就像这样

楼主曾经把这些报错的日志全部打印下来一点点的寻找,但是仍然没有找到任何有用的信息,一切线索也止步于错误在资源文件这一点上

所以接下来的问题已经很明确了:

Android Studio给出的报错提示无法提供更多的信息,我们需要一种更加高效的调试方法,来定位错误所在

这是楼主参考的最重要的一篇文章,这篇文章为接下来的调试提供了思路

https://blog.csdn.net/tcpipstack/article/details/51559613

调试的方法是:使用Gradlew


解决步骤

首先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常用指令:

  • dir  显示当前目录下所有文件或目录
  • cd ** 进入目录,**是目录的名字
  • cd .. 回到上一级目录

在这个Android终端里,我们输入java -version看一下

接下来输入一条非常关键的指令:

gradlew processDebugResources --debug

然后项目开始编译,屏幕上输出大量编译Log信息

这个信息量是很大的,如果一条一条去看,估计可以看好几天

但是好在这些信息给了我们更多的提示

那么如何从这么多的信息中找到我们想要的东西呢?

鼠标从最下面开始拉

一直拉到最上面

打开Notepad++,把所有信息复制进去

嗯...确实很夸张

接下来Ctrl+F,搜索aapt,然后点击计数

可以发现aapt这个关键词在这整篇的日志里一共出现了9次

因为报错是在aapt里,所以我们重点关注aapt的信息

其实这里已经给得很清楚了

 
  1. 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''

  2. 16:10:03.844 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: FAILED

  3. 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

  4. ILED)

  5. 16:10:03.845 [DEBUG] [org.gradle.api.Project] Failed to generate resource table for split ''

  6. 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

  7. und that matches the given name (at 'app_color_description' with value '@color/qmui_config_color_gray_5').

  8.  
  9. 16:10:03.856 [ERROR] [org.gradle.api.Project] Failed to generate resource table for split ''

  10. 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

  11. 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
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值