You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多模块Android项目开启ProGuard后版本代码010007变为4103问题咨询

问题分析与解决方案

你遇到的版本代码异常转换问题,根源其实是你设置的版本代码是以0开头的数字,被Android构建工具当成八进制数解析了。

咱们来验证一下这个规律:

  • 你设置的010007是八进制数字,转换为十进制正好是4103(计算过程:8⁴=4096,加上末尾的7,4096+7=4103)
  • 而010006转十进制就是4096+6=4102,完全和你观察到的outputs.json里的结果对应上了。

解决办法

  1. 直接使用无前置0的十进制整数作为versionCode
    Android的versionCode本质是整数类型,不要给它加前导0。如果你的版本代码是用来分段表示版本(比如01.00.07),直接把拼接后的数字转成十进制整数即可,比如把010007改成10007。修改你的build.gradle(或build.gradle.kts):

    android {
        defaultConfig {
            versionCode 10007 // 去掉前导0,用纯十进制整数
            // 其他配置项...
        }
    }
    
  2. 从外部配置读取时强制十进制解析
    如果你是从gradle.properties这类外部文件读取版本代码字符串,一定要显式指定按十进制解析,避免被默认当成八进制处理:

    def versionCodeStr = project.findProperty("VERSION_CODE") ?: "10007"
    versionCode Integer.parseInt(versionCodeStr, 10) // 强制十进制解析
    

补充说明:这个问题其实和ProGuard本身无关,是Java/Kotlin的数字字面量规则导致的——以0开头的整数会被解析为八进制。开启混淆后,构建工具在输出outputs.json时展示的是转换后的十进制值,所以你才看到了这个差异。

内容的提问来源于stack exchange,提问作者TheKarlo95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:59:09