Android NativeActivity和ARCore C lib:function" ArSession_create()"在NativeActivity中调用时失败

时间:2018-04-13 01:55:21

标签: android android-ndk arcore native-activity

我试图通过NativeActivity中的ARCore C库创建AR会话。 但是,功能" ArSession_create()"始终返回错误代码 AR_ERROR_FATAL(-2),但没有崩溃表明未创建AR会话。以下是代码段:

import random

class Calculate():
    def HI_1(x, y):
        return x + y
    def HI_2(x, y):
        return x - y
    def HI_3(x, y):
        return x * y
    def HI_4(x, y):
        return x/y


a = random.randint(1, 4)
b = 'HI_' + str(a)

p = Calculate.b(15, 7)
print(p)

Android Logcat错误消息:

// 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!");

我已确认我在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库?感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

最后我明白了,所以我想自己回答这个问题。

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

  1. 从Maven存储库
  2. 下载ARCore库包(.aar)
  3. 将ARCore的共享库“libarcore_sdk_c.so”添加到应用程序的APK包中
  4. 将ARCore的java库“classes.jar”添加到应用程序的APK包
  5. 我做了1和2但忘了3,因此我在运行时遇到了class-not-found错误。

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

答案 1 :(得分:1)

在将arore-android-sdk/samples/hello_ar_c样本嵌入到{{3} android-ndk/native-activity示例框架(使用Android Studio时)。

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