ARCore 활성화

이 페이지에서는 Android NDK 프로젝트에서 ARCore 기능을 활성화하는 방법을 설명합니다. 이렇게 하려면 다음을 수행해야 합니다.

  1. 매니페스트에 AR 필수 또는 AR 선택 추가
  2. 빌드 의존성을 추가 프로젝트에
  3. 런타임 검사 수행 장치를 보장하는 것은 ARCore 지원하는 것을 AR에 대한 구글 플레이 서비스는 가 설치되어
  4. ARCore의로 확인 앱을 준수합니다 사용자의 개인 정보 보호 요구 사항

AR용 Google Play 서비스

ARCore의 SDK는 AR을 볼 수 있습니다 있도록 ARCore 디바이스 지원AR 구글 플레이 서비스를 설치 (ARCore을).

AR용 Google Play 서비스는 지원되는 대부분의 기기에 자동으로 설치되고 최신 상태로 유지됩니다.

AR 세션을 시작하기 전에 앱은 다음을 수행해야 합니다.

  1. ARCore 호출에 의해 지원되어 있는지 확인 ArCoreApk_checkAvailability .
  2. AR에 대한 구글 플레이 서비스가 설치되어 있는지 확인하고 최신, 그 요구 ARCore 장치 프로파일 데이터를 호출하여 다운로드 된 ArCoreApk_requestInstall .

매니페스트에 AR 필수 또는 AR 선택 추가

AR 필수AR 옵션 : 지원하는 기능을 AR 앱은 두 가지 방법으로 구성 할 수 있습니다.

AR 필수

사용할 수하기 위해, AR 필수 응용 프로그램은 필요 ARCore 지원 장치AR 구글 플레이 서비스 가 설치합니다.

  • 구글 플레이 스토어 AR 필수에서만 사용할 수 애플 리케이션하게 지원 ARCore하는 장치 .

  • 사용자가 AR 필수 응용 프로그램을 설치하면 Google Play 스토어가 자동으로 설치 플레이 AR 구글 플레이 서비스 . 그러나 앱은 여전히 추가로 수행해야 런타임 검사를 업데이트해야 AR을위한 경우 구글 플레이 서비스 또는 수동으로 제거되었습니다.

자세한 내용은 구글 플레이 스토어에서 출판 AR 애플 리케이션 .

AR 필수가 될 당신의 응용 프로그램을 선언하려면 수정 AndroidManifest.xml 다음과 같은 항목을 포함 :

<uses-permission android:name="android.permission.CAMERA"/>

