Android NDK uygulamanızda artırılmış gerçekliği etkinleştirme

Yeni veya mevcut uygulamanızda artırılmış gerçeklik özelliklerini kullanmak için artırılmış gerçeklik özelliğini etkinleştirin.

Uygulamanızı Artırılmış Gerçeklik (AR) Zorunlu veya Artırılmış Gerçeklik (AR) İsteğe Bağlı olacak şekilde yapılandırın

Her bir cihazda yer açmak için tüm AR özellikleri, Play Store tarafından ayrı olarak güncellenen AR için Google Play Hizmetleri adlı bir uygulamada depolanır. AR özelliklerini kullanan Android uygulamaları, ARCore SDK'sını kullanarak AR için Google Play Hizmetleri ile iletişim kurar. AR özelliklerini destekleyen uygulamalar iki şekilde yapılandırılabilir: AR Zorunlu ve AR İsteğe Bağlı. Bu tanımlama, uygulamanın AR için Google Play Hizmetleri uygulamasıyla nasıl etkileşimde bulunduğunu belirler.

AR Tarafından Gerekli uygulamalar, ARCore olmadan çalışamaz. AR için Google Play Hizmetleri'nin yüklü olduğu, ARCore destekli bir cihaz gerekir.

  • Google Play Store, yalnızca AR Core gerektiren uygulamaları ARCore'u destekleyen cihazlarda kullanıma sunacaktır.
  • Kullanıcılar AR için Gerekli bir uygulamayı yüklediklerinde, Google Play Store AR için Google Play Hizmetleri'ni cihazlarına otomatik olarak yükler. Ancak, AR için Google Play Hizmetleri güncel değilse veya manuel olarak kaldırılmışsa uygulamanızın ek çalışma zamanı kontrolleri gerçekleştirmesi gerekir.

İsteğe bağlı artırılmış gerçeklik (AR) uygulamaları, mevcut işlevleri geliştirmek için ARCore'u kullanır. Yalnızca AR için Google Play Hizmetleri'nin yüklü olduğu, ARCore destekli cihazlarda etkinleştirilen isteğe bağlı AR özelliklerine sahiptir.

  • İsteğe bağlı AR uygulamaları, ARCore'u desteklemeyen cihazlara yüklenebilir ve bu cihazlarda çalıştırılabilir.
  • Kullanıcılar isteğe bağlı bir AR için Google Play Hizmetleri uygulamasını cihaza yüklediklerinde Google Play Store, AR için Google Play Hizmetleri'ni cihaza otomatik olarak yüklemez.
Artırılmış Gerçeklik (AR) GerekliArtırılmış Gerçeklik (AR) İsteğe Bağlı
Artırılmış gerçeklik (AR) özelliğinin kullanımı Uygulamanızın temel işlevselliği için ARCore'a ihtiyacı vardır. ARCore, uygulamanızın işlevselliğini artırır. Uygulamanız, ARCore desteği olmadan çalışabilir.
Play Store görünürlüğü Uygulamanız yalnızca ARCore'u destekleyen cihazların Play Store'unda listelenir. Uygulamanızda normal giriş prosedürleri uygulanmaktadır.
AR için Google Play Hizmetleri yükleme yöntemi Play Store, uygulamanızın yanı sıra AR için Google Play Hizmetleri'ni yükler. Uygulamanızda, ARCore'u indirip yüklemek için ArCoreApk_requestInstall() kullanılıyor.
Android minSdkVersion gereksinimleri Android 7.0 (API Düzeyi 24) Android 7.0 (API Düzeyi 24)
ARCore desteğini ve yükleme durumunu kontrol etmek için ArCoreApk_checkAvailability() veya ArCoreApk_checkAvailabilityAsync() kullanılmalıdır
AR için Google Play Hizmetleri'ni yüklemek üzere ArCoreApk_requestInstall() kullanılmalıdır

Uygulamanızı AR Zorunlu veya Artırılmış Gerçeklik (AR) İsteğe Bağlı hale getirmek için AndroidManifest.xml cihazınızı aşağıdaki girişleri içerecek şekilde güncelleyin:

Artırılmış Gerçeklik (AR) Gerekli

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

Artırılmış Gerçeklik (AR) İsteğe Bağlı

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

Ardından, uygulamanızın build.gradle değerini değiştirerek minSdkVersion değerini en az 24 olarak belirtin:

 android {
     defaultConfig {
         …
         minSdkVersion 24
     }
 }

