Android デバイスごとにバンドルファイルを用意する

Google Play で公開中のPicture Puzzle Moveで、スマートフォンではアプリを縦長画面で起動したくて、デバイスごとにバンドルファイル(aabファイル)を分けた、というお話です。

要約(TL;DR)です。

  • Google Play で公開するアプリで、デバイス別にバンドルファイルを分けたい。
    • Android TV 画面は横長に、スマートフォン画面は縦長にしたい。
    • 単一 AndroidManifest.xml で複数デバイスに対応することができなかった。
  • スマートフォン用と Android TV用で git のブランチを分け、それぞれでバンドルファイルを用意する。
  • バンドルファイルに付与するバージョンコードで、インストールの優先順位を指定した。

このアプリはスマートフォンと Android TV のどちらでも起動しますが、どちらも 画面の向き(orientation)は横長(landscape)になっていました。Android TV はそれでいいのですが、スマートフォンは 縦長(portrait)にしたいと思っていました。

このAndroid TV では横長、スマートフォンでは縦長にする、ということが、単一の aab ファイルだけでは実現できませんでした。

  • AndroidManifest.xml で スマートフォン用、Android TV 用の activity をそれぞれに用意する。
    • Android TV の Google Play でアプリが認識されない。

そこで、手間はかかりますが、aabファイルをスマートフォン用とAndroid TV 用の2種類用意することにしました。手順としては次の通りです。

  • git にてスマートフォン用のブランチ mobile を用意する。(main ブランチはそのままAndroid TV用のブランチにする。)
  • 各ブランチを別々のディレクトリに git clone する。
  • 各ブランチの Android カスタムビルドの AndroidManifest.xml を編集する。
  • 各ブランチの Godot のプロジェクト設定で、画面の向きを設定する。
    • Android TV 用は landscape(デフォルト値)
    • スマートフォン用は portrait
  • 各ブランチでカスタムビルドを用いた Android パッケージのエクスポートを行う。
    • このとき、バージョンコードを次のように設定する。
      • スマートフォン用は 1000000 から開始する (例: 1000025)
      • Android TV 用は 0 から開始する (例: 25)
    • Google Play でアプリをインストールする際は、バージョンコードの大きいバンドルファイルからインストール可能かチェックしていく。Android TV 用はスマートフォンでも起動可能なので、スマートフォン用を優先させる。

参考

  • アプリのバージョニング https://developer.android.com/studio/publish/versioning?hl=ja
  • 複数 APK サポート https://developer.android.com/google/play/publishing/multiple-apks?hl=ja#VersionCodes