Google PlayへAABをアップロードするとき、次のエラーが表示されることがあります。
Version code has already been used.
これは、AAB内のversionCodeが、同じアプリで過去に使用した値と重複している場合に発生します。
versionCodeとは
versionCodeは、AndroidとGoogle Playがアプリの更新順序を判断するための整数です。
android {
defaultConfig {
versionCode = 43
versionName = "1.4.0"
}
}
新しいリリースでは、原則として以前より大きい値を設定します。
初回:1
更新:2
次回:3
versionNameとの違い
| 項目 | versionCode | versionName |
|---|---|---|
| 目的 | 内部の更新判定 | ユーザー向け表示 |
| 形式 | 整数 | 文字列 |
| 例 | 43 | 1.4.0 |
| 更新時 | 大きくする | 任意の命名規則 |
versionNameを変更しても、versionCodeが同じなら新しい更新として扱われません。
重複エラーが出る原因
過去に同じ値をアップロードした
公開を取り消したリリースや下書きで使用した値でも、再利用できない場合があります。安全策として新しい大きな値を使います。
別トラックで使用済み
内部テスト、クローズドテスト、オープンテスト、製品版は同じアプリのversionCode空間を共有します。
内部テストでversionCode 50を使用済み
→ クローズドテストへ50は再アップロードできない
古いAABを選択した
ビルド後に複数の成果物があると、以前のファイルをアップロードすることがあります。
ファイル名へversionCodeを含める、生成日時を確認するなどの対策を行います。
CIとローカルで採番が競合
ローカルで43、CIでも43を生成すると、先にアップロードした方だけが成功します。
Android Studioで変更する
Kotlin DSL:
android {
defaultConfig {
versionCode = 44
versionName = "1.4.1"
}
}
Groovy:
android {
defaultConfig {
versionCode 44
versionName "1.4.1"
}
}
変更後にrelease AABを作り直します。
./gradlew bundleRelease
Flutterで変更する
pubspec.yamlのバージョンは次の形式です。
version: 1.4.1+44
1.4.1:versionName44:versionCode
ビルド:
flutter build appbundle
コマンドで指定する場合:
flutter build appbundle \
--build-name=1.4.1 \
--build-number=44
Expo・EASで変更する
Expoではapp configやEASのバージョン管理設定を確認します。
{
"expo": {
"version": "1.4.1",
"android": {
"versionCode": 44
}
}
}
クラウド側で自動増加を使用している場合、ローカル設定とどちらを正とするか統一します。
採番ルールの例
単純な連番
1, 2, 3, 4...
小規模な個人開発では最も分かりやすい方法です。
日付を使う
2026080301
同日に複数ビルドする場合の連番が必要です。Androidの上限にも注意します。
CIのビルド番号
1000 + CI_RUN_NUMBER
複数ブランチで同時にビルドする場合は、重複しない仕組みを設計します。
複数トラックのおすすめ運用
versionCodeをトラックごとに固定範囲へ分ける方法もありますが、昇格や更新が複雑になります。
基本は、すべてのトラックで一つの増加列を使う方が分かりやすくなります。
42 内部テスト
43 クローズドテスト
44 修正版クローズドテスト
45 製品版候補
同じAABを別トラックへ昇格できる場合は、新しくビルドせず、Play Consoleのトラック昇格機能を検討します。
versionCodeを下げられる?
すでに高いversionCodeを端末が受け取っている場合、低い版への通常更新はできません。
テスト用に大きすぎる値を使うと、後の本番リリースでそれより大きい値が必要になります。
アップロード前チェック
# Gradle設定を確認
./gradlew :app:properties
または生成されたAABの情報をAndroid Studioやbundletool、Play ConsoleのApp Bundle Explorerで確認します。
チェック項目:
- versionCode
- versionName
- applicationId
- 署名
- build variant
- 生成日時
まとめ
versionCodeエラーを防ぐ基本は次のとおりです。
- アップロードごとに未使用の大きな整数を使う
- versionNameと混同しない
- 全テストトラックで重複を避ける
- ビルド後の古いAABを選ばない
- CIとローカルの採番ルールを統一する
- アップロード前にAABの情報を確認する
次に署名エラーが出る場合はPlay App Signingとアップロード鍵を確認してください。
一次情報
公式参考資料
Google PlayやFirebaseの画面・要件は変更される場合があります。公開作業の前に、リンク先の最新情報も確認してください。