LoginSignup
12
5

More than 5 years have passed since last update.

Android用Plugin(java[aar])の作成

Last updated at Posted at 2017-05-30

環境

Unity5.6.1f1
AndroidStudio2.3.2

AndroidStudio用プロジェクトの作成

・Unityを起動し、プロジェクトを作成する(例:TestAndroidPlugin)
・Androidにスイッチし、バンドルIDを設定する(例:com.example.testandroidplugin)
・MinimumAPILevelを設定する(例:Android4.1 APILevel16)
・BuildSettingを開き、「Build System」をGradle(New)に変更する
・「ExportProject」、「DevelopmentBuild」にチェックし、「Export」を押す
・Unityプロジェクトと同じフォルダにExport用フォルダを作成し、フォルダに移動してから「フォルダの選択」を押す(例:TestAndroidPlugin\Android)
 ・AndroidStudio用プロジェクトが生成される

AndroidStudioで読み込む

・AndroidStudioを開く
・「Import Project(EclipseADT,Gradle,etc) 」を押し、AndroidStudio用プロジェクトを生成したフォルダを開き、「build.gradle」を選択し、「OK」を押す
・「Gradle settings for this project are not configured yet.」ダイアログが出るので「OK」を押す
・プロジェクトが読み込まれる
・この時点で以下のエラーが出ている
Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection
Possible causes for this unexpected error include:
・左上の縦に並んでいる「Project」をクリックし、プロジェクトのツリーが見えるようにする
・「GradleScript」からbuild.gradleを選択し、開く
・上部に記載されている以下の部分をcom.android.tools.build:gradle:2.3.2に変更する
 2.3.2はAndroidStudioのバージョン名 自分の環境で変更する(タイトルに表示されている)

    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
    }

・右上に出ている「TryAgain」を押す
 ・エラーが消える

※この項目の以下の作業はAndroidStudio上でアプリケーションのビルドを行わない場合(プラグインのビルドの事ではない)は要らない。つまり今回は要らない
・プロジェクトツリーから一番上のプロジェクト名(例:TestAndroidPlugin)を選択し、右クリックし、「OpenModuleSetting」を押す
・「Flavors」タブを選択し、MinSdkVersionをUnityに設定したものと同じに設定する(例:API16)
 ・選択にない場合はメニューの「Tool」>「Android」>「SdkManaager」からインストールする
・「OK」を押す

プラグインモジュールの追加

・メニューの「File」>「New」>「NewModule」を押す
 ・「AndroidLibrary」を選択し、「Next」を押す
 ・「Application/Library name」を設定する(例:UnityPlugin)
 ・「Package name」を右側の「edit」を押し、設定し、「done」を押す(例:com.example.unityplugin)
 ・「MinimumSDK」をUnityに設定したものと同じか、小さいものに設定する(例:API16)
 ・「Finish」を押す
  ・モジュールが生成され、プロジェクトツリーのルートの2番目にモジュールのツリーが追加される
  ・この時点でエラーが5つほど表示される
・プロジェクトツリーの「GradleScript」>「build.gradle(Module:プライグイン名)」(2番目)を選択し、開く
 ・「apply plugin: 'com.android.library'」の行の下に以下を追加する

repositories {
    maven { url 'http://repo1.maven.org/maven2' }
}

 ・右上に出ている「TryAgain」を押す
  ・エラーが消える
 ・「dependencies」{}内の最後に以下を追加する

compile files('../libs/unity-classes.jar')

 ・ファイルの最後に以下を追加する
  ・OUTPUT_NAMEは任意の名前に変更する

android.libraryVariants.all { variant ->
    variant.outputs.each { output ->
        output.packageLibrary.exclude('libs/unity-classes.jar')
    }
}

def OUTPUT_NAME='testplugin.aar'
task exportAar(type: Copy) {
    from('build/outputs/aar/')
    into('../../../Assets/Plugins/Android/')
    include('unityplugin-release.aar')
    rename('unityplugin-release.aar', OUTPUT_NAME)
}
exportAar.dependsOn(build)

 ・右上に出ている「SyncNow」を押す

プラグイン用javaクラスの追加

・プロジェクトツリーから「プラグイン名」>「Java」>「パッケージ名」を選択(例:unityplugin>Java>com.example.unityplugin)
 ・(AndroidTest)や(Test)と書かれていないもの(一番上)
・メニューの「File」>「New」>「JavaClass」を押す
・「Name」を設定(例:TestPlugin)
・「OK」を押す
・以下はトースト表示する簡単なサンプル

package com.example.unityplugin;

import android.app.Activity;
import android.widget.Toast;

import com.unity3d.player.UnityPlayer;

public class TestPlugin
{

    public static void showToast(final String message) {
        final Activity activity = UnityPlayer.currentActivity;
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

プラグインのビルド

・プロジェクトツリーから「プラグイン名」を選択(例:unityplugin)
・メニューの「Build」「Select Build Variant」を押す
 ・「debug」を「Release」に変更
・右上の縦に並んでいる「Gradle」をクリックし、開く
・「Plugin名」>「Other」>「exportAar」をダブルクリック
 ・ビルドが実行され、Unityプロジェクトの「Assets/Plugins/Android/」に生成される
 ・aarのサイズは16K程度

プラグインのテストプログラム

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class TestPlugin : MonoBehaviour
{
    [SerializeField] private Button _button = null;

    private void Start()
    {
        _button.onClick.AddListener( () => OnButtonClick( _button ) );
    }

    private void OnButtonClick( Button button )
    {
        using (AndroidJavaClass javaClass = new AndroidJavaClass( "com.example.unityplugin.TestPlugin" ) )
        {
            Debug.Log( "OnButtonClick" );
            javaClass.CallStatic( "showToast", "Test" );
        }
    }
}
12
5
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
12
5