你可能看到一些代码,了解了 Android 的版本号都是通过 Flutter 那边获取的:

    1. def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
    2. if (flutterVersionCode == null) {
    3. flutterVersionCode = '1'
    4. }
    5. def flutterVersionName = localProperties.getProperty('flutter.versionName')
    6. if (flutterVersionName == null) {
    7. flutterVersionName = '1.0'
    8. }
    9. ///......
    10. versionCode flutterVersionCode.toInteger()
    11. versionName flutterVersionName

    然后你发现默认情况下 local.properties 这个文件里没有 flutter.versionCode 这个变量,那要如何更新 versionCode 呢?

    首先我们要了解 Flutter 的版本指定规则 :
    A.B.C+X
    看生成的代码会发现 A.B.C 就是 Android 包的 versionName,所以这个 X 就是 versionCode

    这就完了?

    没有,我猜大多数开发者为了包大小, Flutter 工程打包时都会带上 —split-per-abi 这个参数,然后等到临近发版的时候,你一看明明指定的 versionCode 是 2,怎么变成 1002 了,这是遵循了Google Play 规则导致的,所以结果是 arm32 的 code 会在上面的 X 上自动加 1000,x86 加 2000,x86_64 加 3000,本质是为了同一个 APP 对不同设备派发不同架构的apk文件时做出区分。

    当然因为众所周知的原因,咱们用不了 Google Play,国内的商店大概是不支持这种分包识别的,所以上传包的时候注意 versionCode 的值,不要比上一次低