15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UnityをAndroidアプリの中に埋め込む

Last updated at Posted at 2018-11-22

UnityからGradleプロジェクトをエクスポートする。

  • File → Build Settings
  • PlatformでAndroidを選択してSwitch Platform
  • Export Projectにチェックを入れる
    プロジェクトをAndroidStudioで開く。Don't remind me again for this project.

ここで一旦、このままでapkをビルドできることを確認しておくとよいでしょう。apkをビルドするにはこのプロジェクトフォルダをAndroid Studioで開いて実行ボタンを押すだけです。apkがビルドされてUSB接続されたAndroid端末で実行されればOK。
キャプチャ.PNG

コマンドでビルドするには、エクスポートされたプロジェクトでgradle assembleReleaseを実行すれば良いです。

GradleプロジェクトをAndroidライブラリ用に書き換える

UnityからエクスポートされたプロジェクトはAndroidアプリケーション(apk)をビルドするための設定になっているので、これをAndroidライブラリ(aar)をビルドするための設定に書き換えます。

まず、build.gradleを開いて、apply plugin: 'com.android.application'apply plugin: 'com.android.library'に書き換え、applicationIdの指定を削除します。

build.gradle
// apply plugin: 'com.android.application'
apply plugin: 'com.android.library'

...

android {
  ...
  defaultConfig {
    ...
    // applicationId 'com.example.myapp'
  }
}

それから、src/main/AndroidManifest.xmlを開き、<activity>の中に指定されている<intent-filter>のブロックをまるごと削除します(これをしないとUnityのActivityを直接起動するアイコンがランチャーに表示されてしまう)。

そして、このディレクトリでgradle assembleReleaseを実行すると、build/outputs/aarの中にaarファイルができています。

※Android Studioでビルドする場合は、右上の方にあるGradleタブからTasks/build/assembleReleaseを探してダブルクリックします。
キャプチャ.PNG

※ビルド時になんかエラーが出る場合は、gradle cleanしてからgradle assembleReleaseしてみると、改善する場合があります。gradle clean assembleReleaseと繋げて書いても良いです。

アプリケーションプロジェクトに取り込む

aarができたので、次はこれを利用する側のアプリケーションプロジェクトを作ります。

Android Studioで普通にAndroidプロジェクトを作ったら、File→New→New Module...→Import .JAR/.AAR Packageと選択します。

  • File name: 欄に先程作ったaarファイルを選択
  • Subproject name: 必要に応じて書き換える

Gradleビルドが始まるので少し待ちます…

app/build.gradleを開き、dependenciesブロックの中にimplementation project(':xxx')を追加します。xxx部分は先程指定したSubproject nameが入ります。

これでビルドすると、AndroidManifest.xmlのマージに失敗するエラーが出ると思うのでエラーを解消します。

app/src/main/AndroidManifest.xmlを開き、

  • <manifest>xmlns:tools="http://schemas.android.com/tools"を追加します
  • <application>tools:replace="theme, icon"を追加します

こんな感じになります。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="com.example.myapp">

    <application
            tools:replace="theme, icon"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

    </application>
</manifest>

ここまでできたらapkがビルドできるようになっているはずです。

アプリからUnityを呼び出す

AndroidアプリからUnityを起動したいところで、UnityPlayerActivityを呼び出すだけです。

Intent intent = new Intent(context, UnityPlayerActivity.class);
startActivity(intent);

Unityからアプリに戻ってくる

ここまでの方法でUnityを起動することはできますが、Unityから戻ってくることができません。理由はUnityのActivityが終了時に自身のプロセスを終了するようになっているため、呼び出し元のActivityのプロセスも一緒に巻き添えになって死んでしまうからです。

これを回避するためには、UnityのActivityと呼び出し元のアプリのActivityを別のプロセスで実行する必要があります。Activityを実行するプロセスを分けるためには、AndroidManifest.xmlに以下のようにandroid:process=":プロセス名"指定をします。プロセス名は何でも良いです。

<activity
  android:name=".MainActivity"
  android:process=":main">

詳細はAndroidのドキュメントを参照

15
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?