Gradle问题: AAPT2 error和"aapt.exe'' finished with non-zero exit value 1或者AAPT2与Robelectric不兼容

转自:https://blog.csdn.net/yi_master/article/details/80363372

就当是做笔记,之前百度了好多问题都没有准确答案,要么就是直接说问题怎么解决,没有解释为什么会出现这个问题的原因,然后以后再遇到这样的问题就又不知道怎么解决了。这里转自别人的一篇文章,解释的很详细。

 

在使用Android Studio编译工程的时候,时常会遇到aapt2和aapt的问题,如下

Caused by: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
    at com.android.builder.png.AaptProcess$NotifierProcessOutput.handleOutput(AaptProcess.java:454)
    at com.android.builder.png.AaptProcess$NotifierProcessOutput.err(AaptProcess.java:411)
    at com.android.builder.png.AaptProcess$ProcessOutputFacade.err(AaptProcess.java:332)
    at com.android.utils.GrabProcessOutput$1.run(GrabProcessOutput.java:104)

Process 'command 'D:\SoftWare\AndroidSDK\build-tools\26.0.2\aapt.exe'' finished with non-zero exit value 1
那这个问题是如何发生,该如何解决?顺着来看

1)首先介绍下什么是Gradle
       简单的来说,Gradle是一个自动化项目构建工具,他可以帮助你配置项目的依赖,将项目进行编译,打包,部署…,也可以定义满足自己需要的构建逻辑,写入到build.gradle中供日后复用;
       我们的Android Studio其实就是基于Intellij IDEA的安卓开发环境的一个开发工具,他集成了Gradle插件,这样我们就可以在AS愉快的撸代码了

2)那怎么查看自己Android Studio上Gradle的版本?
方法一:如下图

è¿éåå¾çæè¿°
方法二:查看gradle-wrapper.properties文件,如下图

è¿éåå¾çæè¿°


3)aapt和aapt2是做什么用的?
aapt即Android Asset Packaging Tool,安卓资源打包工具,他负责将资源文件如xml,图片打包成R.Java(资源索引表),以及.arsc资源文件;随着Gradle版本的升级,在Android Plugin for Gradle 3.0.0里面,默认开启了AAPT2增量资源处理功能,

引用了这么多,那么我们就来看看aapt2 error和aapt.exe finished with non-zero exit value 1是如何产生的

我们用Android Studio来新建一个Module,我的AS版本为3.2 Canary 11,默认集成的Gradle版本为4.1,新建的Module如下

è¿éåå¾çæè¿°

可以看出我是基于Android5.0构建的一个Moudle,Moudle结构如下

 

è¿éåå¾çæè¿°

然后你编译一下工程,就会报aapt2 erro的错误,如下图

è¿éåå¾çæè¿°


正如上面所说Android Gradle 3.0.0默认开启aapt2,那我们既然用不到,关掉他就好,关掉的方法如下

如果您的构建因为 AAPT2 资源处理问题失败或者您想要使用 Roboelectric,您可以通过以下方式停用 AAPT2:在您的 gradle.properties 文件中设置 android.enableAapt2=false,并从命令行运行 ./gradlew --stop,重新启动 Gradle 后台程序。

但是我们的Module里面没有gradle.properties文件啊?好吧,我们自己新建一个,并添加android.enableAapt2=false,最新的项目结构如下

è¿éåå¾çæè¿°

可是重新编译之后,报"aapt.exe’’ finished with non-zero exit value 1错误,如下图

è¿éåå¾çæè¿°

这又是为什么?
aapt是资源打包工具,那么我们就跟踪下项目的资源文件,看下项目的Manifest.xml,如下

è¿éåå¾çæè¿°

在看下项目的res文件

è¿éåå¾çæè¿°

可以发现manifest.xml中引入了mipmap/ic_launcher资源,而ic_launcher.xml使用的是vector这样的标签,因为我们项目是基于android 5.0编译的,但是5.0还不支持vcetor这样高级属性,顾出现了"aapt.exe’’ finished with non-zero exit value 1的错误,那解决办法就是删除这个资源,使用默认的png替换即可,替换的项目结构如下

è¿éåå¾çæè¿°


我删除了原有项目中的mipmap文件夹,删除了ic_launcher_background.xml这样的利用vector属性的xml文件,重新编译项目,一切恢复正常.

其实还有一种情况就是你的manifest.xml文件出现了报错,但是运行的时候没有指向报错的文件,运行的时候也会出现aapt2这个问题。也可以着手在这里解决。

综述:

在使用高版本的AS和Gradle构建项目的时候,会自动生成带有高级属性的项目,如利用vector属性的xml,mipmap资源;如果你的项目选择用的编译版本即android版本过低,则会出现aapt2和aapt的问题;

解决方法也很简单,去除这些高级属性
--------------------- 
作者:yi_master 
来源:CSDN 
原文:https://blog.csdn.net/yi_master/article/details/80363372 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值