新規または既存のアプリで拡張現実(AR)機能を使用するには、AR を有効にしてください。
アプリを「AR 必須」または「AR オプション」に設定する
個々のデバイスの容量を節約するため、すべての AR 機能は Google Play 開発者サービス(AR)というアプリに保存され、Google Play ストアで別途更新されます。AR 機能を使用する Android アプリは、ARCore SDK を使用して Google Play 開発者サービス(AR)と通信します。AR 機能をサポートするアプリは、AR 必須と AR オプションの 2 つの方法で設定できます。この指定により、アプリが AR 用 Google Play 開発者サービス アプリと連携する方法が決まります。
AR 必須アプリは、ARCore なしでは動作できません。ご利用には、AR 用 Google Play 開発者サービスがインストールされた ARCore 対応デバイスが必要です。
- Google Play ストアでは、ARCore をサポートするデバイスでのみ AR 必須アプリを利用できるようになります。
- AR 必須アプリをインストールすると、Google Play ストアによってデバイスに Google Play 開発者サービス(AR)が自動的にインストールされます。ただし、Google Play 開発者サービス(AR)が古い場合や手動でアンインストールされた場合に備えて、アプリは追加のランタイム チェックを実行する必要があります。
AR オプション アプリは、ARCore を使用して既存の機能を強化します。オプションの AR 機能は、AR 用 Google Play 開発者サービスがインストールされている ARCore 対応デバイスでのみ有効になります。
- AR オプション アプリは、ARCore に対応していないデバイスにインストールして実行できます。
- ユーザーが AR オプション アプリをインストールしても、Google Play ストアによってデバイスに Google Play 開発者サービス(AR)が自動的にインストールされることはありません。
AR が必要 | AR(オプション) | |
---|---|---|
AR 機能の使用 | アプリの基本的な機能には ARCore が必要です。 | ARCore はアプリの機能を強化します。アプリは ARCore サポートなしでも実行できます。 |
Google Play ストアの公開設定 | お客様のアプリは、ARCore をサポートするデバイスの Google Play ストアにのみ掲載されます。 | アプリは通常のリスト手順に沿っています。 |
Google Play 開発者サービス(AR)のインストール方法 | Google Play ストアは、アプリとともに Google Play 開発者サービス(AR)をインストールします。 | アプリで使用されている
<ph type="x-smartling-placeholder"></ph>
ArCoreApk.requestInstall()
ARCore をダウンロードしてインストールします。 |
Android minSdkVersion の要件 |
Android 7.0(API レベル 24) | Android 4.4(API レベル 19)ですが、AR 機能を実行するには Android 7.0(API レベル 24)以降が必要です |
ARCore のサポートとインストール ステータスを確認するには、ArCoreApk_checkAvailability() または ArCoreApk_checkAvailabilityAsync() を使用する必要があります
|
||
必須
<ph type="x-smartling-placeholder"></ph>
ArCoreApk.requestInstall()
Google Play 開発者サービス(AR)をインストール |
アプリを AR 必須または AR 省略可にするには、AndroidManifest.xml
を更新して以下のエントリを含めます。
AR が必要
<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" />
<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>
AR(オプション)
<uses-permission android:name="android.permission.CAMERA" />
<!-- If your app was previously AR Required, don't forget to remove the
`<uses-feature android:name="android.hardware.camera.ar" />` entry, as
this would limit app visibility in the Google Play Store to only
ARCore supported devices. -->
<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
を変更して、少なくとも 24
の minSdkVersion
を指定します。
android {
defaultConfig {
…
minSdkVersion 24
}
}
ビルド依存関係を追加する
プロジェクトの
build.gradle
ファイルに Google の Maven リポジトリが含まれていることを確認します。allprojects { repositories { google() … } }
モジュールの
build.gradle
ファイルにカスタムタスクを追加して、付属のネイティブ ライブラリを ARCore の AAR ファイルから抽出します。これにより、C または C++ プロジェクト内で直接参照できます。app/build
ディレクトリで、ネイティブ ライブラリの抽出先となるディレクトリへの変数を定義します。データと抽出タスクを保持する Gradle 構成を作成します。
/* The ARCore AAR library contains native shared libraries that 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 native configuration // 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) } }
場所を外部ビルドツールに渡すようにネイティブ ビルドフラグを構成します。
// From the sample app. externalNativeBuild { cmake { cppFlags "-std=c++11", "-Wall" arguments "-DANDROID_STL=c++_static", "-DARCORE_LIBPATH=${arcore_libpath}/jni", "-DARCORE_INCLUDE=${project.rootDir}/../../libraries/include" } }
Java ライブラリとネイティブ ライブラリの両方の依存関係を追加します。
dependencies { ... // Add Java and native dependencies to the ARCore library. implementation 'com.google.ar:core:1.33.0' natives 'com.google.ar:core:1.33.0' ... }
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} )
ランタイム チェックを行う
アプリの AR 機能がスムーズに動作するように、実行時に以下のことを行います。
ARCore がサポートされているかどうかを確認する
AR 必須アプリと AR オプション アプリはどちらも、ArCoreApk_checkAvailability()
または ArCoreApk_checkAvailabilityAsync()
を使用して、現在のデバイスが ARCore に対応しているかどうかを判断する必要があります。ARCore をサポートしていないデバイスでは、アプリは AR 関連の機能を無効にして、関連する UI 要素を非表示にする必要があります。
Android NDK アプリでは、Java ArCoreApk
クラスを使用して互換性をチェックし、ネイティブ C ARCore Session API でインストールを管理できます。アプリの構造によっては、大量のエラー処理やユーザー インターフェースの操作が関係するため、ArCoreApk_
関数を使用するよりもこの方法のほうが簡単な場合があります。
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 or enable the AR button.
} else {
// Hide or disable the AR button.
}
}
AR 必須アプリとともに Google Play 開発者サービス(AR)がインストールされていても、サポートされていないデバイスを使用しているユーザーが外部ソースからインストールする可能性があります。ArCoreApk_checkAvailability()
または ArCoreApk_checkAvailabilityAsync()
を使用して ARCore のサポートを確認することで、一貫したエクスペリエンスを実現できます。
ArCoreApk_checkAvailability()
は、デバイスが ARCore に対応しているかどうかを判断するために、ネットワーク リソースのクエリが必要になる場合があります。その間は AR_AVAILABILITY_UNKNOWN_CHECKING
が返されます。認識されるレイテンシとポップインを減らすには、ライフサイクルの早い段階で ArCoreApk_checkAvailability()
を 1 回呼び出して、戻り値を無視してクエリを開始する必要があります。これにより、AR 開始 UI 要素が表示される可能性があるときに、キャッシュされた結果をすぐに利用できるようになります。
AR 用 Google Play 開発者サービスがインストールされているかどうかを確認する
AR 必須アプリと AR オプション アプリの両方で使用が必須
<ph type="x-smartling-placeholder"></ph>
ArCoreApk.requestInstall()
を使用して、ARCore セッションを作成する前に、互換性のあるバージョンの Google Play 開発者サービス(AR)が(まだ)インストールされているかどうか、必要な ARCore デバイス プロファイル データがすべてダウンロードされていることを確認します。
// Tracks if an installation request has already been triggered.
bool install_requested_;
void nativeOnCreate() {
// Do other setup here.
install_requested_ = false;
}
void nativeOnResume(JNIEnv env, jobject activity) {
if (ar_session_ == null) {
bool user_requested_install = !install_requested_;
ArInstallStatus install_status;
// Ensure that 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 the ARCore session.
}
// Normal onResume behavior.
}
ユーザーのプライバシー要件を遵守する
Google Play ストアでアプリを公開するには、アプリが ARCore の ユーザーのプライバシー要件。
次のステップ
- ARCore セッションを構成する方法を学習する。