Aktivieren Sie AR, um AR-Funktionen in Ihrer neuen oder vorhandenen App zu verwenden.
Ihre App als „AR erforderlich“ oder „AR optional“ konfigurieren
Um auf einzelnen Geräten Platz zu sparen, werden alle AR-Funktionen in einer App namens Google Play-Dienste für AR gespeichert, die separat über den Play Store aktualisiert wird. Android-Apps, die AR-Funktionen verwenden, kommunizieren über das ARCore SDK mit den Google Play-Diensten für AR. Eine App, die AR-Funktionen unterstützt, kann auf zwei Arten konfiguriert werden: AR erforderlich und AR optional. Diese Angabe bestimmt, wie die App mit der App „Google Play-Dienste für AR“ interagiert.
Eine App mit der Kennzeichnung AR erforderlich funktioniert ohne ARCore nicht. Es ist ein ARCore-kompatibles Gerät mit installierten Google Play-Diensten für AR erforderlich.
- Im Google Play Store sind Apps mit der Kennzeichnung „Für AR erforderlich“ nur auf Geräten verfügbar, die ARCore unterstützen.
- Wenn Nutzer eine App installieren, für die AR erforderlich ist, werden die Google Play-Dienste für AR automatisch über den Google Play Store auf ihrem Gerät installiert. Ihre App muss jedoch weiterhin zusätzliche Laufzeitprüfungen ausführen, falls die Google Play-Dienste für AR veraltet sind oder manuell deinstalliert wurden.
In einer AR-optionalen App wird ARCore verwendet, um vorhandene Funktionen zu verbessern. Die optionalen AR-Funktionen sind nur auf Geräten verfügbar, die ARCore unterstützen, auf denen die Google Play-Dienste für AR installiert sind.
- Optionale AR-Apps können auf Geräten installiert und ausgeführt werden, die ARCore nicht unterstützen.
- Wenn Nutzer eine optionale AR-App installieren, werden die Google Play-Dienste für AR nicht automatisch vom Google Play Store auf dem Gerät installiert.
AR erforderlich | AR optional | |
---|---|---|
Nutzung der AR-Funktion | Ihre App benötigt ARCore für die grundlegenden Funktionen. | ARCore erweitert die Funktionen Ihrer App. Ihre App kann auch ohne ARCore-Unterstützung ausgeführt werden. |
Sichtbarkeit im Play Store | Ihre App wird nur auf Geräten mit ARCore-Unterstützung im Play Store aufgeführt. | Ihre App folgt den üblichen Verfahren für Einträge. |
Installationsmethode für Google Play-Dienste für AR | Der Play Store installiert zusammen mit Ihrer App die Google Play-Dienste für AR. | Deine App verwendet
ArCoreApk.requestInstall()
um ARCore herunterzuladen und zu installieren. |
Anforderungen für Android minSdkVersion |
Android 7.0 (API-Level 24) | Android 4.4 (API-Level 19), zum Ausführen von AR-Funktionen ist jedoch Android 7.0 (API-Level 24) erforderlich. |
Sie müssen ArCoreApk_checkAvailability() oder ArCoreApk_checkAvailabilityAsync() verwenden, um den ARCore-Support und den Installationsstatus zu prüfen.
|
||
Muss verwendet werden
ArCoreApk.requestInstall()
um Google Play-Dienste für AR zu installieren |
Wenn du festlegen möchtest, dass deine App AR erforderlich oder optional ist, musst du deine AndroidManifest.xml
so ändern, dass sie die folgenden Einträge enthält:
AR erforderlich
<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 optional
<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>
Ändern Sie dann die build.gradle
Ihrer App, um einen minSdkVersion
von mindestens 24
anzugeben:
android {
defaultConfig {
…
minSdkVersion 24
}
}
Build-Abhängigkeiten hinzufügen
Achten Sie darauf, dass die Datei
build.gradle
Ihres Projekts das Maven-Repository von Google enthält.allprojects { repositories { google() … } }
Fügen Sie der
build.gradle
-Datei Ihres Moduls eine benutzerdefinierte Aufgabe hinzu, um die enthaltenen nativen Bibliotheken aus der ARCore-Datei AAR zu extrahieren. Auf diese Weise kann in einem C- oder C++-Projekt direkt auf sie verwiesen werden.Definieren Sie im Verzeichnis
app/build
eine Variable für das Verzeichnis, in das die nativen Bibliotheken extrahiert werden sollen.Erstellen Sie eine Gradle-Konfiguration für die Daten- und Extraktionsaufgaben.
/* 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 }
Erstellen Sie eine Aufgabe, um die nativen Bibliotheken aus der AAR-Datei zu kopieren und den Build-Abhängigkeiten hinzuzufügen.
// 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) } }
Konfigurieren Sie die nativen Build-Flags so, dass die Speicherorte an die externen Build-Tools übergeben werden.
// 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" } }
Fügen Sie die Abhängigkeiten sowohl für die Java- als auch für die nativen Bibliotheken hinzu.
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' ... }
Referenzieren Sie die nativen Bibliotheken in
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} )
Laufzeitprüfungen ausführen
Führen Sie während der Laufzeit die folgenden Schritte aus, damit AR-Funktionen in Ihrer App reibungslos funktionieren.
Prüfen, ob ARCore unterstützt wird
Sowohl bei Apps, für die AR erforderlich ist, als auch bei Apps, für die AR optional ist, sollteArCoreApk_checkAvailability()
oder ArCoreApk_checkAvailabilityAsync()
verwendet werden, um zu ermitteln, ob das aktuelle Gerät ARCore unterstützt. Auf Geräten, die ARCore nicht unterstützen, sollten in Apps AR-bezogene Funktionen deaktiviert und zugehörige UI-Elemente ausgeblendet werden.
Eine Android-NDK-App kann die Java-Klasse ArCoreApk
verwenden, um die Kompatibilität zu prüfen und die Installation in der nativen C ARCore-Sitzungs-API zu verwalten. Je nach Struktur Ihrer App ist dies möglicherweise einfacher als die Verwendung der ArCoreApk_
-Funktionen, da eine große Menge an Fehlerbehandlung und Interaktion mit der Benutzeroberfläche erforderlich ist.
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.
}
}
ArCoreApk_checkAvailability()
oder ArCoreApk_checkAvailabilityAsync()
kannst du prüfen, ob ARCore-Support für dich verfügbar ist.
ArCoreApk_checkAvailability()
muss möglicherweise Netzwerkressourcen abfragen, um festzustellen, ob das Gerät ARCore unterstützt. In dieser Zeit wird AR_AVAILABILITY_UNKNOWN_CHECKING
zurückgegeben. Um die wahrgenommene Latenz und das Pop-in zu reduzieren, sollten Apps ArCoreApk_checkAvailability()
einmal zu Beginn des Lebenszyklus aufrufen, um die Abfrage zu starten, und den zurückgegebenen Wert ignorieren. Auf diese Weise ist ein im Cache gespeichertes Ergebnis sofort verfügbar, wenn ein UI-Element zum Eintreten in AR angezeigt wird.
Prüfen, ob Google Play-Dienste für AR installiert ist
Sowohl für AR required als auch für AR optionale Apps muss Folgendes verwendet werden:
ArCoreApk.requestInstall()
bevor Sie eine ARCore-Sitzung erstellen, um zu prüfen, ob eine kompatible Version der Google Play-Dienste für AR (noch) installiert ist und ob alle erforderlichen ARCore-Geräteprofildaten heruntergeladen wurden.
// 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.
}
Anforderungen an den Datenschutz für Nutzer erfüllen
Damit Sie Ihre App im Play Store veröffentlichen können, muss sie den Anforderungen an den Datenschutz für Nutzer von ARCore entsprechen.