我正在构建一个使用一些原生android库的Unity Android应用程序。我已经完成了所有这些设置和工作,直到我出于性能原因尝试将对本机代码的调用移到另一个线程上。
我首先遇到的问题是JNI不喜欢线程,所以添加一个
AndroidJNI.AttachCurrentThread();
调用修复了致命错误。但是现在有一个新的非致命异常被反复抛出并导致我的本机代码无效。
堆栈跟踪在下面,但似乎是以JVM找不到com.unity3d.player.ReflectionHelper
类的缺乏为中心。
有没有人有任何想法可能会出错?
02-02 15:25:05.194 10248-10416/com.limoncello.androidtest E/mono: Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for UnityEngine.AndroidReflection ---> UnityEngine.AndroidJavaException: java.lang.ClassNotFoundException: Didn't find class "com.unity3d.player.ReflectionHelper" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib, /vendor/lib, /system/lib, /vendor/lib]]
java.lang.ClassNotFoundException: Didn't find class "com.unity3d.player.ReflectionHelper" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib, /vendor/lib, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at UnityEngine.AndroidJNISafe.CheckException () [0x0008c] in /Users/builduser/buildslave/unity/build/Runtime/Export/AndroidJNISafe.cs:24
at UnityEngine.AndroidJNISafe.FindClass (System.String name) [0x0000f] in /Users/builduser/buildsla
答案 0 :(得分:1)
这有点晚了,但我遇到了同样的问题。
我正在从Unity3D的非用户界面线程从android上的Unity3D调用静态方法Java。对我来说解决的是
jc = new AndroidJavaClass("domain.yourthing.yourclassname");
在unity3d主线程中。在其他c#线程中调用那些(执行附加操作之后)似乎工作正常。