您的位置  > 互联网

编译工程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)首先介绍一下什么是

简单来说,它是一个自动化的项目构建工具,可以帮助你配置项目依赖、编译、打包、部署项目……你还可以定义满足你需求的构建逻辑,并将其写入到 build. 中。 以供将来审查。 使用;

我们的其实是一个基于IDEA 开发环境的开发工具。 它集成了插件,让我们可以愉快地在AS中编码。

2)如何查看您安装的版本?

方法一:如下图

方法二:查看-。 文件,如下图

3)aapt和aapt2有什么用?

aapt是Asset Tool,一个资源打包工具。 负责将xml、图片等资源文件打包成R.Java(资源索引表)和.arsc资源文件; 随着版本的升级,在3.0.0中,默认开启AAPT2增量资源处理功能。

参考了这么多,我们来看看aapt2错误和非零退出值1的aapt.exe是如何生成的。

我们用它来创建一个新的。 我的AS版本是3.2 11。默认集成版本是4.1。 新的如下

可以看到我基于.0搭建了一个,结构如下

然后你编译项目就会报aapt2 erro错误,如下图

如上所述,aapt2 在 3.0.0 版本中默认启用。 既然我们不需要它,就把它关掉吧。 关闭方法如下。

如果您的构建由于 AAPT2 资源处理问题而失败或者您想使用它,您可以通过在 . 文件并从命令行运行 ./ --stop ,重新启动后台程序。

但是我们的里面没有这个文件?好吧,我们自己新建一个,加上.=false。 最新的项目结构如下

但重新编译后,报错“aapt.exe” with non-zero exit value 1,如下图

为什么是这样?

aapt是一个资源打包工具,所以我们会跟踪项目的资源文件,查看项目的.xml,如下

查看项目的res文件

可以发现.xml中引入了/,.xml中使用了这样的标签,因为我们的项目是基于5.0编译的,但是5.0还不支持这样的高级属性,所以“aapt.exe”带有非-零退出值1错误,解决办法是删除该资源,替换为默认的png 替换项目结构如下。

我删除了原项目中的文件夹,使用nd.xml等属性删除了xml文件,重新编译项目,一切恢复正常。

概括:

使用高版本AS构建项目时,会自动生成带有高级属性的项目,如使用属性的xml、资源等。 如果你的项目选择使用太低的编译版本,就会出现aapt2和aapt。 问题;

解决办法也很简单,去掉这些高级属性