Android Studio和Gradle那些坑爹事

其实很早就想写这篇文章抒发对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回编译。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值