多模块Android项目开启ProGuard后版本代码010007变为4103问题咨询
问题分析与解决方案
你遇到的版本代码异常转换问题,根源其实是你设置的版本代码是以0开头的数字,被Android构建工具当成八进制数解析了。
咱们来验证一下这个规律:
- 你设置的
010007是八进制数字,转换为十进制正好是4103(计算过程:8⁴=4096,加上末尾的7,4096+7=4103) - 而
010006转十进制就是4096+6=4102,完全和你观察到的outputs.json里的结果对应上了。
解决办法
直接使用无前置0的十进制整数作为versionCode
Android的versionCode本质是整数类型,不要给它加前导0。如果你的版本代码是用来分段表示版本(比如01.00.07),直接把拼接后的数字转成十进制整数即可,比如把010007改成10007。修改你的build.gradle(或build.gradle.kts):android { defaultConfig { versionCode 10007 // 去掉前导0,用纯十进制整数 // 其他配置项... } }从外部配置读取时强制十进制解析
如果你是从gradle.properties这类外部文件读取版本代码字符串,一定要显式指定按十进制解析,避免被默认当成八进制处理:def versionCodeStr = project.findProperty("VERSION_CODE") ?: "10007" versionCode Integer.parseInt(versionCodeStr, 10) // 强制十进制解析
补充说明:这个问题其实和ProGuard本身无关,是Java/Kotlin的数字字面量规则导致的——以0开头的整数会被解析为八进制。开启混淆后,构建工具在输出outputs.json时展示的是转换后的十进制值,所以你才看到了这个差异。
内容的提问来源于stack exchange,提问作者TheKarlo95
相关产品推荐
相关产品推荐

