Open7
UaaLのメモ(Android用)

uaal-exampleの訳
必要な環境
- Android Studio: バージョン「Iguana (2023.2.1)」以降が必要
- Unity: バージョン「6000.0.0b16」以降が必須
また、特定のUnityバージョンに合わせたブランチも存在
- Unity 2019LTS~2021LTSの場合は、19LTS-21LTSブランチ
- Unity 2022LTSの場合は、22LTSブランチを使用するように指示
手順
ソースの取得
- GitHubのリポジトリ「uaal-example」をクローンまたはダウンロード
- このリポジトリには以下のような構成
- UnityProject
- Unityで作成されたシンプルなデモプロジェクト
- これをAndroid向けにエクスポート
- Assets/Plugins/Android/MainApp.androidlib
- Androidライブラリプロジェクトとしての構造を持ち、シンプルなUIが実装されている
- ここでは、MainUnityActivity と MainUnityGameActivity の2つのエントリーポイント(Activity)が含まれる
- UnityProject
Gradleプロジェクトの生成(Androidプラットフォーム向け)
- UnityプロジェクトをUnity Editorで開く
- UnityEditor内でプロジェクトを開き、次の作業を行う
- Build Profilesウィンドウの操作
- メニューから「File / Build Profiles」を選択し、Androidプラットフォームに切り替え
- Player Settingsの設定
- 「Player Settings」ウィンドウを開き、左側の「Player」タブへ移動
- 「Other Settings」→「Configuration」セクションで、Activity と GameActivity の両方を「Application Entry Point」として選択
- これにより、Androidアプリ起動時にどちらのエントリーポイントを利用するかを指定
- プロジェクトのエクスポート
- 再度「Build Profiles」ウィンドウに戻り、「Export Project」オプションを選択
- エクスポート先のフォルダーを指定
- ※エクスポート時に「Multiple application entries」がポップアップ表示された場合は、「Yes」をクリック
プロジェクトの構築と動作確認
エクスポートが完了すると、プロジェクトはGradleプロジェクトとして準備され、Android Studioでビルド、実行、デバッグが可能な状態になります。実際にアプリを実行すると、次のような挙動が確認可能
- NativeAndroidApp が起動し、メインアクティビティが表示
- メインアクティビティから Unity の機能が動作「Unity Activity」または「GameActivity」が別プロセスで起動(android:process=":Unity" が設定)
画面上には、Unity側で実装されたボタンなどが表示され、Unityの機能が正常に呼び出されることが確認可能
注意点と追加情報
エントリーポイントの選択について
- Player Settings で Activity と GameActivity の両方を選択した場合、両方のエントリーポイントの実装が有効
- 片方のみを選択した場合は、不要なもう片方の .java ファイル(MainUnityActivity.java または MainUnityGameActivity.java)を削除する必要がある。これにより、冗長なエントリーポイントが存在しない状態になる
Android 7系デバイスにおける問題と対策
- 一部の Android 7.* デバイスでは、アクティビティの frontOfTask 状態が誤って設定される場合があり、その結果、Unityアクティビティを終了した際に、全体のタスクがバックグラウンドに移動してしまう現象が確認されている
- この問題に対するワークアラウンドとして、MainUnityActivity.java や UnityPlayerGameActivity.java(またはその両方)に以下のコードを追加することが推奨されている
@Override
public void onUnityPlayerQuitted() {
SharedClass.showMainActivity("");
finish();
}
このコードは、Unity側の終了時にメインアクティビティを明示的に呼び出すことで、正しい挙動(メイン画面に戻る)を実現

手順まとめ
Unity プロジェクトの設定
Unity Editor の起動
対象の Unity プロジェクトを Unity Editor で開く
ビルド設定の調整
- Build Profiles の選択
- メニューから「File / Build Profiles」を選び、Android プラットフォームに切り替える
- Player Settings の設定
- 「Player Settings」ウィンドウを開き、Other Settings → Configuration セクションで、必要なエントリーポイントを選択する
- 一方のみ選択する場合は、不要なエントリーポイントのコードは削除する
エクスポート
- Build Profiles から「Export Project」を選択し、プロジェクトを Android 用の Gradle プロジェクトとしてエクスポートする
Android プロジェクトの構築
Android Studio でプロジェクトを開く
- エクスポートした Gradle プロジェクトを Android Studio にインポートする
マニフェストやビルド設定の確認
- AndroidManifest.xml で、Unity が別プロセス(例: android:process=":Unity")として動作するよう設定されているか確認する
- エントリーポイントとなる Activity のコードが正しく含まれているか、また不要なコードが削除されているかチェックする
ビルド・デバッグ・テスト
ビルドとデバッグ
- Android Studio 上でプロジェクトをビルドし、エミュレーターや実機で動作確認を行う
アプリの挙動確認
- メインアクティビティから Unity の機能が正しく呼び出されること
- Unity の Activityが別プロセスとして起動し、UI やボタンなどが期待通り動作すること

Android Studio Flamingo (2022.2.1) & Unity 22LTS
昔の内容っぽい 内容的に22LTSとか?
Iguana (2023.2.1) & Unity 6との差分
環境の更新
- Unity や Android Studio の新バージョンに対応するため、エクスポート手法や設定項目が変更
- ユーザーが扱いやすいように?プロジェクト構成が改善
統合作業の簡略化
- 旧バージョンでは手動での設定変更やモジュール追加が必要
- 最新の方法では統合対象のモジュールがプロジェクト内にまとまって提供され、手順が簡素化されている

Android Library Projectとは
- 単体で実行可能なアプリケーションではなく、他のAndroidアプリに組み込むためのモジュールとして開発されるプロジェクト
- 具体的には、コンパイル後にAAR(Android Archive)形式のライブラリにまとめられ、リソース、コード、マニフェスト情報などを含む
- これにより、共通の機能やUIコンポーネントを複数のアプリケーションで再利用可能

エクスポート方法とプロジェクト構造との関係
エクスポート方法
旧方式(22LTSブランチ)
- Build SettingsからAndroidプラットフォームを選択し、プロジェクトをエクスポートすると、Unity側で生成されたGradleプロジェクト内にunityLibraryモジュールが含まれる
- このモジュールは、Android Library Projectとして動作し、既存のAndroid Studioプロジェクトに手動で統合する必要
新方式(masterブランチ)
- Build Profilesを利用してエクスポートする方法が採用され、あらかじめ統合用のAndroidライブラリ(MainApp.androidlib)が含まれる形になった
- 統合の手順が簡略化され、プロジェクト全体の管理が容易になった
プロジェクト構造の違いとの関連
モジュール分割
- Android Library Projectとしてエクスポートすることで、Unityのコードやリソースが独立したモジュールとして管理
- ネイティブのAndroidアプリケーション部分とUnity側の処理部分が明確に分離され、メンテナンスやアップデートが容易になる
統合作業の違い
- 旧方式
- エクスポート後にGradle設定ファイル(settings.gradleやbuild.gradle、gradle.properties)の編集が必要で、手動でのモジュール統合が必要
- 新方式
- 統合対象のAndroidライブラリプロジェクトが既に用意されており、手順が自動化または簡易化されているため、統合作業に伴うエラーや手間が軽減された

UaaLの活用事例