其实很早就想写这篇文章抒发对AS和Gradle的不满了。Gradle就像一个娇气好事的小萝莉,时不时整你一下,而AS+Gradle这个组合是我遇到坑爹情况最多的。本文写作时,工程的buildToolsVersion为23.0.3,AS版本2.1.1(别嫌低,升级过一次,被各种问题折磨怕了)。本文持续更新。
Error:Uncaught translation error: XXX
完整报错是:
Error:Uncaught translation error: java.lang.IllegalArgumentException: already added: XXX
显然是jar包冲突。如果你的jar包冲突是第三方之间的(例如友盟分享和微信支付),那么有可能遇到和我一样的问题:我把友盟分享的微信部分的jar删了干净后Rebuild Project
仍然报一样的错误。
解决办法:很简单,重启大法!重启PC后Rebuild Project
就不会报错了,我就是这么解决的。
字段/方法莫名丢失
某个APP将网络请求封装为RequestParamsEntity,转为json格式请求服务端:
public class RequestParamsEntity {
...
}
服务端说,我们加一个字段source来区分Android和IOS端的请求吧!好那就加吧:
public class RequestParamsEntity {
//请求来源,固定填写android
private String source = "android";
...
}
如果app的release版配置了代码混淆,就会发现debug版能正常上传source字段,而release版则没有那个字段。
原因:source并没有被引用和使用(即提示Field 'source' is never used
),所以打包时,这个字段被去除了。
解决办法也很简单:为这个字段加上getter和setter就好了。
Content is not allowed in prolog
Gradle compile的时候报的错误,本人遇到的情况是由于Gradle版本较低导致的(2.10导入2.14.1的项目),因此最好使用最新版本的Gradle,并记得Clean Project
,问题一般就可以解决。
由于许多项目持续升级Gradle,而目前最新的Gradle必须有JDK8的支持,因此注意更新JDK版本和Android SDK版本。
Gradle Build Running
网上有许多提高gradle速度的文章就不多说了。本人遇到的一次无限Gradle Build Running
是由于:某些语法错误未被检查到,但是出于某些原因,Gradle并没有停止并显示Build Failed
,而是一直空转。重新Rebuild Project
问题就能得到解决。
aapt与aapt2
buildToolVersion从26以后引入了aapt2,使用aapt2构建的应用与aapt不兼容。其原因是,aapt2构建的应用其public.xml
格式发生了改变,而aapt无法兼容public.xml
的格式。例如apktool的一个issue#1594,aapt2构建的应用无法重新用appt回编译。