Derleme bağımlılıkları ekleme

  1. Projenizin build.gradle dosyasının Google'ın Maven deposunu içerdiğinden emin olun.

    allprojects {
        repositories {
            google()
            …
        }
    }
    
  2. ARCore AAR dosyasından dahil edilen yerel kitaplıkları çıkarmak için modülünüzün build.gradle dosyasına bir özel görev ekleyin. Bu şekilde, bir C veya C++ projesinde bunlara doğrudan referans verilebilir.

  3. app/build dizininde, yerel kitaplıkların çıkarılacağı dizin için bir değişken tanımlayın.

  4. Verileri ve ayıklama görevlerini saklamak için bir Gradle yapılandırması oluşturun.

    /*
    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 }
    
  5. Yerel kitaplıkları AAR dosyasından kopyalamak ve derleme bağımlılıklarına eklemek için bir görev oluşturun.

    // 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)
        }
    }
    
  6. Konumları harici derleme araçlarına geçirmek için yerel derleme bayraklarını yapılandırın.

    // 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"
        }
    }
    
  7. Java ve yerel kitaplıkların bağımlılıklarını ekleyin.

    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'
         ...
    }
    
  8. CMakeLists.txt içindeki yerel kitaplıklara referans verin.

    # 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}
    )
    

Çalışma zamanı kontrolleri gerçekleştirme

Uygulamanızdaki artırılmış gerçeklik özelliklerinin sorunsuz bir şekilde çalıştığından emin olmak için çalışma zamanı sırasında aşağıdakileri uygulayın.

ARCore'un desteklenip desteklenmediğini kontrol etme

Hem AR Zorunlu hem de AR İsteğe bağlı uygulamalar, mevcut cihazın ARCore'u destekleyip desteklemediğini belirlemek için ArCoreApk_checkAvailability() veya ArCoreApk_checkAvailabilityAsync() kullanmalıdır. ARCore'u desteklemeyen cihazlarda, uygulamalar AR ile ilgili işlevleri devre dışı bırakmalı ve ilişkili kullanıcı arayüzü öğelerini gizlemelidir.

Android NDK uygulamaları, yerel C ARCore Session API'sinde uyumluluğu kontrol etmek ve yüklemeyi yönetmek için Java ArCoreApk sınıfını kullanabilir. Uygulamanızın yapısına bağlı olarak bu işlem, çok sayıda hata işleme ve kullanıcı arayüzü etkileşimi nedeniyle ArCoreApk_ işlevlerini kullanmaktan daha kolay olabilir.

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 için Google Play Hizmetleri, AR için Gerekli uygulamanızla birlikte yüklenmiş olsa da, desteklenmeyen cihazların kullanıcıları bu uygulamayı harici bir kaynaktan yükleyebilir. ARCore desteğini kontrol etmek için ArCoreApk_checkAvailability() veya ArCoreApk_checkAvailabilityAsync() aracını kullanmak tutarlı bir deneyim sağlar.

ArCoreApk_checkAvailability() uygulamasının, cihazın ARCore'u destekleyip desteklemediğini belirlemek için ağ kaynaklarını sorgulaması gerekebilir. Bu süre boyunca AR_AVAILABILITY_UNKNOWN_CHECKING değerini döndürecektir. Algılanan gecikmeyi ve pop-in'i azaltmak amacıyla uygulamalar, sorguyu başlatmak için yaşam döngüsünün başlarında ArCoreApk_checkAvailability()'i çağırarak döndürülen değeri yoksaymalıdır. Bu şekilde, AR girişi yapan bir kullanıcı arayüzü öğesi görüntülenebileceği zaman önbelleğe alınmış bir sonuç hemen kullanılabilir hale gelir.

AR için Google Play Hizmetleri'nin yüklü olup olmadığını kontrol etme

Hem AR Zorunlu hem de AR İsteğe bağlı uygulamalar, AR için Google Play Hizmetleri'nin uyumlu bir sürümünün yüklü olup olmadığını kontrol etmek ve gerekli tüm ARCore cihaz profili verilerinin indirildiğinden emin olmak amacıyla, ARCore oturumu oluşturulmadan önce ArCoreApk_requestInstall()'ı çağırmalıdır.

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

Kullanıcı Gizliliği Şartlarına Uyma

Uygulamanızı Play Store'da yayınlamak için uygulamanızın ARCore'un Kullanıcı Gizliliği Şartları'na uyduğundan emin olun.

Sonraki adımlar