一次gradle异常

问题

在编译android应用的使用,配置manifest.xml的属性时,使用如下写法

1
android:value="${versionCommit}"

那么在编译时,使用·-PversionCommit=2970e93·就可以设置这属性值,但是,在构建出的apk中,这个属性竟然是个数字2139095040.000000,

分析

直接看上去,像是把2970e93当成科学计数法了,直接从字符串转成了数字,但是直接转换,发现是不相等的,

解决

既然发现是自动将值转类型,那么久可以尝试禁止转义,可以使用转义符防止转义

-PversionCommit=\\2970e93

测试后发现可以解决问题

新的问题

在某些构建脚本下,会出现versionCommit值不合法的问题,实际构建中,会在生成的文件中使用到这个变量

1
2
3
文件: app/build/generated/source/buildConfig/.../debug/BuildConfig.java
代码: public static final String versionCommit ="970e93"
报错: illegal escape character

BuildConfig.java这个文件实际上gradle自动生成的,可以用于区分构建的环境(版本),比如测试版本、正式版本、特殊版本等,

关于BuildConfig的使用,可以参考 这个