Google is committed to advancing racial equity for Black communities. See how.

ARCoreを有効にする

このページでは、AndroidNDKプロジェクトでARCore機能を有効にする方法について説明します。これを行うには、次のことを行う必要があります。

  1. マニフェストにAR必須またはARオプションを追加
  2. ビルドの依存関係を追加し、プロジェクトに
  3. ランタイムチェックを実行し、デバイスがされていることを確認するためにArcoreのサポートということとARのためのGoogle Playのサービスがそれにインストールされています
  4. Arcoreの者とアプリの準拠を確認してくださいユーザーのプライバシーの要件

AR向けGooglePlay開発者サービス

ArcoreのSDKには、ARは、上で利用可能な機能作るArcoreのデバイスサポートしていARのためのGoogle Playのサービスを(Arcoreの)がインストールされています。

Google Play開発者サービスは、サポートされているデバイスの大部分に自動的にインストールされ、最新の状態に保たれます。

ARセッションを開始する前に、アプリは次のことを行う必要があります。

  1. Arcoreのは、呼び出すことによって、サポートされていることを確認してくださいArCoreApk_checkAvailability
  2. ARのためのGoogle Playのサービスがインストールされていることを確認し、最新の状態、およびその必要Arcoreのデバイスプロファイルデータを呼び出すことにより、ダウンロードされたArCoreApk_requestInstall

マニフェストにAR必須またはARオプションを追加

AR必須およびARオプション:サポートは機能をARアプリは、2つの方法で設定することができます。

ARが必要

使用するためには、AR必要なアプリが必要ですArcoreのサポートされるデバイスARのためのGoogle Playのサービスがそれにインストールします。

  • Google PlayのストアではAR必須のみで利用できるアプリになりサポートArcoreのそのデバイス

  • ユーザーがAR必要なアプリをインストールすると、Google Playストアが自動的にインストールARのためのGoogle Playのサービスを。しかし、あなたのアプリケーションは、まだ追加実行する必要があります実行時チェックを更新する必要がありますAR用ケースGoogle Playのサービスにまたは手動でアンインストールされています。

詳細については、を参照のGoogle Playストアでの公開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オプションのアプリはだけでアクティブ化されているオプションのAR機能を持っていArcoreのデバイスサポートしていAR用のGoogle Playのサービスをインストールします。

  • ARオプションのアプリは、ARCoreをサポートしていないデバイスにインストールして実行できます。

  • ユーザーがARオプションのアプリをインストールすると、GoogleのPlayストアが自動的にインストールされませんARのためのGoogle Playのサービスをアプリで。

あなたのアプリは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
    }
}

ビルドの依存関係を追加する

ARCoreライブラリをAndroidStudioプロジェクトに追加するには、次の手順を実行します。

  1. ことを確認し、プロジェクトのbuild.gradleファイルは、GoogleのMavenのリポジトリを含んでいます。

    allprojects {
    repositories {
        google()
            ...
    
  2. ARCoreaarからネイティブライブラリを抽出します。

    ネイティブライブラリはARCoreaarファイルに含まれています。それらを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.26.0'
          natives 'com.google.ar:core:1.26.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のためのGoogle Playのサービスの互換性のあるバージョンがインストールされているかどうかをチェックし(それは古くなっている可能性がありますまたはユーザーによって手動で削除されている)、それが存在しない場合、サービスをインストールするようユーザーに促します。

// 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のためのGoogle Playのサービスがインストールされていることを確認してください。これを行う簡単な方法は、上記のARRequiredパターンに従うアクティビティを起動することです。

ユーザーのプライバシー要件への準拠

Arcoreの者とアプリが準拠を確認してくださいユーザーのプライバシーの要件

次のステップ

サンプルアプリのコードとコメントを読むだけでなく、 C APIリファレンス