אפשר להפעיל AR כדי להשתמש בתכונות של מציאות רבודה באפליקציה החדשה או הקיימת.
הגדרת האפליקציה כחובה עם AR או כאופציונלית עם AR
כדי לחסוך במקום במכשירים ספציפיים, כל תכונות ה-AR מאוחסנות באפליקציה בשם Google Play Services למציאות רבודה שמתעדכנת בנפרד על ידי חנות Play. אפליקציות ל-Android שמשתמשות בתכונות AR מתקשרות עם Google Play Services למציאות רבודה באמצעות ARCore SDK. אפשר להגדיר אפליקציה שתומכת בתכונות AR בשתי דרכים: חובה להשתמש ב-AR ואופציונלי להשתמש ב-AR. הסיווג הזה קובע את אופן האינטראקציה של האפליקציה עם אפליקציית 'Google Play Services למציאות רבודה'.
אפליקציה דרושה ל-AR לא יכולה לפעול בלי ARCore. כדי להשתמש בה, צריך מכשיר נתמך של ARCore שבו מותקנים שירותי Google Play למציאות רבודה.
- אפליקציות עם דרישת AR יהיו זמינות בחנות Google Play רק במכשירים שתומכים ב-ARCore.
- כשמשתמשים מתקינים אפליקציה שנדרשת ל-AR, חנות Google Play תתקין במכשיר שלהם באופן אוטומטי את שירותי Google Play למציאות רבודה. עם זאת, האפליקציה עדיין צריכה לבצע בדיקות נוספות בסביבת זמן הריצה למקרה ש-Google Play Services for AR לא מעודכן או שהושבת באופן ידני.
אפליקציה עם אפשרות לשימוש ב-AR משתמשת ב-ARCore כדי לשפר את הפונקציונליות הקיימת. יש בה תכונות AR אופציונליות שמופעלות רק במכשירים נתמכים של ARCore שמותקן בהם Google Play Services למציאות רבודה.
- אפשר להתקין ולהפעיל אפליקציות אופציונליות ב-AR במכשירים שלא תומכים ב-ARCore.
- כשמשתמשים מתקינים אפליקציה אופציונלית עם AR, לא מתבצעת התקנה אוטומטית של Google Play Services למציאות רבודה במכשיר דרך חנות Google Play.
נדרש AR | AR אופציונלי | |
---|---|---|
שימוש בתכונת ה-AR | כדי שהאפליקציה תוכל לפעול באופן בסיסי, היא צריכה את ARCore. | בעזרת ARCore אפשר לשפר את הפונקציונליות של האפליקציה. האפליקציה יכולה לפעול בלי תמיכה ב-ARCore. |
הרשאות הגישה לחנות Play | האפליקציה שלך מופיעה בחנות Play רק במכשירים שתומכים ב-ARCore. | האפליקציה עומדת בנוהלי ההוספה הרגילים. |
שיטת ההתקנה של Google Play Services למציאות רבודה | חנות Play מתקינה את Google Play Services למציאות רבודה לצד האפליקציה שלכם. | האפליקציה משתמשת ב-ArCoreApk.requestInstall() כדי להוריד ולהתקין את ARCore. |
דרישות עבור Android minSdkVersion |
Android 7.0 (רמת API 24) | Android 4.4 (רמת API 19), אם כי הפעלה של פונקציונליות AR נדרשת לפחות Android 7.0 (רמת API 24) |
חובה להשתמש ב-ArCoreApk_checkAvailability() או ב-ArCoreApk_checkAvailabilityAsync() כדי לבדוק את התמיכה ב-ARCore וסטטוס ההתקנה שלו
|
||
צריך להשתמש ב-
ArCoreApk.requestInstall()
כדי להתקין את שירותי Google Play למציאות רבודה |
כדי להגדיר את האפליקציה כחובה או כ-AR אופציונלי, צריך לעדכן את AndroidManifest.xml
כך שיכלול את הרשומות הבאות:
חובה להשתמש ב-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 אופציונלי
<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>
לאחר מכן, צריך לשנות את build.gradle
של האפליקציה כך שיציין minSdkVersion
של 24
לפחות:
android {
defaultConfig {
…
minSdkVersion 24
}
}
הוספת יחסי תלות של build
מוודאים שקובץ
build.gradle
של הפרויקט כולל את מאגר Maven של Google.allprojects { repositories { google() … } }
מוסיפים משימה מותאמת אישית לקובץ
build.gradle
של המודול כדי לחלץ ספריות מקומיות כלולות מקובץ ה-AAR של ARCore. כך אפשר להפנות אליהן ישירות בפרויקט C או C++.בספרייה
app/build
, מגדירים משתנה של הספרייה שאליה יחולצו ספריות ה-Native.ליצור הגדרה של Gradle כדי לאחסן את משימות הנתונים והחילוץ.
/* 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 }
יוצרים משימה כדי להעתיק את הספריות המקוריות מקובץ ה-AAR, ולהוסיף אותו ליחסי התלות של ה-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) } }
הגדרת הדגלים המקוריים של ה-build כדי להעביר את המיקומים לכלי ה-build החיצוניים.
// 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" } }
מוסיפים את יחסי התלות של הספריות של Java ושל הספריות המקומיות.
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' ... }
בודקים את הספריות המקומיות ב-
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} )
ביצוע בדיקות בסביבת זמן ריצה
במהלך זמן הריצה, כדאי לבצע את הפעולות הבאות כדי לוודא שתכונות ה-AR באפליקציה פועלות בצורה חלקה.
איך בודקים אם המכשיר תומך ב-ARCore
כדי לקבוע אם המכשיר הנוכחי תומך ב-ARCore, צריך להשתמש ב-ArCoreApk_checkAvailability()
או ב-ArCoreApk_checkAvailabilityAsync()
גם באפליקציות שנדרשות ב-AR וגם באפליקציות ל-AR אופציונלית. במכשירים שלא תומכים ב-ARCore, האפליקציות צריכות להשבית את הפונקציונליות שקשורה ל-AR ולהסתיר את רכיבי ממשק המשתמש המשויכים.
אפליקציה של Android NDK עשויה להשתמש בכיתה Java ArCoreApk
כדי לבדוק את התאימות ולנהל את ההתקנה ב-ARCore Session API המקורי ב-C. בהתאם למבנה של האפליקציה, יכול להיות שזו תהיה דרך קלה יותר מאשר להשתמש בפונקציות ArCoreApk_
, בגלל הכמות הגדולה של טיפול בטעויות ואינטראקציה עם ממשק המשתמש.
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()
או ArCoreApk_checkAvailabilityAsync()
, חוויית השימוש תהיה עקבית.
יכול להיות ש-ArCoreApk_checkAvailability()
יצטרך לשלוח שאילתה למשאבי רשת כדי לקבוע אם המכשיר תומך ב-ARCore. במהלך פרק הזמן הזה, הפונקציה תחזיר את הערך AR_AVAILABILITY_UNKNOWN_CHECKING
. כדי לצמצם את זמן האחזור המשוער ואת הזמן שחולף מהקליק להצגת המודעה, מומלץ לאפליקציות להפעיל את ArCoreApk_checkAvailability()
פעם אחת בשלב מוקדם במחזור החיים שלה כדי להתחיל את השאילתה, תוך התעלמות מהערך המוחזר. כך, תוצאה ששמורה במטמון תהיה זמינה באופן מיידי כשרכיב ממשק משתמש שמוצג ב-AR עשוי להופיע.
איך בודקים אם אפליקציית Google Play Services למציאות רבודה מותקנת
גם אפליקציות עם דרישה ל-AR וגם אפליקציות עם אפשרות ל-AR חייבות להשתמש ב-ArCoreApk.requestInstall()
לפני יצירת סשן ARCore כדי לבדוק אם (עדיין) מותקנת גרסה תואמת של שירותי Google Play למציאות רבודה, וכדי לוודא שכל נתוני פרופיל המכשיר הנדרשים ל-ARCore הורדתם.
// 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.
}
ציות לדרישות בנושא פרטיות המשתמשים
כדי לפרסם את האפליקציה בחנות Play, צריך לוודא שהיא תואמת ל-ARCore דרישות בנושא פרטיות המשתמשים.