Android Studio 生成debug版本正常,生成release版本报错

最近的任务是优化一个老项目,这个项目的开发工具一直以来都是Inteliji IDEA,项目除了生成测试包外,还会有UAT包、生产包等,需要频繁的手动更改IP地址、端口等等一些参数。新项目的开发都是用Android Studio[基于IDEA],所以就尝试着把这个项目导人Android Studio,顺便利用gradle来创建多个版本的包。创建的步骤网上很多教程,这里不再赘述。 遇到的问题是,在debug版本下是OK的,换成release版本(或其他自定义版本)就GameOver了。错误信息很多,诸如 文件编码问题、xml布局问题等等。百度了许久,也没有结果,于是亲自验证测试。根据错误原因:同一个xml布局中有相同的id。因为之前开发用的工具是Eclipse,所以顺便也做一下测试, 新建项目MyAppXml布局如下【Eclipse和Android Studio代码一样,只截取Eclipse中的代码】:

Android Studio 生成debug版本正常,生成release版本报错_第1张图片 

Activity如下: 

Android Studio 生成debug版本正常,生成release版本报错_第2张图片

从代码可以看出,xml文件和Activity中都有警告,

1.如果运行,Eclipse和Android Studio会报ClassCastException( 类型强转异常)错误,可见在Activity中获取xml布局内的控件时,若存在多个相同id的布局控件,Activity中映射的是第一个id的控件

2.如果把蓝色底纹部分去掉。即在activity中不获取布局里的控件,在Eclipse和Android Studio中运行都是OK的

打包时(蓝色底纹部分已经去掉),Android Studio默认为debug(调试)版本,还有可选的release(发行)版本, 当然也可以新增自定义版本

3.在Android Studio中默认的debug版本下,xml中的某些警告能通过编译并生成APK包(debug版本)。

4.如果换成release或自定义版本,则会报错,错误为xml文档中ID重复定义,如下: 


由此可见 ,release版本与debug版本相比“审核“更为严格。因此,由于之前代码中存在某些警告,改成自定义版本后这些警告被”拦截”了。所以打包失败。

小结:

1.Gradle中默认的为debug版本,开发时每次的运行和调试都是在这个版本下进行的。有部分警告在这个版本下可以被“忽略“,但在release版本或者自定义版本下,这种警告就会被判定为”错误“,导致无法生成apk包! 

2.鉴此,开发过程中不要忽视类似的警告,每次发布(生成签名的APK包)的时候,尽可能的生成release版本,可以起到校验作用,有利于代码质量的提高!


你可能感兴趣的:(安卓学习笔记)