Android Studio 升级 3.0 后 aapt2 异常、不认识 intent-filter、.dex exceed 64K

作者:vkvi 来源:ITPOW(原创) 日期:2017-11-23

Android Studio 用着一直觉得有很多不爽,比如不支持代码分隔、窗口独立、不提示参数说明等等。最近提示 3.0 可用,索性就升级了,升了后期望的功能照样没有,还搞出一系列毛病来。

项目 A 较小没问题、项目 B却 一系列错误,比如这里版本不对、那里缺少这个那个,这些都调整、安装了,但是还有几个错误一直无法解决。

Error:(361) error: unknown element found.
Error:(361) unknown element <intent-filter> found.
Error:java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Execution failed for task ':app:processDebugResources'.
> Failed to execute aapt

坑爹啊,从第一行错误入手,以为是引用 Library 版本不对,导致不认识,而且的确 build.gradle 中 dependencies 下也有几个有红色波浪线,提示版本不对。折腾半天也解决不了。后来再研究,发现这个 AndroidManifest.xml 还并不是 main 目录下的,而是编译生成在 app\build\intermediates\manifest\androidTest\debug 这个目录下的,更没辙了。

索性放弃,从第后面的错误 aapt2 error 入手。网上去搜,居然有很多人有相同的问题。

解决一

有人说他查阅了官方文档,Android Studio 3.0 后,默认是启用了 aapt2 的,把它关了就可以了。

关的方法是在:gradle.properties 文件中追加一句:android.enableAapt2=false

请参见:http://blog.csdn.net/qq_29760591/article/details/78351004

解决二

很多人就此解决问题了,可是我的项目稍微大一点(其实也不算大),所以报了另外一个错误:

The number of method references in a .dex file cannot exceed 64K.

后面跟了个解决方案的网址,但是这个网址是被墙了的,打不开。这个错误大概有个印象,但是具体怎么操作记不得了,所以又上网搜。

最终方法是使用:使用 Mutidex 解决 Dex 超出方法数的限制

请参见:http://blog.csdn.net/u011275280/article/details/51833974

build.gradle 的大概步骤为:

1、在 dependencies 下添加:compile 'com.android.support:multidex:1.0.0'

2、在 android 节点下添加:dexOptions { javaMaxHeapSize "4g" }

3、在 android/defaultConfig 节点下添加:multiDexEnabled true

参见上面网址编译后,解决了,之前的  intent-filter 问题也没冒出来了。

解决三

我还遇到过另外一种情况,也是报这个错误,就是我在 values/styles.xml 中新建了一个样式,这个样式引用了一个 drawable 作为 background,但是对应的 drawable 文件被我删除了。就出错了,不仅提示 aapt2 错误,还提示 R 对象无效。

今天导入一个 module 又遇到 aapt2 错误,一检查,也是样式的问题,不过这次不是样式目标不存在,而是 name 不存在,如下:

aapt2 错误

还有属性名称写错了,也会报这个错。

相关文章