Activer les fonctions EasyAR dans une application Android
Ce chapitre présente comment configurer un projet Android EasyAR dans Android Studio sans utiliser de 3D engine comme Unity.
Préparation
Avant de commencer, vous devez préparer:
La dernière version de Android Studio
JDK 8/11/17
Android Gradle Plugin 4.0 ou supérieur
Android NDK r28 ou supérieur
Obtenir une licence d'autorisation EasyAR
Sélectionner une version de publication et télécharger EasyAR Sense
Note
Tous les appareils Android ne prennent pas en charge toutes les fonctions de EasyAR Sense. Certaines fonctions dépendent de hardware ou configurations supplémentaires. Pour les détails, consultez la liste des appareils pris en charge par la fonction correspondante.
Importer EasyAR Sense for Android
Cette section présente comment importer EasyAR Sense SDK dans un projet Android non Unity. EasyAR Sense fournit des API Java et C++ et prend en charge Kotlin, vous pouvez donc développer avec le langage que vous maîtrisez le mieux.
Comme les méthodes de configuration peuvent varier selon les IDE, seule la méthode de configuration typique basée sur Android Studio + Gradle est décrite ici.
Choisir le mode d'utilisation de l'API
EasyAR Sense for Android fournit deux modes d'utilisation de l'API :
- Utiliser uniquement la Java API
- Utiliser les API Java et C++
Choisissez l'une des deux configurations selon les besoins du projet.
Utiliser uniquement la Java API
Lorsque seule la Java API d'EasyAR est utilisée, aucune configuration NDK n'est requise.
Placez EasyAR.aar dans app/libs/ ou dans le répertoire spécifié par Gradle.
Utiliser les API Java et C++
Lorsque vous devez également utiliser la C++ API d'EasyAR, vous devez configurer à la fois les dépendances Java et les bibliothèques natives.
Fichiers de la couche Java
Placez
EasyAR.jardansapp/libs/ou dans le chemin spécifié par Gradle.Bibliothèques natives (
.so)Placez les bibliothèques natives fournies par EasyAR selon l'ABI dans le chemin suivant ou dans le chemin spécifié par Gradle.
app/src/main/jniLibs/ ├── armeabi-v7a/ │ └── libEasyAR.so └── arm64-v8a/ └── libEasyAR.soFichiers d'en-tête C++
Copiez le dossier
easyarsitué sous le répertoireincludedans EasyAR SDK vers le chemin suivant, ou vers le chemin spécifié parAndroid.mk/CMakeLists.txt.app/src/main/jni/easyar/Le chemin des fichiers d'en-tête doit être explicitement spécifié dans
Android.mkouCMakeLists.txt.
Notes de configuration Gradle
Lorsque vous utilisez la C++ API, vous devez activer Native Build dans Gradle. Si vous utilisez uniquement la Java API, aucune configuration n'est requise. Vous pouvez configurer cela avec ndk-build (Android.mk).
Ajoutez ce qui suit dans app/build.gradle :
android {
externalNativeBuild {
ndkBuild {
path "src/main/jni/Android.mk"
}
}
}
Si vous utilisez CMake, consultez la documentation officielle de Google pour la configuration.
Configuration NDK
Déclarer EasyAR comme bibliothèque précompilée
include $(CLEAR_VARS)
# Make sure this path points to the current ABI directory in jniLibs
LOCAL_PATH := $(LOCAL_PATH_TOP)/../jniLibs/$(TARGET_ARCH_ABI)
LOCAL_MODULE := EasyAR
LOCAL_SRC_FILES := libEasyAR.so
include $(PREBUILT_SHARED_LIBRARY)
Lier EasyAR et les bibliothèques système
LOCAL_SHARED_LIBRARIES += EasyAR
# OpenGL ES (required)
LOCAL_LDLIBS += -lGLESv3
EasyAR nécessite au minimum OpenGL ES 2.0 à l'exécution. OpenGL ES 3.0 (
GLESv3) est recommandé.
Spécifier les architectures ABI
Spécifiez explicitement ABI dans app/build.gradle afin d'éviter d'empaqueter des architectures invalides :
android {
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
}
Si une seule architecture est nécessaire, conservez uniquement l'élément correspondant.
Configuration des permissions AndroidManifest
EasyAR Sense nécessite les permissions suivantes. Leur absence entraînera un échec d'initialisation ou un écran noir :
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
Exemple complet :
<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>
Initialiser EasyAR
Appelez Engine.initialize au démarrage de l'application pour effectuer l'initialisation.
Exemple (Java) :
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Engine.initialize(this, key);
}
Note
L'initialisation doit être terminée avant d'utiliser les fonctionnalités liées à EasyAR.
Configuration supplémentaire
Sur la plateforme Android, selon la version du système et les fonctions utilisées, il peut également être nécessaire de prêter attention aux configurations et limitations suivantes.
Configurer l'utilisation d'ARCore
Si le projet utilise ARCore, consultez sa documentation officielle pour terminer la configuration liée à AndroidManifest.xml et build.gradle.
De plus, avant d'initialiser EasyAR, vous devez charger explicitement la native library d'ARCore :
System.loadLibrary("arcore_sdk_c");
Note
Lors de l'utilisation de versions antérieures à ARCore v1.19.0, ARCore ne pourra pas être détecté sur Android 11.
Cela est dû au fait qu'Android 11 a introduit des restrictions d'app visibility, et le nom du package ARCore doit être déclaré dans AndroidManifest.xml.
<queries>
<package android:name="com.google.ar.core" />
</queries>
Configurer obfuscation (ProGuard)
Si obfuscation est activée pour le code Java, vous devez exclure le namespace cn.easyar.
EasyAR Sense utilise à runtime class name reflection pour obtenir Java types via JNI.
Si les classes sous cn.easyar sont obfuscated ou renommées, undefined behavior peut se produire.
Règles de base
-keep class cn.easyar.** { *; }
Règles précises recommandées
-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
Les règles ProGuard ci-dessus sont déjà incluses dans la aar library d'EasyAR, il n'est donc généralement pas nécessaire de les configurer à nouveau.
Scoped Storage
Le mécanisme Scoped Storage introduit à partir d'Android 10 affecte certaines API qui dépendent des file paths. Cela est dû au fait que les non-media paths sous /sdcard, comme les répertoires personnalisés, ne peuvent pas être accessibles directement sur Android 10. L'impact sur EasyAR se manifeste par le fait que certaines API nécessitant des file paths, comme screen recording, ne prennent pas en charge la lecture et l'écriture directes des media paths sur Android 10, mais fonctionnent normalement sur Android 11.
Solutions :
Solution simple (Android 10) Désactiver Scoped Storage dans
AndroidManifest.xml:<application android:requestLegacyExternalStorage="true" ... > </application>Solution recommandée
- Utiliser uniquement app internal storage
- Ou échanger les données avec les media paths via MediaStore
Android Gradle Plugin et NDK
Depuis NDK r22, le linker LLD est utilisé par défaut et doit être utilisé avec llvm-strip ; cela est incompatible avec l'outil strip intégré dans Android Gradle Plugin avant la version 4.0.
Solutions :
- Mettre à niveau vers Android Gradle Plugin 4.0 ou supérieur
- Ou utiliser
doNotStripdanspackagingOptionspour désactiver stripping (non recommandé)
Limite de longueur des chemins Windows
Sous Windows, si la longueur absolue du chemin de n'importe quel fichier du projet, y compris les fichiers temporaires générés pendant le build, dépasse 260 caractères, le build Android Studio peut échouer.
Solutions :
- Placer le projet dans un chemin plus court, par exemple
C:\user\project - Éviter les niveaux de répertoires trop profonds