UnityでAndroidのNativeコードを実行したくなった場合、UnityからAndroidのライブラリをコールすることができます。今回はUnityに組み込むためのライブラリ(.aar)をAndroid Studioで生成する手順について説明します。Android Studioのセットアップ手順については前にまとめてありますので、まだの方はご参考にしていただければと思います。
今回はAndroid NativeコードでAndroidの機能であるToastを表示するサンプルについて解説していきます。なお、作業中、必要なツールのインストールが要求されることがあります。その時はコンソールに案内がでますので、適宜インストールしてください。
Unity向けAndroidライブラリ(.aar)を生成!
Androidプロジェクトの作成
ライブラリ用のプロジェクトを作成していきます。まず、Android Studioを起動し、新規プロジェクトを作成していきます。

プロジェクトのテンプレートを選択する画面になるので、No Activityを選択して次へ進みます。

すると、プロジェクトのConfig画面になるので、適当に入力します。ここでは以下の用に入力して、説明していきます。LangageはJavaを選択します。Minimum API LevelはデフォルトではLevel 23が選択されています。とりあえず、このままで構いません。入力を終えたらFinishで次に進みます。

プロジェクトが起動するので、ライブラリのモジュールを追加していきます。メニューからFile>New>New Moduleを選択します。

モジュールタイプにAndroid Libraryを選んで次に進みます。

ライブラリ名を入力します。ここでは、ToastLibraryとしておきます。LangageはJava、APIレベルも先ほどと同じで構いません。入力後、Finishを選択して完了します。

以下のような画面が表示されれば、無事プロジェクトの完成です。

ビルド準備
classes.jarのコピー
ビルドのためにいくつか準備が必要となります。まず左のウィンドウの表示をProjectに切り替えます。

ビューが変更されますので、ファイルを展開すると、以下の用になります。最初に作成したプロジェクトが親にいて、ライブラリのプロジェクトが子になっていることがわかります。

上の図の子プロジェクトのlibフォルダにUnityのclassを定義したファイルを追加します。以下のファイルをコピーして、libのところでペースとします。
Unity Install\Hub\Editor\2019.3.13f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar
貼り付けると以下のように表示されるのでOKでコピーします。

build.gradleの書き換え
build.gradleを書き換えます。以下のファイルを開き、後半のdependenciesの書き換えと追加で記述します。

apply plugin: 'com.android.library'
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
////////////////////ここから変更////////////////////
dependencies {
compileOnly fileTree(dir: 'libs', include: ['*.jar'])
compile 'androidx.appcompat:appcompat:1.1.0'
}
///////////ここまで変更////////////////////
ライブラリコードの追加
ライブラリのコードを追加します。今回はToastを出力するだけの単純なコードになります。まず、以下のフォルダを右クリックしてJava Classを追加します。

適当にファイル名を入力して進みます。ここではToastLibにしています。

以下のコードを入力します。outMsgでToastを出力するシンプルなコードです。
package blog.hirokuma.toastlibrary;
import android.content.Context;
import android.widget.Toast;
import com.unity3d.player.UnityPlayer;
/**
* ToastLib
*/
public class ToastLib {
Context _context = null;
public ToastLib(String gameObjName, String callBackName) {
/* Get current context */
_context = UnityPlayer.currentActivity.getApplicationContext();
}
public void outMsg(String msg) {
Toast.makeText(_context, msg, Toast.LENGTH_SHORT).show();
}
}
入力直後は色々とエラー表示されているかもしれませんが、メニューのFile>Sync Project with Gladle Filesを押すと解消されます。
ビルド
ライブラリをビルドしていきます。メニューのBuild>Rebuild Projectでビルドします。

右下のコンソールにBUILD SUCCESSFULが表示されればビルド完了です。

ライブラリファイル(.aar)は以下に生成されています。
ToastSampe\toastlibrary\build\outputs\aar\toastlibrary-debug.aar
まとめ
AndroidのライブラリをUnityからコールするためにはUnity向けにマニフェストにひと手間加える必要があります。これを怠ったせいで、Unity側のビルドが通らなかったり、アプリが起動しなかったりと散々な目にあいました。
次回はUnityに組み込んで動作させる方法について解説していきます。
コメント