我正在尝试在OnAudioFilterRead
函数体中调用某些Java方法。
这是代码段。
void OnAudioFilterRead(float[] data, int channels)
{
AndroidJNI.AttachCurrentThread();
if (ok)
{
if (obj == null)
{
obj = new AndroidJavaObject("com.xx.aop.media.av.GPUFrameCapturer");
Debug.Log(obj.Call<bool>("isRecording"));
}
}
}
当我在Android平台上构建apk时。
总是遇到此错误。
06-13 15:20:51.981 20255-20388 / com.MeiTu.XRay E / Unity:
AndroidJavaException:java.lang.ClassNotFoundException:找不到 路径上的类“ com.unity3d.player.ReflectionHelper”: DexPathList [[目录“。”],nativeLibraryDirectories = [/ system / lib, / vendor / lib,/ system / lib,/ vendor / lib]]
java.lang.ClassNotFoundException:在路径:DexPathList [[directory]上找不到类“ com.unity3d.player.ReflectionHelper” “。”],nativeLibraryDirectories = [/ system / lib,/ vendor / lib,/ system / lib, / vendor / lib]]
答案 0 :(得分:1)
在另一个OnAudioFilterRead
中调用了Thread
函数,因此您似乎使用了AndroidJNI.AttachCurrentThread()
使得可以在另一个线程中使用AndroidJavaObject
。您还需要分离它。在AndroidJNI.DetachCurrentThread()
函数末尾调用OnAudioFilterRead
:
void OnAudioFilterRead(float[] data, int channels)
{
AndroidJNI.AttachCurrentThread();
if (ok)
{
if (obj == null)
{
obj = new AndroidJavaObject("com.xx.aop.media.av.GPUFrameCapturer");
Debug.Log(obj.Call<bool>("isRecording"));
}
}
AndroidJNI.DetachCurrentThread()
}
如果这不起作用,请在AndroidJavaObject
函数(例如OnAudioFilterRead
或Start
函数之外的Awake
函数中进行初始化,然后在OnAudioFilterRead
中使用它像上面的功能。
AndroidJavaObject obj;
void Start()
{
obj = new AndroidJavaObject("com.xx.aop.media.av.GPUFrameCapturer");
}
void OnAudioFilterRead(float[] data, int channels)
{
AndroidJNI.AttachCurrentThread();
if (ok)
{
if (obj == null)
{
Debug.Log(obj.Call<bool>("isRecording"));
}
}
AndroidJNI.DetachCurrentThread()
}