Как создать объект с частным создателем (например, EGLContext) под PIE? - PullRequest
5 голосов
/ 10 апреля 2019

Этот класс определен под 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как например: createEgl14( android.opengl.EGLContext sharedContext)

1 Ответ

2 голосов
/ 13 апреля 2019

Ты почти не можешь. Согласно ограничениям Android они ограничивают JNI и отображение только интерфейсами SDK.

Я думаю, что ваш последний вариант - запросить новую функцию , где они изменят видимость конструктора на public.

...