📱

【Unity × Android】Jarプラグインの作成方法

2025/01/12に公開

UnityでAndroidのネイティブ機能を利用する際、Androidネイティブプラグインを作成する方法は主に以下の4種類があります。

  • Android Library プロジェクト(.aarプラグイン)
  • JARプラグイン
  • Android用ネイティブプラグイン(C/C++利用)
  • Java/Kotlinのソースプラグイン

それぞれの方法に特徴がありますが、Jarプラグインで、バッテリー残量を表示する簡単なサンプルを解説します。


手順概要

  1. 空のプロジェクトを作成する

    Android Studioで「No Activity」を選択して新しいプロジェクトを作成します。

  2. ライブラリモジュールを追加する

    • 「File → New → New Module」を選択します。
    • 「Java or Kotlin Library」を選び、モジュール名を入力します(例: mylibrary)。
  3. 不要なappモジュールを削除する

    • プロジェクト構成のシンプル化のために、デフォルトで生成される app モジュールを削除します。
  4. Kotlinコードを追加する

    以下のコードを作成して、JARプラグインの機能を実装します。

Kotlinコード

package com.example.mylibrary

import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.BatteryManager

class BatteryHelper {

    fun getBatteryLevel(context: Context): Int {
        val batteryIntent = context.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
        val level = batteryIntent?.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) ?: -1
        val scale = batteryIntent?.getIntExtra(BatteryManager.EXTRA_SCALE, -1) ?: -1
        return if (level != -1 && scale != -1) {
            (level * 100) / scale
        } else {
            -1
        }
    }
}
  1. Run → Edit Configurations → createJarFileを追加する

    • Android Studioの上部メニューから「Run → Edit Configurations」を開きます。
    • 新しいGradleタスクを追加し、名前を createJarFile に設定します。
  2. myLibraryをビルドする

    • 「Build → Make Project」を実行します。
    • この操作により、tmp フォルダに kotlin-classes ディレクトリが生成され、コンパイル済みのクラスファイルが保存されます。
  3. createJarFileタスクを実行する

    • Gradleタスク createJarFile を実行して、JARファイルを生成します。

Gradle設定

以下のように、mylibrary/build.gradle ファイルを設定します。

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.8.10'
}

group 'com.example'
version '1.0'

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.10"
}

tasks.register("createJarFile", Jar) {
    archiveBaseName.set("BatteryPlugin") // 出力ファイル名
    archiveVersion.set("1.0")
    from {
        fileTree(dir: layout.buildDirectory.dir("tmp/kotlin-classes/debug"), includes: ["**/*.class"])
    }
    manifest {
        attributes("Implementation-Title": "BatteryPlugin", "Implementation-Version": "1.0")
    }
}

JARファイルの生成

  1. Android Studio右側の「Gradleタブ」を開き、createJarFile タスクを選択します。

  2. 実行後、以下のパスに .jar ファイルが生成されます:

    build/libs/BatteryPlugin-1.0.jar
    

Unityへのインポートと呼び出し

  1. Unityにインポート

    • 生成された .jar ファイルを以下のフォルダにコピーします:

      Assets/Plugins/Android/
      
  2. C#コードを作成して呼び出し
    UnityからJARプラグインの機能を呼び出すために、C#でラッパークラスを作成します。

C#コード例

using UnityEngine;

public class JarPluginWrapper
{
    private const string PluginClassName = "com.example.mylibrary.BatteryHelper";

    public int GetBatteryLevel()
    {
        using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
            using (AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
            {
                using (AndroidJavaObject batteryHelper = new AndroidJavaObject(PluginClassName))
                {
                    return batteryHelper.Call<int>("getBatteryLevel", currentActivity);
                }
            }
        }
    }
}

実行と確認

  1. Unityでボタンを作成
    • 以下のスクリプトをボタンにアタッチして、バッテリーを表示します。
public class BatteryDisplay : MonoBehaviour
{
    public Text batteryText;

    void Update()
    {
        BatteryPluginWrapper batteryPlugin = new BatteryPluginWrapper();
        int batteryLevel = batteryPlugin.GetBatteryLevel();
        batteryText.text = "Battery Level: " + batteryLevel + "%";
    }
}
  1. ビルドしてAndroidデバイスで実行
    • バッテリーが表示されます。

Discussion