UnityでAndroidアプリを開発する際、Android固有の処理を実行したくなることがあります。このような時、Android Studioで作成したライブラリ(.aar)をUnityに組み込んで実行することが手段の一つとしてあります。今回は.aarとしてビルドしたライブラリをUnityに組み込んで関数コールする方法について説明します。
ライブラリの生成手順については、以下の記事で説明しています。
Unityプロジェクトはこちらで使用したものを使います。
UnityにAndroidライブラリを組み込み、実機上で動かす!
Assetsへライブラリを追加する
事前に作成したライブラリファイルをUnityのAssetsフォルダに格納します。左下のProjectというTabを選択してPlugins>Androidというフォルダを作成しておきます。

作成したフォルダにこちらで作成したAndroidライブラリを格納します。ファイルはドラッグ&ドロップで格納できます。コピペでは無理のようです。またライブラリを更新する際は一度deleteしてから更新するようにします。

これでライブラリの追加は完了となります。
C#コードにライブラリコールを実装
C#のScriptからライブラリをコールする処理を追加します。すでにButtonに追加されているButtonScrを開きます。Button Objectを選択して、InspectorのScriptをダブルクリックでEditorが開きます。

以下のようなコードを使用しました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ButtonScr : MonoBehaviour
{
    private AndroidJavaObject _javaClass = null;
    // Start is called before the first frame update
    void Start()
    {
        _javaClass = new AndroidJavaObject("blog.hirokuma.toastlibrary.ToastLib");
    }
    // Update is called once per frame
    void Update()
    {
        
    }
    public void OnClick()
    {
        if (_javaClass != null) {
            /* AOIメソッド名,引数1,引数2・・・ */
            _javaClass.Call("outMsg", "Test");
        }
    }
}
- Start()でライブラリを初期化
 - OnClick()でボタンが押されるたびにライブラリ関数outMsgを引数”Test”で関数コール
 
ライブラリの初期化はAndroidJavaObjectの引数にパッケージ名.class名を指定します。関数コールはAndroidJavaObjectインスタンスのCallメソッドで行います。呼び出したい関数を文字列で指定し、引数がある場合はそれに続いて引数を入力します。
アプリのビルド
アプリをビルドします。まずFile>Build Settings..を開いて、PlatformがAndroidとなっていること確認し、左下にあるPlayer Settings..を開きます。

メニューのOther SettingsのMinimum API Levelにライブラリの際に指定しているAPI Levelを設定します。ライブラリのAPIレベルは以下のようにAndroidのビルド環境にあるbuild.gradleから確認できます。

ここではminSdkVersionが23となっているので、Unity側にも23を設定します。

設定は完了したので、元のBuild Settings..に戻ってビルド、実行してきます。

これでビルドは完了です。実機での実行を見ていきます。
アプリの実行
ボタンを押すと以下のようにAndroidのToastが出力されれば成功です。

まとめ
今回はUnityアプリからAndroidのライブラリ経由でToastを出力するサンプルを解説しました。この記事をまとめるにあたり、ライブラリのビルドが成功しない場合や、ビルドは成功するが実行できないトラブルにも多々遭遇しました。以下にその一例と解決方法をまとめておきますので参考になれば幸いです。
- Androidのbuild.gradleが正しく記述されているか
 - Unity、Android双方のMinimum APIレベルがあっているか?
 
- 正しくライブラリが実装できているか?.jarファイルの置いてい有る位置は正しいか?
 - ライブラリおよび関数コールの引数文字列は正しいか?
 
  
  
  
  


コメント
大変参考になるサンプルありがとうございます。
実行してみたところ引数が一致せず、
_javaClass = new AndroidJavaObject(“blog.hirokuma.toastlibrary.ToastLib”);
にてオチました。