うにのトゲは刺さると痛い(´・ω・`)-40 : Javaプラグインの利用 (Java側)

きっと他のことをやって全てを忘れてしまう未来の俺氏へのUnityで自作Javaプラグインを利用する時のJava側手順。

何故か他の人のコードを実行しようとすると上手く行かなかったので、Unity側から文字列を渡して、それにJava側が文字列を付加して返すという簡単なものにした(´・ω・`)

面倒だったのでAndroid10決め打ちにした。
日本語化が上手く行ってないのか、メニュー等がなんか中途半端な状態になっているw

参考サイトというか目を通したり試したエントリはたくさんあるのだが、ブックマークに残っていたのは下の3つくらいだった(ノ∀`)マタヤラカシタ
Unityのプラグインを作るAndroid/iOS
[Android]Unityへ組み込むAndroidライブラリビルド手順解説
突然仕事でUnity向けのSDKやPluginを作ることになった人向け資料


他の人のエントリを色々読み、理解せずにやっていたから気が付かなかったが、手順8~11のUnityのClass.jarのコピーにまつわる作業は、Java側でUnityPlayerActivity等をいじったりしない場合は必要ない気がする…( ・´ω・`)トバシテイイ


  1. Android Studioを起動し、[Create New Project]をクリック。
  2. [No Activity]を選択し<次へ>をクリック。
    ※目的はモジュール作成の為、実際にはActivityは何を選んでも問題はない筈。

  3. 任意のプロジェクト名を指定し、[Minimum SDK]で"API 29 Android 10.0"を選択し、<終了>をクリック。
    ※うちの実機はAndroid10なのでこの選択をしているが、必ずしも10でなければならないわけではない。但し、他のバージョンでは動作確認をしていない。
  4. プロジェクトの作成が終わったら、[ファイル]-[New]-[New Module]の順に選択。
  5. [Android Library]を選択し、<次へ>をクリック。
  6. [Module Name]に任意の名前を指定、[Minimum SDK]で"API 29 Android 10.0"を選択し、<終了>をクリック。
    ※この例では[Module Name]を"UniAndLib"に指定。
  7. <プロジェクト>プルダウンをクリックし、"プロジェクト"をクリック。
  8. 使用する予定のバージョンのUnityのフォルダで"Class.jar"をコピー。
    この例ではUnity Hubを使用し、バージョン 2020.2.4f1 を使用。かつmonoではなくil2cppでビルド。
    "C:\Program Files\Unity\Hub\Editor\2020.2.4f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes"

    カスタムインストール時は当然のことながら、Class.jarの在り処は変わってくる。

  9. Android Studioのプロジェクトの新しく追加したモジュール配下のlibsフォルダに貼り付け。
  10. ダイアログが表示されたら、<リファクタリング>をクリック。
  11. 新しく追加したモジュール配下のbuild.gradleをダブルクリック。
  12. build.gradleが表示されたら、dependenciesの箇所に
    compileOnly fileTree(dir: 'libs', include: ['*.jar'])
    compile 'androidx.appcompat:appcompat:1.1.0'
    

    を追加。

    これを追加しておかないと、"Execution failed for task ':launcher:checkDebugDuplicateClasses'"とかいうエラーが出る筈。Android Studioで作ったライブラリ側とUnity側にUnityのClass.jarが存在しちゃって、その辺がいけないらしい…

    ※compileのところに打ち消し線が出るのでDeprecatedかなにかなのかもしれないがキニシナイ( ゚ 3 ゚)
    もしかしたらそもそも必要ないのかな? よくよく見ると下の行で"appcompat:1.2.0"をimplementationしてるから要らないか?

  13. 新しく追加したモジュール配下の[src]-[main]--[パッケージ名]のフォルダを右クリックし、コンテキストメニューが表示されたら、[新規]-[クラス]の順に選択。

  14. 「New Java Class」ダイアログが表示されたら、クラス名を指定し、"Class"をクリック。
    ※この例ではクラス名に"ReturnString"を指定。
  15. 作成したクラスがエディタに表示されたら、以下の内容を入力して保存。
    package com.example.uniandlib;
    
    public class ReturnString {
        public String returnResult(String fromUnity) {
            return "Via Java Lib:\n" + fromUnity;
        }
    }
    

    (パッケージ名やクラス名を任意の値を指定している場合は適宜書き換える。)

  16. メニューで[ビルド]-[Rebuild Project]の順に選択。
  17. ビルドが終了するまで待つ。
    (ウィンドウ下のステータスバーで以下のようなの表示がされている間はビルド実行中。)

以上がUnityで使用できるJavaプラグインの作成方法。

画像を入れたら長くなりすぎたので、Unity側は次のエントリで…(ヽ'ω`)


CommandInvokationFailure: Gradle build failed.

このエラーが出た場合は、一回エクスポートして、Android Studio側でインポートしてGradleをアップグレードしないといけないとかどうとか。

参考:
Gradle build failedが出る(Unity2019から)