你可能看到一些代码,了解了 Android 的版本号都是通过 Flutter 那边获取的:
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
///......
versionCode flutterVersionCode.toInteger()
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 的值,不要比上一次低