【问题标题】:Android NativeActivity and ARCore C lib: function "ArSession_create()" fails when called in a NativeActivityAndroid NativeActivity 和 ARCore C lib:在 NativeActivity 中调用函数“ArSession_create()”失败
【发布时间】:2018-09-23 07:01:56
【问题描述】:

我正在尝试通过 NativeActivity 中的 ARCore C 库创建 AR 会话。 但是,函数“ArSession_create()”总是返回错误代码AR_ERROR_FATAL (-2),但是没有创建AR会话的崩溃异常。以下是sn-p的代码:

// Get the Android activity by a global variable, which is recorded
// in the NDK glue library function "void ANativeActivity_onCreate()"
// by the function's first passed-in parameter
ANativeActivity* activity = _global_android_activity;

//Get the JNI Env for the current thread
JNIEnv* env = NULL;
JavaVM* vm = activity->vm;
int r = vm->AttachCurrentThread(&env, NULL);

//Create AR session
ArSession* arSession = nullptr;
ArStatus status = ArSession_create(env, activity->clazz, &arSession);
if (status != ArStatus::AR_SUCCESS)
    CONSOLE_PRINTF(L"@@@@@@@@@@@@@@@ Failed to create AR session!, Result = %d", status);
else
    CONSOLE_PRINTF(L"@@@@@@@@@@@@@@@ Succeeded to create AR session!");

Android Logcat 错误信息:

04-12 22:06:10.084 24454-24473/com.omnigsoft.gameenginedemo E/third_party/redwood/base/jni_common/src/class_util.cc: Failed to find class com/google/ar/core/SessionCreateJniHelper using custom class loader.
04-12 22:06:10.085 24454-24473/com.omnigsoft.gameenginedemo E/third_party/arcore/ar/core/android/sdk/session_create.cc: Failed to load SessionCreateJniHelper class.

我已确认我已在 AndroidManifest.xml 文件中为我的 Android 原生应用启用 AR:

  • minSdkVersion 设置为 24
  • 添加了权限“android.permission.CAMERA”
  • 添加了 ARCore 元数据:android:name="com.google.ar.core"

我还确认我的设备(Google Pixel XL)能够运行 ARCore 示例应用“hello_ar_c”(来自 ARCode SDK,由 Android Studio 构建)。

所以问题是:为什么函数 ArSession_create() 会失败? 有没有人成功使用带有 NativeActivity 的 ARCode C 库?感谢您的任何建议。

【问题讨论】:

  • 确认:您没有收到可以检查的ArStatus
  • 从代码“ArStatus status = ArSession_create(env, activity->clazz, &arSession);”,我可以说函数返回值AR_ERROR_FATAL (-2) 到状态。
  • 我想我们需要关注错误消息“Failed to find class com/google/ar/core/SessionCreateJniHelper”来找到答案。有人知道这个错误信息吗?
  • 可能相关?请注意确定它是否适用于您的场景。 github.com/google-ar/arcore-android-sdk/issues/122
  • 您好 stkent,我正在使用 Visual Studio 2015 构建我的原生 android 应用程序,因此构建过程中不涉及 Proguard,无论如何,谢谢。

标签: android android-ndk arcore native-activity


【解决方案1】:

当将arore-android-sdk/samples/hello_ar_c 样本嵌入到@987654322 时,我也收到了这个确切的错误“无法使用自定义类加载器找到类 com/google/ar/core/SessionCreateJniHelper”,然后是“无法加载 SessionCreateJniHelper 类” @ 示例框架(使用 Android Studio 时)。

这种情况下的问题是 AndroidManifest.xml 中的 android:hasCode="false" 指令,NativeActivity sample adds.即使在基于 NativeActivity 的应用程序中没有任何 Java 代码,ARCore 中的链接确实会添加 Java 代码,因此在这种情况下需要删除 android:hasCode="false" 指令。

【讨论】:

    【解决方案2】:

    终于知道原因了,所以我想自己回答这个问题。

    为了在带有其他 IDE 而不是 Android Studio 的 Android 应用中手动使用 ARCore,我们需要做以下事情:

    1. 从 Maven 存储库下载 ARCore 库包 (.aar)
    2. 将 ARCore 的共享库“libarcore_sdk_c.so”添加到应用的 APK 包中
    3. 将 ARCore 的 java 库“classes.jar”添加到应用的 APK 包中

    我做了 1 和 2,但忘记了 3,因此在运行时出现 class-not-found 错误。

    出现了更多错误,但至少我解决了这个问题。 使用 Android Studio 进行 ARCore 应用开发似乎是目前唯一舒服的方式。

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 2016-12-23
      • 2013-12-20
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多