Mengaktifkan fitur EasyAR di aplikasi Android
Bab ini menjelaskan cara mengkonfigurasi proyek Android EasyAR di Android Studio tanpa menggunakan mesin 3D seperti Unity.
Persiapan
Sebelum memulai, Anda perlu menyiapkan:
- Versi terbaru Android Studio
- JDK 8/11/17
- Android Gradle Plugin 4.0 atau lebih tinggi
- Android NDK r28 atau lebih tinggi
- Mendapatkan lisensi otorisasi EasyAR
- Pilih versi rilis EasyAR Sense dan unduh
Catatan
Tidak semua perangkat Android mendukung semua fitur EasyAR Sense. Beberapa fitur memerlukan perangkat keras tambahan atau konfigurasi khusus. Silakan periksa daftar perangkat yang didukung untuk fitur terkait.
Mengimpor EasyAR Sense untuk Android
Bagian ini menjelaskan cara mengimpor SDK EasyAR Sense di proyek Android non-Unity. EasyAR Sense menyediakan API Java dan C++, serta mendukung Kotlin, memungkinkan Anda menggunakan bahasa yang paling nyaman.
Karena konfigurasi IDE berbeda-beda, di sini hanya dijelaskan metode konfigurasi tipikal berbasis Android Studio + Gradle.
Cara menggunakan API
EasyAR Sense for Android menyediakan dua cara penggunaan API:
- Hanya menggunakan Java API
- Menggunakan Java dan C++ API
Silakan pilih salah satu untuk dikonfigurasi sesuai kebutuhan proyek.
Hanya menggunakan Java API
Saat hanya menggunakan Java API dari EasyAR, tidak perlu mengkonfigurasi NDK.
Letakkan EasyAR.aar ke dalam app/libs/ atau direktori yang ditentukan oleh Gradle.
Menggunakan Java dan C++ API
Saat perlu menggunakan C++ API EasyAR secara bersamaan, perlu mengkonfigurasi dependensi Java dan library native.
File lapisan Java
Letakkan
EasyAR.jarke dalamapp/libs/atau jalur yang ditentukan oleh Gradle.Library native (
.so)Letakkan library native yang disediakan EasyAR sesuai ABI ke jalur berikut atau jalur yang ditentukan oleh Gradle.
app/src/main/jniLibs/ ├── armeabi-v7a/ │ └── libEasyAR.so └── arm64-v8a/ └── libEasyAR.soFile header C++
Salin folder
easyardari direktoriincludedi SDK EasyAR ke jalur berikut atau jalur yang ditentukan olehAndroid.mk/CMakeLists.txt.app/src/main/jni/easyar/Jalur file header perlu ditentukan secara eksplisit di
Android.mkatauCMakeLists.txt.
Penjelasan konfigurasi Gradle
Saat Anda menggunakan C++ API, perlu mengaktifkan Native Build di Gradle, hanya menggunakan Java API tidak perlu dikonfigurasi. Anda dapat menggunakan ndk-build (Android.mk) untuk konfigurasi.
Tambahkan di app/build.gradle:
android {
externalNativeBuild {
ndkBuild {
path "src/main/jni/Android.mk"
}
}
}
Jika menggunakan CMake, silakan merujuk ke dokumentasi resmi Google untuk konfigurasi.
Konfigurasi NDK
Mendeklarasikan EasyAR sebagai library prebuilt
include $(CLEAR_VARS)
# Pastikan jalur ini menunjuk ke direktori ABI saat ini di jniLibs
LOCAL_PATH := $(LOCAL_PATH_TOP)/../jniLibs/$(TARGET_ARCH_ABI)
LOCAL_MODULE := EasyAR
LOCAL_SRC_FILES := libEasyAR.so
include $(PREBUILT_SHARED_LIBRARY)
Menghubungkan EasyAR dengan library sistem
LOCAL_SHARED_LIBRARIES += EasyAR
# OpenGL ES (diperlukan)
LOCAL_LDLIBS += -lGLESv3
EasyAR memerlukan minimal OpenGL ES 2.0, direkomendasikan menggunakan OpenGL ES 3.0 (GLESv3).
Menentukan arsitektur ABI
Tentukan ABI secara eksplisit di app/build.gradle, untuk menghindari arsitektur tidak valid yang ikut terbundel:
android {
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
}
Jika hanya memerlukan satu arsitektur, cukup pertahankan item yang sesuai.
Konfigurasi izin AndroidManifest
EasyAR Sense memerlukan izin berikut, jika tidak ada akan menyebabkan inisialisasi gagal atau layar hitam:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
Contoh lengkap:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.easyar.samples.helloar">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
Menginisialisasi EasyAR
Panggil Engine.initialize saat aplikasi dimulai untuk inisialisasi.
Contoh (Java):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Engine.initialize(this, key);
}
Catatan
Inisialisasi harus diselesaikan sebelum menggunakan fungsi terkait EasyAR.
Konfigurasi tambahan
Di platform Android, tergantung versi sistem dan fitur yang digunakan, mungkin perlu memperhatikan konfigurasi dan batasan berikut.
Konfigurasi penggunaan ARCore
Jika proyek menggunakan ARCore, silakan merujuk ke dokumentasi resminya untuk menyelesaikan konfigurasi terkait di AndroidManifest.xml dan build.gradle.
Selain itu, sebelum menginisialisasi EasyAR, pustaka asli ARCore harus dimuat secara eksplisit:
System.loadLibrary("arcore_sdk_c");
Catatan
Saat menggunakan versi ARCore sebelum v1.19.0, tidak akan terdeteksi di Android 11.
Ini disebabkan oleh pembatasan visibilitas aplikasi yang diperkenalkan mulai Android 11, yang mengharuskan deklarasi nama paket ARCore di AndroidManifest.xml.
<queries>
<package android:name="com.google.ar.core" />
</queries>
Konfigurasi pengaburan (ProGuard)
Jika pengaburan kode Java diaktifkan, perlu mengecualikan ruang nama cn.easyar.
EasyAR Sense menggunakan refleksi nama kelas untuk mendapatkan tipe Java melalui JNI saat runtime.
Jika kelas di bawah cn.easyar diaburkan atau diganti namanya, dapat menyebabkan perilaku tidak terdefinisi.
Aturan dasar
-keep class cn.easyar.** { *; }
Aturan presisi yang direkomendasikan
-dontwarn javax.annotation.Nonnull
-dontwarn javax.annotation.Nullable
-keepattributes *Annotation*
-keep class cn.easyar.RefBase { native <methods>; }
-keepclassmembers class cn.easyar.* {
<fields>;
protected <init>(long, cn.easyar.RefBase);
}
-keep,allowobfuscation interface cn.easyar.FunctorOf* { *; }
-keep class cn.easyar.Buffer { native <methods>; }
-keep class cn.easyar.Engine { native <methods>; }
-keep class cn.easyar.JniUtility { native <methods>; }
-keep class cn.easyar.engine.** { *; }
-keep class cn.easyar.CameraParameters
-keep interface cn.easyar.FunctorOfVoidFromInputFrame
Aturan ProGuard di atas telah disertakan dalam pustaka aar EasyAR, sehingga biasanya tidak perlu dikonfigurasi ulang.
Scoped Storage
Mekanisme Scoped Storage (penyimpanan terpartisi) yang diperkenalkan mulai Android 10, akan memengaruhi beberapa API yang bergantung pada jalur file. Ini disebabkan oleh ketidakmampuan mengakses jalur non-media di bawah /sdcard (seperti direktori kustom) secara langsung di Android 10. Dampaknya pada EasyAR terlihat pada beberapa API yang memerlukan jalur file sebagai masukan (seperti perekaman layar) di Android 10 tidak mendukung penulisan/ pembacaan langsung ke jalur media, tetapi berfungsi normal di Android 11.
Solusi:
Opsi sederhana (Android 10) Nonaktifkan Scoped Storage di
AndroidManifest.xml:<application android:requestLegacyExternalStorage="true" ... > </application>Opsi yang direkomendasikan
- Hanya gunakan penyimpanan internal aplikasi
- Atau bertukar data dengan jalur media melalui MediaStore
Android Gradle Plugin dan NDK
Sejak NDK r22, linker LLD digunakan secara default dan memerlukan llvm-strip; ini tidak kompatibel dengan alat strip bawaan versi Android Gradle Plugin di bawah 4.0.
Solusi:
- Tingkatkan ke Android Gradle Plugin 4.0 atau lebih tinggi
- Atau gunakan
doNotStripdipackagingOptionsuntuk menonaktifkan stripping (tidak direkomendasikan)
Batasan panjang jalur Windows
Di sistem Windows, jika panjang jalur absolut dari file apa pun dalam proyek (termasuk file sementara yang dihasilkan selama proses pembangunan) melebihi 260 karakter, dapat menyebabkan pembangunan Android Studio gagal.
Solusi:
- Tempatkan proyek di jalur yang lebih pendek (misalnya
C:\user\project) - Hindari hierarki direktori yang terlalu dalam