【发布时间】:2017-06-10 00:44:49
【问题描述】:
我创建了一个 Android Unity 插件(.aar 文件),它为我的 Unity 游戏提供了一些自定义定位数据。在我的 Unity 脚本中,我使用了,
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 包不存在。所以我从
复制了 classes.jar 文件C:\程序文件 (x86)\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes \classes.jar
进入我的 android 插件项目的“libs”文件夹。我构建成功并将生成的 .aar 文件(mylibrary-release.aar)复制到我的 Unity 项目的 Assets\Plugins\Android 文件夹中。
当我构建 Unity 项目(使用“内部”构建系统)时,它给了我这个错误:
IOException:无法从中移动文件/目录 'Temp/StagingArea\android-libraries\mylibrary-release\classes.jar' 到 'Temp/StagingArea\android-libraries\mylibrary-release\libs\classes.jar'。 UnityEditor.Android.PostProcessor.Tasks.ProcessAAR.Execute ...
发生此错误是因为 classes.jar 依赖项与 classes.jar 名称冲突(由我的插件统一制作)。因此,我将依赖项名称更改为 unity_classes.jar,这解决了问题,但现在我在构建统一应用程序时遇到了一个新错误:
CommandInvokationFailure:无法将类转换为 dex 格式。 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[ 未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Lbitter/jnibridge/JNIBridge;未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Lbitter/jnibridge/JNIBridge$a;未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Lcom/unity3d/player/NativeLoader;未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Lcom/unity3d/player/ReflectionHelper;未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Lcom/unity3d/player/ReflectionHelper$1;未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Lcom/unity3d/player/ReflectionHelper$a;未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Lcom/unity3d/player/UnityPlayer;未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Lcom/unity3d/player/UnityPlayer$1;未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Lcom/unity3d/player/UnityPlayer$10; ...
【问题讨论】:
标签: unity3d jar android-unity-plugin