AndroidJavaException:java.lang.ClassNotFoundException:找不到类“ com.unity3d.player.ReflectionHelper”

时间:2018-08-21 07:32:36

标签: c# unity3d java-native-interface

我正在尝试在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]]

1 个答案:

答案 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函数(例如OnAudioFilterReadStart函数之外的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()
}