注目キーワード

Android Studio3系でUnity用のAndroidプラグインを作成する

Android Studio3系にてUnityから呼び出すことができるAndroidライブラリー(プラグイン)の作成方法。UnityからAndroidのライブラリーの呼び出し方法を解説します

 

UnityでAndroidアプリを作るとき、Android端末のOSバーションを取得するなど、Android特有の処理をさせたい時があります。

 

しかし、Android特有の処理をさせたいときUnity単体で実装が不可能です。

 

実現するためには、Android Studioを使うなどしてAndroid用のプラグインを作る必要があります。

 

この記事では、

・Android Studio3系にてUnityから呼び出すことができるAndroidライブラリー(プラグイン)の作成方法

・作成したプラグインをUnityから呼び出す方法

を解説します。

 

 

Android StudioでUnity用Androidライブラリーを作成する

 

新規にAndroidプロジェクトを作成する

 

新規にプロジェクトを作成します。Android Studioは直接ライブラリーを作ることができないので、仮のActivityを作成します。Activityは、Unityで使うライブラリーに含まれないので適当に作成しても問題ありません。

 

作成手順を記載します。

 

・「Create Android Project」で新規にプロジェクトを作成する

Create Android Project

 

・Target Android Devices設定で任意に設定する。

Target Android Devices

・Basic Activityを選択する

Basic Activityを選択する

 

上記の操作で、プロジェクトが作成されます。

次にライブラリーを作成します。

 

 

新規にライブラリーを作成する

 

ここからが本番!

ライブラリーを作成します。

 

Android Libraryを選択する

Android Library

・Android Libraryダイアログでminimum SDKを選択する

Android Libraryダイアログ

 

以上の操作でAndroid ライブラリーのプロジェクトが作成されました。

 

■Unity内にある「classes.jar」ファイルを設定する

・Unity内にある「classes.jar」を取り出します。

「classes.jar」は以下の場所(Unty5.6.6で確認)にあります。

UnityApp/PlaybackEngines/AndroidPlayer/Variations/mono/Development/Classes

 

■libsフォルダにUnityライブラリー「classes.jar」の設置

 

libsフォルダにUnityライブラリー「classes.jar」を配置します。

配置する場所は以下の通りです。

Root(作成しようとしているUnity AndroidライブラリーのRoot) -> libs

 

 

■「build.gradle」の編集

 

Unityライブラリーファイル「classes.jar」は、(自作しようとしている)Unity Androidライブラリーを書き出す際、ビルド後に出力されるaarファイル内に含めないようにします。

 

そのため以下の2つを「build.gradle」に記載する必要があります。

 

//出力するaarファイルにclasses.jarを含めない
android.libraryVariants.all { variant ->
    variant.outputs.each { output ->
        output.packageLibrary.exclude('libs/classes.jar')
    }
}

 

//classes.jarファイルは、コンパイルのときのみ使用する
//Android Studio 3系では、「implementation fileTree」と記述すると
//classes.jarも含まれてしまうため「compileOnly」と記載して
//jarファイルはコンパイルのみ使用するようにします。

dependencies {
	//implementation fileTree(include: ['*.jar'], dir: 'libs') はNG
	compileOnly fileTree(include: ['*.jar'], dir: 'libs')	
}

Javaにて実装します

 

JavaにてAndroid用のソースコードを記載します。

 

実装例を記載します。

パッケージ名は以下の通りとする。

 

package com.unityplugin.jp.unitylib;

クラス名 NativeAndroidSample

 

package com.unityplugin.jp.unitylib;

public class NativeAndroidSample {
    /**
     * OSのバージョン情報を取得する
     * @return OSのバージョン
     */
    public static String GetOsInfo()
    {
        String str = "";
        str = "Android:"+Build.VERSION.RELEASE;
        return str;
    }
}

 

メニューから

Build > Make Moduleを選択してライブラリーのビルドをします。

※ProjectはAndroid ライブラリー用のプロジェクトを選択した状態にしておくこと。

 

 

成功すると

build ->outputs->aarフォルダに「aarフォーマットのファイル」が出力されます。

 

Unity側の対応

 

Asset -> Plugins ->Android

にAndroid Studioで作成したaarファイルを設置します。

 

UnityからAndroid側プラグインの関数(メソッド)を呼び出す。

下に、C#のサンプルコードを記載します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AndroidNativeSample : MonoBehaviour {

	// Use this for initialization
	void Start () {
		NativeCall();
	}
	
	void NativeCall(){
		
		//Java側で設定したパッケージ名とクラス名を記載する
		AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unityplugin.jp.unitylib.NativeAndroidSample");

		//メソッド名を設定する。
		//戻り値はstring型のためカッコの部分にはstringを設定しています
		//OS情報
		string a = unityPlayer.CallStatic("GetOsInfo"); 

		Debug.Log("unity os:" + a);

		
	}
}

 

この結果、Unity側からAndoridのOSのバージョン情報を取得できるようになります。

 

最後にUnity側でAndroid用のビルドをします。

 

 

その結果、Android側のメソッドをUnity側から呼び出しができます。

 

まとめ

いかがですか?

Androidのプラグインを作るには、Javaなどのスキルが必要になりますが、プラグインを作れると開発の幅が広がります。