<!-- Limits app visibility in the Google Play Store to ARCore supported devices
     (https://developers.google.com/ar/devices). -->
<uses-feature android:name="android.hardware.camera.ar" android:required="true"/>

<application …>
    …

  <!-- "AR Required" app, requires "Google Play Services for AR" (ARCore)
       to be installed, as the app does not include any non-AR features. -->
  <meta-data android:name="com.google.ar.core" android:value="required" />

</application>

그런 다음 앱의 수정 build.gradle 지정 minSdkVersion 적어도 24의를 :

android {
    defaultConfig {
        …
        minSdkVersion 24
    }
}

AR 옵션

아칸소 선택적 응용 프로그램에서만 활성화되는 옵션 AR 기능이 ARCore 디바이스 지원AR 구글 플레이 서비스를 설치합니다.

  • AR 옵션 앱은 ARCore를 지원하지 않는 기기에 설치하여 실행할 수 있습니다.

  • 사용자가 AR 선택적 응용 프로그램을 설치하면 구글 플레이 스토어가 자동으로 설치되지 않습니다 AR 구글 플레이 서비스 응용 프로그램과 함께.

AR 선택 사항이 될 당신의 응용 프로그램을 선언하려면 수정 AndroidManifest.xml 다음과 같은 항목을 포함 :

<uses-permission android:name="android.permission.CAMERA" />

<application …>
    …

    <!-- "AR Optional" app, contains non-AR features that can be used when
         "Google Play Services for AR" (ARCore) is not available. -->
    <meta-data android:name="com.google.ar.core" android:value="optional" />
</application>

그런 다음 앱의 수정 build.gradle 지정 minSdkVersion 적어도 14를 :

android {
    defaultConfig {
        …
        minSdkVersion 14
    }
}

빌드 종속성 추가

Android Studio 프로젝트에 ARCore 라이브러리를 추가하려면 다음 단계를 수행하십시오.

  1. 확인 프로젝트의 build.gradle 파일은 구글의 메이븐 저장소가 포함되어 있습니다.

    allprojects {
    repositories {
        google()
            ...
    
  2. ARCore aar에서 기본 라이브러리를 추출합니다.

    기본 라이브러리는 ARCore aar 파일에 포함되어 있습니다. C/C++ 프로젝트의 일부로 사용하려면 직접 참조할 수 있도록 아카이브에서 추출해야 합니다. 이렇게하려면 모듈의에 사용자 정의 작업을 추가 build.gradle 파일 (예를 들어, app/build.gradle ).

    ARCore의 헤더 파일은, arcore_c_api.h는 GitHub의 SDK 프로젝트에 포함되어 있습니다 :

    의 디렉토리에 변수를 정의 app/build 디렉토리. 기본 라이브러리는 이 디렉토리로 추출됩니다. 또한 추출 작업과 데이터를 보관할 gradle 구성을 만듭니다.

    /*
    The ARCore aar library contains the native shared libraries. These are
    extracted before building to a temporary directory.
    */
    def arcore_libpath = "${buildDir}/arcore-native"
    
    // Create a configuration to mark which aars to extract .so files from
    configurations { natives }
    
    

    aar 파일에서 네이티브 라이브러리를 복사하는 작업을 만들고 빌드 종속성에 추가합니다.

      // Extracts the shared libraries from aars in the natives configuration.
      // This is done so that NDK builds can access these libraries.
      task extractNativeLibraries() {
         // Extract every time.
         outputs.upToDateWhen { false }
    
         doFirst {
              configurations.natives.files.each { f ->
                  copy {
                      from zipTree(f)
                      into arcore_libpath
                      include "jni/**/*"
                  }
              }
          }
      }
    
      tasks.whenTaskAdded {
          task-> if (task.name.contains("external") && !task.name.contains("Clean")) {
              task.dependsOn(extractNativeLibraries)
          }
      }
    
  3. 외부 빌드 도구에 위치를 전달하도록 기본 빌드 플래그를 구성합니다.

    이 예제는 GitHub 프로젝트의 샘플에서 가져온 것입니다.

          externalNativeBuild {
              cmake {
                  cppFlags "-std=c++11", "-Wall"
                  arguments "-DANDROID_STL=c++_static",
                          "-DARCORE_LIBPATH=${arcore_libpath}/jni",
                          "-DARCORE_INCLUDE=${project.rootDir}/../../libraries/include"
              }
          }
    

  4. Java 및 기본 라이브러리 모두에 대한 종속성을 추가하십시오.

     dependencies {
          ...
          // Add java and native dependencies on the ARCore library
          implementation 'com.google.ar:core:1.29.0'
          natives 'com.google.ar:core:1.29.0'
          ...
     }
    
  5. 의 네이티브 라이브러리 참조 CMakeLists.txt

    # Import the ARCore library.
    add_library(arcore SHARED IMPORTED)
    set_target_properties(arcore PROPERTIES IMPORTED_LOCATION
                  ${ARCORE_LIBPATH}/${ANDROID_ABI}/libarcore_sdk_c.so
                  INTERFACE_INCLUDE_DIRECTORIES ${ARCORE_INCLUDE}
    )
    

런타임 검사 수행

ARCore 설치 여부 확인

모든 AR 애플리케이션을 호출해야합니다 ArCoreApk_requestInstall() ARCore 세션을 만들기 전에. ArCoreApk_requestInstall() 검사는 AR에 대한 구글 플레이 서비스의 호환 버전이 설치되어 있는지 여부 (이 기간이 경과되었거나 사용자가 수동으로 제거되었습니다) 그것은 존재하지 않는 경우 서비스를 설치하라는 메시지가 표시됩니다.

// Tracks if we have already triggered an installation request.
bool install_requested_;

void nativeOnCreate() {
  // other setup

  install_requested_ = false;
}

void nativeOnResume(JNIEnv env, jobject activity) {
  if (ar_session_ == null) {
    bool user_requested_install = !install_requested_;

    ArInstallStatus install_status;
    // Ensure Google Play Services for AR and ARCore device profile data are
    // installed and up to date.
    ArStatus error = ArCoreApk_requestInstall(
        env, activity, user_requested_install, &install_status);
    if (error != AR_SUCCESS) {
      // Inform user of error.
      return;
    }

    switch (install_status) {
      case AR_INSTALL_STATUS_INSTALLED:
        break;
      case AR_INSTALL_STATUS_INSTALL_REQUESTED:
        // When this method returns `AR_INSTALL_STATUS_INSTALL_REQUESTED`:
        // 1. This activity will be paused.
        // 2. The user is prompted to install or update Google Play
        //    Services for AR (market://details?id=com.google.ar.core).
        // 3. ARCore downloads the latest device profile data.
        // 4. This activity is resumed. The next invocation of
        //    ArCoreApk_requestInstall will either return
        //    `AR_INSTALL_STATUS_INSTALLED` or throw an exception if the
        //    installation or update did not succeed.
        install_requested_ = true;
        return;
    }

    // Request camera permissions.

    error = ArSession_create(env, context, &ar_session_);
    if (error != AR_SUCCESS) {
      // Inform user of error.
      return;
    }

    // Configure session
  }

  // Normal onResume behavior
}

경우 ArCoreApk_requestInstall() 반환 AR_INSTALL_STATUS_INSTALL_REQUESTED , 현재 활동 일시 정지되고 사용자는 설치하거나 서비스를 업데이트하라는 메시지가 표시됩니다. 활동의 onResume() 활동을 다시 할 때 사용자의 반환을 실행합니다.

ARCore 지원 여부 확인(AR 옵션만 해당)

AR 옵션 응용 프로그램을 사용할 수 있습니다 ArCoreApk_checkAvailability() 현재 장치가 지원 ARCore 있는지 확인. ARCore를 지원하지 않는 기기에서 앱은 AR 관련 기능을 비활성화하고 관련 UI 요소를 숨겨야 합니다.

void maybeEnableArButton(JNIEnv env, jobject context) {
  // Likely called from Activity.onCreate() of an activity with AR buttons.
  ArAvailability availability
  ArCoreApk_checkAvailability(env, context, &availability);
  if (availability == AR_AVAILABILITY_UNKNOWN_CHECKING) {
    // Set a timer to call maybeEnableArButton() again after about 200ms.
  }
  if (availability == AR_AVAILABILITY_SUPPORTED_NOT_INSTALLED ||
      availability == AR_AVAILABILITY_SUPPORTED_APK_TOO_OLD ||
      availability == AR_AVAILABILITY_SUPPORTED_INSTALLED) {
    // Show/enable AR button.
  } else {
    // Hide/disable AR button.
  }
}

사용자가 AR 기능을 사용하고자 할 때 다음, 앱한다 AR에 대한 구글 플레이 서비스가 설치되어 있는지 확인하십시오 . 이를 수행하는 쉬운 방법은 위에서 설명한 AR 필수 패턴을 따르는 활동을 시작하는 것입니다.

사용자 개인 정보 요구 사항 준수

ARCore의로 확인 앱을 준수합니다 사용자의 개인 정보 보호 요구 사항 .

다음 단계

코드 및 설명 샘플 응용 프로그램에서뿐만 아니라 읽기 C API 참조 .