SIGSEGV 使用 ARCore 和原生 android 应用程序
SIGSEGV using ARCore with native android application
我想在原生的c ++ android应用程序中使用ARCore。因此,我需要 JNI 环境和上下文。JNI env 在 android_app 结构中提供,但没有给出上下文。我找到了使用 VM 获取 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(。
活动的 java 实例可以用作上下文。 我创建了会话调用:
ANativeActivity *activity = app->activity;
CHECK(ArSession_create(activity->env, activity->clazz, &ar_session_) == AR_SUCCESS);
CHECK(ar_session_);
ArConfig* ar_config = nullptr;
ArConfig_create(ar_session_, &ar_config);
CHECK(ar_config);
const ArStatus status = ArSession_checkSupported(ar_session_, ar_config);
CHECK(status == AR_SUCCESS);
CHECK(ArSession_configure(ar_session_, ar_config) == AR_SUCCESS);
ArConfig_destroy(ar_config);
ArFrame_create(ar_session_, &ar_frame_);
CHECK(ar_frame_);
请记住,会话创建可能会导致一些 Java 异常,例如手机不受支持或未安装配套应用程序。 这将导致来自 ArSession_create(( 的返回代码不是AR_SUCCESS,而是类似于 AR_UNAVAILABLE_ARCORE_NOT_INSTALLED。 在这种情况下,断言可能不是最好的做法,而是向用户显示消息。
相关文章:
- 来自 Android 应用程序内部的 boost 类型的 boost::wrapexcept<boost::system::system_error> 的未捕获异常
- Windows 和 Android 应用程序是否需要 SSL?
- 使用C++创建UDP服务器以嵌入跨平台iOS和Android应用程序中
- 使用 JNI 从 Android 应用程序向C++发送字符串
- 在构建 Android 应用程序时禁用 CMake 目标
- 如何在Qt Android应用程序上禁用屏幕保护程序
- 如何在Cocos2d Android应用程序中获得呼叫/挂起事件
- 如何在 Unity Android 应用程序中的 OpenCV 中使用 ARCore 相机图像
- SIGSEGV 使用 ARCore 和原生 android 应用程序
- 呼叫功能时JNI C Android应用程序崩溃
- 要读取一个从一个游戏应用程序(In C )到我的Android应用程序的文件
- 使用 CMake 在 android 应用程序中C++ libcurl
- 为什么我们需要使用android工具链(或NDK)来编译在android应用程序上下文中运行的c/c++代码
- 测试使用visual studio编写的C++android应用程序的最佳方法是什么.不升级到windows专业版
- 是否可以报告用户在 Android 应用程序中单击了哪些按钮
- 如何在QT Android应用程序中解决慢速滚动
- 在Qt Android应用程序中运行GDB服务器
- Android应用程序中的C/C 代码如何执行
- 我们不能只用Java开发Android应用程序吗?
- 在我的Nexus 4上使用openCV和JNI的Android应用程序中的错误