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 を編集する。
- Android TV 用では uses-feature 要素 と、LEANBACK_LANCHERを値にもつcategory要素を定義する。
- スマートフォン用では、Android TV向けの設定を削除する。
- 各ブランチの 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