Google setzt sich dafür ein, die Rassengerechtigkeit für schwarze Gemeinschaften zu fördern. Siehe wie.

Aktivieren Sie ARCore

Auf dieser Seite wird beschrieben, wie Sie die ARCore-Funktionalität in Ihren Android NDK-Projekten aktivieren. Dazu müssen Sie:

  1. Fügen Sie dem Manifest AR Required oder AR Optional hinzu
  2. Fügen Sie Ihrem Projekt Build-Abhängigkeiten hinzu
  3. Führen Sie Laufzeitprüfungen durch, um sicherzustellen, dass das Gerät von ARCore unterstützt wird und Google Play Services for AR darauf installiert ist
  4. Stellen Sie sicher, dass Ihre App den Datenschutzanforderungen von ARCore entspricht

Google Play Services für AR

ARCore SDKs stellen AR-Funktionen auf ARCore-unterstützten Geräten zur Verfügung , auf denen Google Play Services für AR (ARCore) installiert ist.

Google Play Services für AR wird auf den meisten unterstützten Geräten automatisch installiert und auf dem neuesten Stand gehalten.

Vor dem Starten einer AR-Sitzung müssen Apps:

  1. Überprüfen Sie, ob ARCore unterstützt wird, indem Sie ArCoreApk_checkAvailability aufrufen.
  2. Überprüfen Sie, ob Google Play Services für AR installiert und aktuell ist und ob die erforderlichen ARCore-Geräteprofildaten heruntergeladen wurden, indem Sie ArCoreApk_requestInstall aufrufen.

Fügen Sie dem Manifest AR Required oder AR Optional hinzu

Eine App, die AR-Funktionen unterstützt, kann auf zwei Arten konfiguriert werden: AR Erforderlich und AR Optional .

AR Erforderlich

Um verwendet werden zu können, benötigt eine AR Required- App ein von ARCore unterstütztes Gerät , auf dem Google Play Services für AR installiert ist.

Weitere Informationen finden Sie unter Veröffentlichen von AR-Apps im Google Play Store .

Um Ihre App als AR erforderlich zu deklarieren, ändern Sie Ihre AndroidManifest.xml , dass sie die folgenden Einträge enthält:

<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>

Ändern Sie dann das build.gradle Ihrer App, um eine minSdkVersion von mindestens 24 anzugeben:

android {
    defaultConfig {
        …
        minSdkVersion 24
    }
}

AR Optional

Eine AR Optional App verfügt über optionale AR - Funktionen, die nur aktiviert werden , auf Arcore Geräte unterstützt , die haben Google Play Services für AR installiert.

  • AR Optionale Apps können auf Geräten installiert und ausgeführt werden, die ARCore nicht unterstützen.

  • Wenn Benutzer eine optionale AR-App installieren, installiert der Google Play Store Google Play Services für AR nicht automatisch mit der App.

Um Ihre App als AR Optional zu deklarieren, ändern Sie Ihre AndroidManifest.xml , dass sie die folgenden Einträge enthält:

<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>

Ändern Sie dann das build.gradle Ihrer App, um eine minSdkVersion von mindestens 14 anzugeben:

android {
    defaultConfig {
        …
        minSdkVersion 14
    }
}

Fügen Sie Build-Abhängigkeiten hinzu

Führen Sie die folgenden Schritte aus, um die ARCore-Bibliothek zu Ihrem Android Studio-Projekt hinzuzufügen:

  1. build.gradle Sie sicher , dass die build.gradle Datei Ihres Projekts das Maven-Repository von Google enthält.

    allprojects {
    repositories {
        google()
            ...
    
  2. Extrahieren Sie native Bibliotheken aus ARCore aar.

    Die nativen Bibliotheken sind in der ARCore aar-Datei enthalten. Um sie als Teil eines C / C ++ - Projekts zu verwenden, müssen sie aus dem Archiv extrahiert werden, damit direkt auf sie verwiesen werden kann. build.gradle Sie dazu der build.gradle Datei Ihres Moduls eine benutzerdefinierte Aufgabe build.gradle (z. B. app/build.gradle ).

    Die Header-Datei für ARCore, arcore_c_api.h, ist im GitHub SDK-Projekt enthalten:

    Definieren Sie eine Variable für ein Verzeichnis im Verzeichnis app/build . Die nativen Bibliotheken werden in dieses Verzeichnis extrahiert. Erstellen Sie auch eine Gradle-Konfiguration, um die Extraktionsaufgaben und -daten zu speichern.

    /*
    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 }
    
    

    Erstellen Sie eine Aufgabe, um die nativen Bibliotheken aus der aar-Datei zu kopieren, und fügen Sie sie den Build-Abhängigkeiten hinzu

      // 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. Konfigurieren Sie die nativen Build-Flags so, dass die Speicherorte an die externen Build-Tools übergeben werden.

    Dieses Beispiel stammt aus den Beispielen im GitHub-Projekt.

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

  4. Fügen Sie die Abhängigkeiten sowohl für die Java- als auch für die native Bibliothek hinzu.

     dependencies {
          ...
          // Add java and native dependencies on the ARCore library
          implementation 'com.google.ar:core:1.23.0'
          natives 'com.google.ar:core:1.23.0'
          ...
     }
    
  5. Verweisen Sie auf 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}
    )
    

Führen Sie Laufzeitprüfungen durch

Überprüfen Sie, ob ARCore installiert ist

Alle AR-Apps müssen ArCoreApk_requestInstall() aufrufen, bevor eine ARCore-Sitzung erstellt wird. ArCoreApk_requestInstall() prüft, ob eine kompatible Version von Google Play Services für AR installiert ist (möglicherweise veraltet oder vom Benutzer manuell entfernt wurde), und fordert den Benutzer auf, den Dienst zu installieren, wenn er nicht vorhanden ist.

// 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
}

Wenn ArCoreApk_requestInstall() AR_INSTALL_STATUS_INSTALL_REQUESTED , wird die aktuelle Aktivität AR_INSTALL_STATUS_INSTALL_REQUESTED und der Benutzer wird aufgefordert, den Dienst zu installieren oder zu aktualisieren. onResume() der Aktivität wird erneut ausgeführt, wenn der Benutzer zur Aktivität zurückkehrt.

Überprüfen Sie, ob ARCore unterstützt wird (nur AR Optional).

AR optionale Apps können mithilfe von ArCoreApk_checkAvailability() ermitteln, ob das aktuelle Gerät ARCore unterstützt. Auf einem Gerät, das ARCore nicht unterstützt, sollten Apps AR-bezogene Funktionen deaktivieren und zugehörige Benutzeroberflächenelemente ausblenden.

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.
  }
}

Wenn der Benutzer eine AR-Funktion verwenden möchte, sollte Ihre App sicherstellen, dass Google Play Services für AR installiert ist . Eine einfache Möglichkeit, dies zu tun, besteht darin, eine Aktivität zu starten, die dem oben beschriebenen Muster AR Required folgt.

Einhaltung der Datenschutzanforderungen der Benutzer

Stellen Sie sicher, dass Ihre App den Datenschutzanforderungen von ARCore entspricht.

Nächste Schritte

Lesen Sie den Code und die Kommentare in der Beispiel-App sowie die C-API-Referenz .