Unity Androidプラグインの手間を軽減する管理方法

Mitsuhiro Koga
Kadinche Engineering
8 min readJun 30, 2020

はじめに

UnityでAndroidプラグインを作るとUnityプロジェクトとAndroidプロジェクトそれぞれで開発しますがAndroidプラグインが依存するライブラリを探したりaarやjarをUnityプロジェクトに取り込むのは煩雑です。その手間をGradleの機能を駆使して簡単に管理する方法を紹介します。

課題と方針

  • UnityプロジェクトとAndroidプロジェクトで整合が取れたaarおよびjarを管理するのが面倒
  • Androidプラグインが依存するライブラリを管理するのが面倒
  • Unityプロジェクト側からaar/jarのバージョンが分かりにくい

以上の課題を解決するためにAndroidプラグインをMavenローカルリポジトリとして出力してUnityプロジェクトではGradleのdependenciesでライブラリおよびバージョン指定します。

以降ではカラフルなトーストを表示する Toasty に依存したAndroidプラグインを参考にUnityとAndroidプロジェクトの設定を解説します。

サンプルプロジェクトは UnityAndroidToasty に置きましたので参考にしてください。特に重要な設定変更を行ったコミットメッセージは✨で始めています。

プロジェクトのフォルダ構成

Unityプロジェクト(UnityAndroidToasty)とAndroidプロジェクト(ToastyWrapper)の2つを並べて、Unityプロジェクトの中にMavenローカルリポジトリ(m2repository)を配置します。

- UnityAndroidToasty
- m2repository
- ToastyWrapper

Androidプロジェクトの設定

Androidプロジェクトのプラグイン用モジュールに配置したbuild.gradleに以下の内容を追加します。

group = 'com.kadinche.example' // モジュールのライブラリ名を設定
version = '0.0.1' // モジュールのバージョンを設定

afterEvaluate { // Mavenローカルリポジトリを出力するための設定
publishing {
publications {
// Set for all build variant
android.libraryVariants.all { variant ->
"maven${variant.name.capitalize()}Aar"(MavenPublication) {
from components.findByName("${variant.name}")
if ("${variant.name}" != "release") {
version = "${version}-${variant.name}"
}
}
}
}
repositories {
maven {
// Androidプロジェクトからm2repositoryへの相対パスを設定
url "${rootProject.projectDir}/../UnityAndroidToasty/m2repository"
}
}
}
}

次にGradleで以下のタスクを実行するとm2repositoryフォルダにMavenローカルリポジトリが出力されます。

cd ToastyWrapper
./gradlew clean build publish

また、Android Studioで以下のようにタスクを定義して実行しても同じようにMavenローカルリポジトリに出力できます。

Mavenローカルリポジトリにはリリース用とデバッグ用の2種類のライブラリが出力されて、依存ライブラリは*.pomファイルに定義されています。

Unityプロジェクトの設定

UnityでAndroidプラットフォームのProject Settingsを開き、Publishing SettingsのCustom Main Gradle Templateをチェックします。するとAssets/Plugins/Android/mainTemplate.gradleが生成されます。

生成したmainTemplate.gradleに以下の内容を追加します。dependenciesのdebugImplementationはUnityのBuild SettingsでDevelopment Buildをチェックした時に使われ、releaseImplementationはチェックを外した時に使われます。ここで指定する名前はAndroidプラグインのbuild.gradleに追加したgroupとversionの間にモジュール名を連結したものです。

// ここから追加 (Mavenローカルリポジトリと追加のMavenリポジトリ参照用)
([rootProject] + (rootProject.subprojects as List)).each { project ->
project.repositories {
def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\\\", "/")
maven {
url (unityProjectPath + "/m2repository")
}
maven {
url "<https://jitpack.io>"
}
}
}
// ここまで追加

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// ここから追加 (dependenciesにAndroidプロジェクトのライブラリを追加)
debugImplementation 'com.kadinche.example:toastywrapper:0.0.1-debug'
releaseImplementation 'com.kadinche.example:toastywrapper:0.0.1'
// ここまで追加
**DEPS**}

最後にUnityからAndroid向けにビルドすればGradleのdependenciesのおかげでAndroidプラグインが依存するライブラリを配置しなくても自動的にダウンロードされて取り込まれてapkが生成されます。

Androidプラグインの仕様が変わる時の対処

Androidプロジェクトのbuild.gradleのversionを増やして、UnityプロジェクトのmainTemplate.gradleのdependenciesも同様のバージョンに変更します。これでAndroidプラグインの開発を先行しておきUnity側が追い付いたらmainTemplate.gradleのバージョンを書き換えるだけで済みます。

m2repositoryフォルダの配置場所について

Unityから使うaarおよびjarはAssets/Plugins/Androidなどに配置しておくとビルド時に自動的に収集されるのですがこれまでに解説した方法だとリリース用とデバッグ用の2つのライブラリがあるのでクラスが重複してビルドエラーになってしまいます。またライブラリの取り込みはmainTemplate.gradleに設定しているのでm2repositoryフォルダはUnityプロジェクトの外側に配置しています。

おわりに

AndroidプラグインをUnityに取り込む手間を軽減する方法を解説しました。サンプルプロジェクトではToastyを組み込みましたが一度設定してしまえば他のライブラリもbuild.gradleのdependenciesに追加するだけで簡単に取り込む事ができます。

参考リンク

採用のお願い

私の所属するカディンチェ株式会社では、積極的にUnityエンジニア、画像処理系エンジニア等の採用を行っております。募集については、コーポレートサイトのリクルートからご確認いただけます。

また、VRメタバースアプリを始めとするVR/ARアプリの開発を行っていますので、お問い合わせはお気軽にどうぞ。

--

--