Mengaktifkan AR di aplikasi Android NDK

Aktifkan AR untuk menggunakan fitur augmented reality di aplikasi baru atau yang sudah ada.

Mengonfigurasi aplikasi Anda menjadi AR Wajib atau AR Opsional

Untuk menghemat ruang di setiap perangkat, semua fitur AR disimpan dalam aplikasi yang disebut Layanan Google Play untuk AR yang diupdate secara terpisah oleh Play Store. Aplikasi Android yang menggunakan fitur AR berkomunikasi dengan Layanan Google Play untuk AR menggunakan ARCore SDK. Aplikasi yang mendukung fitur AR dapat dikonfigurasi dengan dua cara: AR Diperlukan dan AR Opsional. Penetapan ini menentukan cara aplikasi berinteraksi dengan Layanan Google Play untuk aplikasi AR.

Aplikasi AR Wajib tidak dapat berfungsi tanpa ARCore. Aplikasi ini memerlukan perangkat yang didukung ARCore yang telah menginstal Layanan Google Play untuk AR.

  • Google Play Store hanya akan menyediakan aplikasi yang Memerlukan AR di perangkat yang mendukung ARCore.
  • Saat pengguna menginstal aplikasi yang Memerlukan AR, Google Play Store akan otomatis menginstal Layanan Google Play untuk AR di perangkat mereka. Namun, aplikasi Anda tetap harus melakukan pemeriksaan runtime tambahan jika Layanan Google Play untuk AR sudah tidak berlaku atau telah di-uninstal secara manual.

Aplikasi AR Opsional menggunakan ARCore untuk meningkatkan fungsi yang ada. Aplikasi ini memiliki fitur AR opsional yang hanya diaktifkan di perangkat yang didukung ARCore yang telah menginstal Layanan Google Play untuk AR.

  • Aplikasi Opsional AR dapat diinstal dan dijalankan di perangkat yang tidak mendukung ARCore.
  • Saat pengguna menginstal aplikasi AR Optional, Google Play Store tidak akan otomatis menginstal Layanan Google Play untuk AR di perangkat.
AR DiperlukanAR Opsional
Penggunaan Fitur AR Aplikasi Anda memerlukan ARCore untuk fungsi dasar. ARCore meningkatkan fungsionalitas aplikasi Anda. Aplikasi Anda dapat berjalan tanpa dukungan ARCore.
Visibilitas Play Store Aplikasi Anda hanya tercantum di Play Store pada perangkat yang mendukung ARCore. Aplikasi Anda mengikuti prosedur listingan normal.
Metode penginstalan Layanan Google Play untuk AR Play Store menginstal Layanan Google Play untuk AR bersama aplikasi Anda. Aplikasi Anda menggunakan ArCoreApk.requestInstall() untuk mendownload dan menginstal ARCore.
Persyaratan minSdkVersion Android Android 7.0 (Level API 24) Android 4.4 (API Level 19), meskipun menjalankan fungsi AR apa pun memerlukan minimal Android 7.0 (API Level 24)
Harus menggunakan ArCoreApk_checkAvailability() atau ArCoreApk_checkAvailabilityAsync() untuk memeriksa dukungan ARCore dan status penginstalan
Harus menggunakan ArCoreApk.requestInstall() menginstal Layanan Google Play untuk AR

Agar aplikasi Anda menjadi AR Wajib atau AR Opsional, update AndroidManifest.xml untuk menyertakan entri berikut:

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

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

Kemudian, ubah build.gradle aplikasi Anda untuk menentukan minSdkVersion minimal 24:

 android {
     defaultConfig {
         …
         minSdkVersion 24
     }
 }

Menambahkan dependensi build

  1. Pastikan file build.gradle project Anda menyertakan repositori Maven Google.

    allprojects {
        repositories {
            google()
            …
        }
    }
    
  2. Tambahkan tugas kustom ke file build.gradle modul Anda untuk mengekstrak library native yang disertakan dari file AAR ARCore. Dengan begitu, keduanya dapat direferensikan langsung dalam project C atau C++.

  3. Di direktori app/build, tentukan variabel ke direktori tempat library native akan diekstrak.

  4. Buat konfigurasi Gradle untuk menyimpan tugas ekstraksi dan data.

    /*
    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. Buat tugas untuk menyalin library native dari file AAR, lalu tambahkan ke dependensi build.

    // 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. Konfigurasikan flag build native untuk meneruskan lokasi ke alat build eksternal.

    // 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. Tambahkan dependensi untuk library Java dan native.

    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. Mereferensikan library native di 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}
    )
    

Menjalankan pemeriksaan runtime

Selama runtime, lakukan hal berikut untuk memastikan fitur AR di aplikasi Anda berjalan lancar.

Memeriksa apakah ARCore didukung

Aplikasi AR Wajib dan AR Opsional harus menggunakan ArCoreApk_checkAvailability() atau ArCoreApk_checkAvailabilityAsync() untuk menentukan apakah perangkat saat ini mendukung ARCore. Pada perangkat yang tidak mendukung ARCore, aplikasi harus menonaktifkan fungsi terkait AR dan menyembunyikan elemen UI terkait.

Aplikasi Android NDK dapat menggunakan class ArCoreApk Java untuk memeriksa kompatibilitas dan mengelola penginstalan di C ARCore Session API native. Bergantung pada struktur aplikasi Anda, hal ini mungkin lebih mudah daripada menggunakan fungsi ArCoreApk_ karena banyaknya penanganan error dan interaksi antarmuka pengguna yang terlibat.

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.
  }
}
Meskipun Layanan Google Play untuk AR diinstal bersama aplikasi yang Diperlukan AR Anda, pengguna dengan perangkat yang tidak didukung dapat menginstalnya dari sumber eksternal. Menggunakan ArCoreApk_checkAvailability() atau ArCoreApk_checkAvailabilityAsync() untuk memeriksa dukungan ARCore memastikan pengalaman yang konsisten.

ArCoreApk_checkAvailability() mungkin perlu mengkueri resource jaringan untuk menentukan apakah perangkat mendukung ARCore. Selama waktu ini, AR_AVAILABILITY_UNKNOWN_CHECKING akan ditampilkan. Untuk mengurangi latensi dan pop-in yang dirasakan, aplikasi harus memanggil ArCoreApk_checkAvailability() sekali di awal siklus prosesnya untuk memulai kueri, mengabaikan nilai yang ditampilkan. Dengan cara ini, hasil yang di-cache akan segera tersedia saat elemen UI yang masuk dengan AR mungkin ditampilkan.

Memeriksa apakah Layanan Google Play untuk AR telah diinstal

Aplikasi AR Diperlukan dan AR Optional harus digunakan ArCoreApk.requestInstall() sebelum membuat sesi ARCore untuk memeriksa apakah versi Layanan Google Play yang kompatibel untuk AR (masih) sudah diinstal dan untuk memastikan bahwa semua data profil perangkat ARCore yang diperlukan telah didownload.

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

Mematuhi Persyaratan Privasi Pengguna

Untuk memublikasikan aplikasi di Play Store, pastikan aplikasi Anda mematuhi Persyaratan Privasi Pengguna ARCore.

Langkah selanjutnya