Androidアプリのバージョン管理
アプリのバージョン管理についてあまり理解できていなかったので、
調べた内容をまとめてみました。
公開バージョンと内部バージョン
まず2つのバージョンがあります。
公開バージョンは 1.0.0 のような形式で、ユーザに見えるバージョンです。
内部バージョンは 1 のように整数で定義するもので、開発者が管理するバージョンです。
内部バージョンはユーザには公開されません。
バージョンを記載する場所
build.gradle(Kotlin DSL の場合はbuild.gradle.kts)で以下のように定義します。
android {
namespace 'com.example.testapp'
compileSdk 33
defaultConfig {
applicationId "com.example.testapp"
minSdk 24
targetSdk 33
versionCode 1
versionName "1.0"
...
}
公開バージョン
こちらはGooglePlayStoreのアプリのページに表示されるものです。
先ほど提示したコード上の versionName にあたります。
例えばLINEを例に挙げると 15.14.1 と記載があります。

値は文字列で、<メジャー>.<マイナー>.<ポイント> という形式になっています。
ユーザに更新を知らせる目的のために使用され、Google Playはここを見て更新の判断はしません。
そのため、前回と同じバージョンでもストアにアップロードすることができます。
ただ実務上は、ユーザー向けに混乱を避けるため versionName も上げるべきです。
内部バージョン
こちらは開発者が内部で管理するためのものです。
先ほど提示したコード上の versionCode にあたります。
値は正の整数で、Google Playはここを見て更新の判断をします。
ダウングレードを防止するために内部バージョンを使用し、現在デバイスにインストールされているバージョンよりも versionCode が小さい APK をユーザーがインストールできないようにします。
以前より小さいバージョン、もしくは同じバージョンだとアップロードを拒否されます。
参考
アプリのバージョニング - Android Developers