Search Unity

Unity 2018.3 ベータ版での Android App Bundle(AAB)サポート

, 10月 3, 2018

アプリやゲームのサイズが大きいと、せっかく Google Play ストアで見つけてもらえたのに、インストールしてもらえないという事態が起きることがあります。これは、ユーザーがデバイスの記憶領域や通信容量を節約したいと思っていたり、低速の通信しかない環境で長い時間ダウンロードを待ちたくないと思っていることが背景にあります。そこで、新しい Android アプリ配信形式である Android App Bundle を使えば、ユーザーのデバイスに配信するときのサイズを小さくすることができます。

Unity 2018.3 ベータ版で、いくつかのハードウェアの設定において、App Bundle のサポートが使えるようになります。この記事では、従来の APK に代わって、Android App Bundle を作成する方法について解説します。サイズが大きいアプリは、インストールする前に記憶領域を空けなければならないので、インストールを敬遠されてしまう傾向があります。この事実は、あらゆる市場のユーザーに影響する事実であり、特にデバイスの記憶領域やデータ通信容量にかかるコストが高い市場において、その影響は顕著になります。

Android App Bundle にはコンパイル済みのゲームコードがすべて含まれますが、APK の生成と Google Play 向けの署名は保留された状態になっています。Google Play の新しいアプリ配信モデル(Dynamic Delivery)では、App Bundle を使って、ユーザーのデバイス設定ごとに最適化された APK が生成、配信されます。ユーザーはユーザーの持っているデバイスでアプリを実行するために必要なコードとリソースだけをダウンロードすることになります。開発者のほうで多数のデバイスをサポートするために、多種類の APK をビルドしてそれぞれに署名し、管理する必要はなくなり、かつユーザーはより小さく、より最適化されたアプリをダウンロードできるようになるのです。

Android App Bundle は、言語リソース、スクリーン深度リソース、ABI(アプリケーションバイナリインターフェース、CPU と命令セットの組み合わせごとに 1 つ存在)、および新しい Dynamic Features の機能の組み合わせに応じた設定の APK を生成するためのさまざまなオプションを備えています。詳しくはGoogle のドキュメンテーションをご覧ください。

Unity 2018.3 では、CPU アーキテクチャおよび ABI(ARMv7、ARM64、および x86)向けの App Bundle サポートが追加され、これ以外にも開発者の皆様にとって有用と思われるターゲットの設定について検討中です。フィードバックをぜひ Android Developer Forum までお寄せください。

Android App Bundle をビルドする

まず、Unity 2018.3 ベータ版でプロジェクトを開きます。APK ではなく Android App Bundle(AAB)をビルドするには、ビルド設定ウィンドウ(メニューは File(ファイル) > Build Settings(ビルド設定))を開き、Build App Bundle のチェックボックスをオンにします(ビルドシステムはデフォルトの Gradle を選択してください)。

ここまで準備した上で Build(ビルド)をクリックすると、Unity は Google Play に直接公開できる AAB ファイルを生成します。

Build and Run(ビルドして実行)を選択した場合は、Unity は接続しているデバイスに対応するテンポラリの APK ファイルを生成し、デバイスにインストールしてアプリケーションを実行します。

Build を実行した後、アプリを手動でデバイスにインストールしたい場合は、Google の提供している bundletool utility を使うことができます(このツールは、Unity をインストールした場所の下の Editor/Data/PlaybackEngines/AndroidPlayer/Tools フォルダーにあります)。bundletool のフラグおよびオプションの詳細はこちらからご参照ください(英語)。

ターゲットアーキテクチャーによって分割された APKEdit(編集) > Settings(設定) > Player(プレイヤー))オプションは、生成された App Bundle がすべてのサポートするターゲット用のライブラリを含める必要があるため、無効となることにご注意ください。

ヒントとコツ

デバイスへのデプロイ前に、App Bundle から APK を生成する分の時間がかかるため、開発中はApp Bundle の生成を無効にして、通常の APK を生成するようにし、「Build and Run」オプションを使ったイテレーションのための時間を節約することをおすすめします。

Unity からエクスポートした Gradle プロジェクトを使って、Android Studio で App Bundle を作成することもできます。この方法で App Bundle を生成するには、Android Studio 3.2 以降で、Build > Build Bundle(s) / APK(s) > Build Bundle(s) の順にメニューを選択してください。

Android App Bundle をサポートしないストアへのアプリ公開を予定している場合は、エンドユーザーのデバイスの CPU アーキテクチャーごとに APK を個別に生成するのではなく、プレイヤー設定の Split APKs by target architecture(ターゲットアーキテクチャーによって分割された APK)オプションを使うか、bundletool を使ってどんな環境でも実行可能な「ユニバーサル APK」をビルドすることをおすすめします(現時点では、AAB は Google Play でのみサポートされます)。詳細は Android App Bundle のドキュメントでご確認ください。

 

コメント受付を終了しました。

  1. Mahesh Khambadkone

    11月 15, 2018 6:12 pm

    We frequently end up having to create AssetBundles, and their management (downloads, updates) is often cumbersome. Would be good to have tighter integration between Unity Asset Bundles and Android App Bundles.
    These could be entire folders of assets, a “Resource”/”StreamingAssets” folder or sets of Scenes, delivered as App Bundles.

  2. Steve Rogger

    10月 30, 2018 6:56 pm

    I have read the post and got to know that the Android app bundle is the complete package which is needed to build an android application. The android bundle is directly connected to the google server and you will directly get an update from Google. Contact error code 0xc00000f for more information.

  3. Leona Swift

    10月 4, 2018 9:10 pm

    In the real world, there is currently only one Android architecture – arm32 (unless you already have a significant number of arm64 customers with reasons for a separate binary, or live in a parallel universe where MIPS is still a thing.) So I’m not sure how much this current implementation gains us, since Unity doesn’t really use the Android resource infrastructure directly (and shouldn’t).

    An implementation where you can build for low end devices assuming QualitySettings.masterTexturelimit > 0 would mean we could build bundles for low end devices without including all the top-level mipmaps in the build would be interesting. But without something like that, it only really becomes interesting from a code size perspective in fall 2019 when Google mandates arm64 code.

    1. JC Cimetiere

      10月 12, 2018 4:53 pm

      Hi Leona,
      Moving to 64-bit is really about future proofing your games.
      More and more devices are 64-bit capable, new flagship phones are 64-bit capable. Our stats shows about 15% of game installs use 64-bit architecture on Android already. So we think “now” is really a good time to start your transition to 64-bit, before it’s motivated by store submission rules ;-)

      And we agree that quality settings, being able to target low-end / high-end with different sets of assets is a good idea. We are exploring this option.
      Thanks for your contribution ;-)
      JC

  4. This is great. It is clear app sizes are important for mobile, and Unity has issues in this area, but I’m sure the company are working on it, but it is not clear what is happening. I would love to see a blog post dedicated to improvements on the way, and what the latest advice is in this area for Android and iOS (e.g. the Unity manual advice on build sizes talks as if there is only .Net 2.0, what impact does the newer versions have?).

    1. JC Cimetiere

      10月 12, 2018 4:58 pm

      Hi Moonjump,
      We are working on optimizing build sizes, Code Stripping option helps reduce the size for example.
      I recognize that we need to provide more guidance and explanation on how to optimize build sizes, but rest assured we are not ignoring it.
      Thanks for your comment
      JC

  5. Awesome! It will be nice if we can put it HD textures and normal textures

    1. JC Cimetiere

      10月 12, 2018 4:59 pm

      Hi Suduck,
      Thanks for the suggestion. We are exploring these options.
      JC