Unityゲームにカスタム位置決めデータを提供するAndroid Unityプラグイン(.aarファイル)を作成しました。私のユニティスクリプトでは、私は、いくつかの位置データを取得するためにUnity Error:クラスをdexフォーマットに変換できません
var x = customClass.CallStatic<float>("getHeadX");
を使用しています。このメソッドはフレームごとに呼び出され、更新されたデータ(ポーリングメソッド)を取得して非効率的になります。代わりに、私は、更新されたデータが準備が整ったら、私のJavaコード(プラグイン側)からUnityスクリプト内のC#メソッドを呼び出すことにしました。これを行うには、私のJavaプラグインでは、私は、
import com.unity3d.player.UnityPlayer;
...
UnityPlayer.UnitySendMessage("Manager", // gameObject name
"PluginCallback", // this is a callback in C#
"Hello from android plugin"); // msg which is not needed actually
を書いたしかし、コンパイラは、パッケージがcom.unity3d.player.UnityPlayerが存在しないことを訴えました。だから、私はアンドロイドのプラグインのプロジェクトの「LIBS」フォルダに
C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes \classes.jar
からclasses.jarファイルをコピーしました。私はそれを正常に構築し、生成された.aarファイル(mylibrary-release.aar)をUnityプロジェクトのAssets \ Plugins \ Androidフォルダにコピーしました。
私は(「内部」ビルドシステムを使用して)ユニティプロジェクトをビルドするとき、それは私に、このエラーを与える:
IOException: Failed to Move File/Directory from 'Temp/StagingArea\android-libraries\mylibrary-release\classes.jar' to 'Temp/StagingArea\android-libraries\mylibrary-release\libs\classes.jar'. UnityEditor.Android.PostProcessor.Tasks.ProcessAAR.Execute ...
classes.jar依存関係が作られた(classes.jarと名前が競合しているため、このエラーが発生しました私のプラグインからの単一性によって)。だから私は unity_classes.jar に依存名を変更し、これは問題を解決しますが、私のユニティ・アプリケーションを構築する際に、今、私は新しいエラーを取得しています:
CommandInvokationFailure: Unable to convert classes into dex format. C:/Program Files/Java/jdk1.8.0_102\bin\java.exe -Xmx2048M Dcom.android.sdkmanager.toolsdir="C:/Users/kamran.shamloo/AppData/Local/Android/Sdk\tools" -Dfile.encoding=UTF8 -jar "C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar"
stderr[ Uncaught translation error: java.lang.IllegalArgumentException: already added: Lbitter/jnibridge/JNIBridge; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lbitter/jnibridge/JNIBridge$a; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/NativeLoader; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/ReflectionHelper; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/ReflectionHelper$1; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/ReflectionHelper$a; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/UnityPlayer; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/UnityPlayer$1; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/UnityPlayer$10; ...