Androidアプリのビルド番号は最新のものが以前のものよりも常に大きくある必要がある
タイトルの通りです。
起こった問題
先日、Flutter製のAndroidアプリをビルドする際にビルド番号をコミット数から設定するように変更しました。
FlutterアプリをGitHubActionsでビルドする際にコミット数をビルド番号として設定する
嬉々揚々とビルドしてGooglePlayへの審査に出そうとしたところ、以下のエラーが出てしまいました。
##[error***You cannot rollout this release because it does not allow any existing users to upgrade to the newly added APKs.
原因
調べてみると、本記事のタイトルの通りAndroidアプリのビルド番号は最新のものが以前のものよりも常に大きくある必要があるとのことでした。
versionCode - 内部バージョン番号として使用される正の整数。 この番号は、バージョンを比較してどちらが新しいかを判定するためだけに使用されます。番号が大きいほど、バージョンが新しいことを示します。この番号は、ユーザーに表示されるバージョン番号ではありません。ユーザーに表示されるのは、下記の versionName 設定で定義した番号になります。Android システムは、ダウングレードを防止するために versionCode 値を使用し、現在デバイスにインストールされているバージョンよりも versionCode が小さい APK をユーザーがインストールできないようにします。
解決法
すでにバージョン1.0.0~1.0.3
をリリースしており、それぞれ10000~10003
のビルド番号を与えてしまっていました。
今後リリースするアプリのビルド番号はこれ以上にする必要があります。
そこで、ビルド番号の与え方をコミット数 + 10000
とすることで一応解決させました。気持ち悪いですが、最初からビルド番号のことをちゃんとやっていなかったツケです。
最終的にGitHubActionsでビルド番号を設定する箇所は以下のようになりました。
VERSION=$(cider version)
GIT_COMMIT_COUNT=$(git rev-list HEAD --count)
BUILD_NUMBER=$(($GIT_COMMIT_COUNT + 10000))
cider version $VERSION+$BUILD_NUMBER
おわり
今回の教訓は「ビルド番号の管理方法は初期リリースでちゃんと決めておこう」です。