前言
升级到AS 3.1.3后,instant run开启后,Aapt2不能设置为false。
问题
环境:AS 3.1.3,开启instant run,Aapt2=true。
不知道项目合并了哪个库的AndroidManifest文件,导致我的最终的AndroidManifest文件中,出现了
<manifest>
....
<library></library>
....
</manifest>
于是就出现编译报错:
error: unknown element <library> found.
Message{kind=ERROR, text=error: unknown element <library> found., sources=[E:\Stable\DressingMirror\app\build\intermediates\manifests\full\debug\AndroidManifest.xml:36], original message=, tool name=Optional.of(AAPT)}
网上一查,发现大家都说,把Aapt2设置为false,也就是在gradle.properties中设置:
android.enableAapt2=false
这样一来instant run就用不了了,而且在2018年底,android.enableAapt2这个属性将会被移除。于是得想办法在AndroidManifest中去掉那个不支持的library标签,总不能一个一个库去找吧。
解决
经过一番Google,只要在你的AndroidManifest中加入:
<manifest>
....
<library tools:node="removeAll" />
....
</manifest>
无需设置android.enableAapt2=false。上面的意思可以看Manifest文件的合并规则。
困扰我许久的问题解决。