Google jest zaangażowany w promowanie równości rasowej dla społeczności czarnych. Zobacz jak.

Włącz ARCore

Na tej stronie opisano, jak włączyć funkcjonalność ARCore w projektach Android NDK. Aby to zrobić, musisz:

  1. Dodaj AR Wymagane lub AR Opcjonalne do manifestu
  2. Dodaj zależności kompilacji do swojego projektu
  3. Przeprowadź testy środowiska wykonawczego, aby upewnić się, że urządzenie obsługuje ARCore i że zainstalowano na nim Usługi Google Play dla AR
  4. Upewnij się, że Twoja aplikacja jest zgodna z wymaganiami dotyczącymi prywatności użytkownika ARCore

Usługi Google Play dla AR

Zestawy SDK ARCore udostępniają funkcje AR na urządzeniach obsługiwanych przez ARCore, na których zainstalowano Usługi Google Play dla AR (ARCore).

Usługi Google Play dla AR są automatycznie instalowane i aktualizowane na większości obsługiwanych urządzeń.

Przed rozpoczęciem sesji AR aplikacje muszą:

  1. Sprawdź, czy ARCore jest obsługiwany, wywołując ArCoreApk_checkAvailability .
  2. Sprawdź, czy Usługi Google Play dla AR są zainstalowane i aktualne, a wymagane dane profilu urządzenia ARCore zostały pobrane, wywołując ArCoreApk_requestInstall .

Dodaj AR Wymagane lub AR Opcjonalne do manifestu

Aplikację obsługującą funkcje AR można skonfigurować na dwa sposoby: AR Wymagane i AR Opcjonalne .

Wymagane AR

Aby aplikacja wymagała AR, była dostępna, wymaga urządzenia obsługiwanego przez ARCore , na którym zainstalowano Usługi Google Play dla AR .

Więcej informacji znajdziesz w artykule Publikowanie aplikacji AR w sklepie Google Play .

Aby zadeklarować aplikację jako AR Required , zmodyfikuj AndroidManifest.xml aby zawierał następujące wpisy:

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

Następnie zmodyfikuj minSdkVersion build.gradle aplikacji, aby określić minSdkVersion co najmniej 24:

android {
    defaultConfig {
        …
        minSdkVersion 24
    }
}

AR Opcjonalne

Opcjonalna aplikacja AR ma opcjonalne funkcje AR, które są aktywowane tylko na urządzeniach obsługujących ARCore , na których zainstalowano Usługi Google Play dla AR .

  • AR Opcjonalne aplikacje można instalować i uruchamiać na urządzeniach, które nie obsługują ARCore.

  • Gdy użytkownicy zainstalują opcjonalną aplikację AR, Sklep Google Play nie zainstaluje automatycznie Usług Google Play dla AR wraz z aplikacją.

Aby zadeklarować swoją aplikację jako AR Optional , zmodyfikuj AndroidManifest.xml aby zawierał następujące wpisy:

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

Następnie zmodyfikuj minSdkVersion build.gradle aplikacji, aby określić minSdkVersion co najmniej 14:

android {
    defaultConfig {
        …
        minSdkVersion 14
    }
}

Dodaj zależności kompilacji

Aby dodać bibliotekę ARCore do projektu Android Studio, wykonaj następujące czynności:

  1. Upewnij się, że plik build.gradle Twojego projektu zawiera repozytorium Maven firmy Google.

    allprojects {
    repositories {
        google()
            ...
    
  2. Wyodrębnij natywne biblioteki z ARCore aar.

    Biblioteki natywne są zawarte w pliku aar ARCore. Aby użyć ich jako części projektu C/C++, należy je wyodrębnić z archiwum, aby można było się do nich bezpośrednio odwoływać. Aby to zrobić, dodaj niestandardowe zadanie do pliku build.gradle modułu (na przykład app/build.gradle ).

    Plik nagłówkowy dla ARCore, arcore_c_api.h, jest zawarty w projekcie GitHub SDK:

    Zdefiniuj zmienną do katalogu w katalogu app/build . Biblioteki natywne zostaną wyodrębnione do tego katalogu. Utwórz również konfigurację Gradle do przechowywania zadań i danych ekstrakcji.

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

    Utwórz zadanie, aby skopiować natywne biblioteki z pliku aar i dodać je do zależności kompilacji

      // 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. Skonfiguruj natywne flagi kompilacji, aby przekazywać lokalizacje do zewnętrznych narzędzi do kompilacji.

    Ten przykład pochodzi z przykładów w projekcie 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. Dodaj zależności zarówno dla biblioteki Java, jak i bibliotek natywnych.

     dependencies {
          ...
          // Add java and native dependencies on the ARCore library
          implementation 'com.google.ar:core:1.25.0'
          natives 'com.google.ar:core:1.25.0'
          ...
     }
    
  5. Odwołaj się do natywnych bibliotek w 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}
    )
    

Wykonywanie testów w czasie wykonywania

Sprawdź, czy ARCore jest zainstalowany

Wszystkie aplikacje AR muszą wywołać ArCoreApk_requestInstall() przed utworzeniem sesji ARCore. ArCoreApk_requestInstall() sprawdza, czy jest zainstalowana kompatybilna wersja Usług Google Play dla AR (może być nieaktualna lub została usunięta ręcznie przez użytkownika) i poprosi użytkownika o zainstalowanie usługi, jeśli jej nie ma.

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

Jeśli ArCoreApk_requestInstall() zwraca AR_INSTALL_STATUS_INSTALL_REQUESTED , bieżące działanie zostanie wstrzymane, a użytkownik zostanie poproszony o zainstalowanie lub zaktualizowanie usługi. Funkcja onResume() wykonywana ponownie, gdy użytkownik wróci do działania.

Sprawdź, czy ARCore jest obsługiwany (tylko AR opcjonalnie)

Opcjonalne aplikacje AR mogą używać ArCoreApk_checkAvailability() aby określić, czy bieżące urządzenie obsługuje ARCore. Na urządzeniu, które nie obsługuje ARCore, aplikacje powinny wyłączać funkcje związane z AR i ukrywać powiązane elementy interfejsu użytkownika.

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

Następnie, gdy użytkownik chce skorzystać z funkcji AR, Twoja aplikacja powinna upewnić się, że zainstalowano Usługi Google Play dla AR . Prostym sposobem na to jest uruchomienie aktywności zgodnej z opisanym powyżej wzorcem AR Required.

Zgodność z wymaganiami dotyczącymi prywatności użytkownika

Upewnij się, że Twoja aplikacja jest zgodna z wymaganiami dotyczącymi prywatności użytkownika ARCore .

Następne kroki

Przeczytaj kod i komentarze w przykładowej aplikacji, a także C API Reference .