新年首发,
去年的问题,今年解决~
问题 & 排查
1: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':app:processCommonReleaseManifest'.
> org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 38;
> 元素类型 "manifest" 必须后跟属性规范 ">" 或 "/>"。
定位到了问题所在代码,且能成功复现,异常是在 XmlUtil.serialize
里面抛出。
//问题复现
def xmlpath = projectDir.getAbsolutePath() + File.separator + "testdata" + File.separator + "AndroidManifest.xml"
println("xmlpath: " + xmlpath)
def xmlNode = new XmlParser().parse(new File(xmlpath).getPath())
println("xml node: " + xmlNode)
println("xml serialize begin!")
def serialize = groovy.xml.XmlUtil.serialize(xmlNode)
println("xml serialize done!")
我们发现复现代码中 XmlParser
是一个过时的,不仅如此整个groovy.util
包下都是过时的类,其中一部分过时的类使用新包groovy.xml
下的同名类代替。
果然,更换过时类的包名重新打包没有报错了。
解决
同类目更换导包路径即可。
//过时类
import groovy.util.XmlParser;
import groovy.util.slurpersupport.GPathResult
import groovy.xml.QName
//新类
import groovy.xml.XmlParser
import groovy.xml.slurpersupport.GPathResult
import groovy.namespace.QName
其他问题
assets 资源输出目录:从 merged_assets 变成 assets
检查你的代码,如果有对 assets 资源的操作,注意代码适配,且新版 assets 后面没有了out
子目录,比如我的代码就需要调整路径。
//调整常量 FILE_DIR_MERGED_ASSETS,移除拼接的 out 目录
String outFolder = PluginFileUtils.adjustPath(mProject.projectDir.path,
FileConstant.FILE_DIR_BUILD,
FileConstant.FILE_DIR_INTERMEDIATES,
FileConstant.FILE_DIR_MERGED_ASSETS,
CommUtils.getFirstCharLowercaseStr(CommonManager.getmVariantName()))