Я хочу использовать ARCore внутри собственного приложения для Android на С++. Поэтому мне нужны env и контекст JNI. Оболочка JNI предоставляется внутри структуры android_app, но без контекста. Я нашел решение для получения контекста Android с помощью виртуальной машины. Но нет действительного указателя на контекст.
JNIEnv *env = 0; // env: 0x0000007ed9bdb0c8
jobject contextObj = 0; // env: 0x0000000000000011
_pAndroidApp->activity->vm->AttachCurrentThread(&env, NULL);
jclass activityClass = env->FindClass("android/app/NativeActivity"); // activityClass: 0x0000000000000001
// or use: jclass activityClass = env->GetObjectClass(_pAndroidApp->activity->clazz);
jmethodID contextMethod = env->GetMethodID(activityClass, "getApplicationContext", "()Landroid/content/Context;"); // contextMethod: 0x000000709660f0
contextObj = env->CallObjectMethod(_pAndroidApp->activity->clazz, contextMethod);
После этого я хочу создать сеанс ARCore:
ArSession_create(_pAndroidApp->activity->env, contextObj, &ar_session_);
Указатель на contextObj
кажется неправильным. На самом деле, activityClass
тоже кажется неверным. Результатом создания сеанса является SIGINT (сигнал SIGINT).
FindClass
на самом деле не нужно. Вместо этого вы можете использоватьenv->GetObjectClass(_pAndroidApp->activity->clazz)
. - person Michael   schedule 09.01.2018_pAndroidApp->activity->clazz
? Это должен быть экземпляр объекта, а не класс. - person Non-maskable Interrupt   schedule 09.01.2018Context
? Чтобы создать ARCoreSession
? Разве вы не можете просто передать_pAndroidApp->activity->clazz
вместо этого, так какNativeActivity
этоContext
? - person Michael   schedule 09.01.2018