如何在PIE下使用私有创建者(例如EGLContext)创建对象?

时间:2019-04-10 18:22:17

标签: java android reflection android-9.0-pie

此类在Android下定义:

public abstract class EGLObjectHandle {
    private final long mHandle;

    protected EGLObjectHandle(long handle) {
        mHandle = handle;
    }


    public long getNativeHandle() {
        return mHandle;
    }

}

还有

public class EGLContext extends EGLObjectHandle {
    private EGLContext(long handle) {
        super(handle);
    }

} 

现在我的问题是我想用自己的手柄创建一个 EGLContext。该怎么做?在使用下面的功能之前,它在 PIE

上不再起作用
  private android.opengl.EGLContext createSharedEGLContextObj(long handle) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
    Class<?> classType =Class.forName("android.opengl.EGLContext"); 
    Class<?>[] types = new Class[] { long.class };
    Constructor constructor=classType.getDeclaredConstructor(types);
    constructor.setAccessible(true);     
    Object object=constructor.newInstance(handle);
    return (android.opengl.EGLContext) object;
  }

我需要一个EGLContext,因为我需要将其传递给需要EGLContext参数IE:createEgl14( android.opengl.EGLContext sharedContext)

的过程。

1 个答案:

答案 0 :(得分:2)

您几乎不能。根据{{​​3}},他们将JNI和反射限制为仅SDK接口。

我认为您的最终选择是Android Restrictions,在那里他们会将构造函数的可见性更改为公开。