Habilitar EasyAR en aplicaciones de Android
Este capítulo explica cómo configurar un proyecto de Android para EasyAR en Android Studio, sin utilizar motores 3D como Unity.
Preparativos
Antes de comenzar, necesitarás:
- La última versión de Android Studio
- JDK 8/11/17
- Android Gradle Plugin 4.0 o superior
- Android NDK r28 o superior
- Obtener una licencia de EasyAR
- Seleccionar una versión de EasyAR Sense y descargarla
Nota
No todos los dispositivos Android admiten todas las funciones de EasyAR Sense. Algunas características requieren hardware adicional o configuraciones específicas. Consulta las listas de dispositivos compatibles para cada función.
Importar EasyAR Sense para Android
Esta sección explica cómo importar el SDK de EasyAR Sense en un proyecto de Android sin Unity. EasyAR Sense ofrece APIs en Java y C++, además de soporte para Kotlin, permitiéndote desarrollar en el lenguaje que prefieras.
Dado que la configuración puede variar entre IDEs, aquí solo se describe el método típico basado en Android Studio + Gradle.
Selección del modo de uso de API
EasyAR Sense para Android ofrece dos modos de uso de API:
- Usar solo Java API
- Usar Java y C++ API
Seleccione uno para configurar según los requisitos del proyecto.
Usar solo Java API
Cuando se usa solo Java API de EasyAR, no es necesario configurar NDK.
Coloque EasyAR.aar en app/libs/ o en el directorio especificado por Gradle.
Usar Java y C++ API
Cuando se requiere usar tanto C++ API como Java API de EasyAR, es necesario configurar la dependencia Java y las bibliotecas nativas.
Archivos de capa Java
Coloque
EasyAR.jarenapp/libs/o en la ruta especificada por Gradle.Bibliotecas nativas (
.so)Coloque las bibliotecas nativas proporcionadas por EasyAR por ABI en la siguiente ruta o en la ruta especificada por Gradle.
app/src/main/jniLibs/ ├── armeabi-v7a/ │ └── libEasyAR.so └── arm64-v8a/ └── libEasyAR.soArchivos de cabecera C++
Copie la carpeta
easyardel directorioincludeen el SDK de EasyAR a la siguiente ruta o a la ruta especificada porAndroid.mk/CMakeLists.txt.app/src/main/jni/easyar/La ruta de los archivos de cabecera debe especificarse explícitamente en
Android.mkoCMakeLists.txt.
Explicación de configuración de Gradle
Cuando use C++ API, debe habilitar Native Build en Gradle, no se requiere configuración si solo usa Java API. Puede usar ndk-build (Android.mk) para configurar.
Agregue en app/build.gradle:
android {
externalNativeBuild {
ndkBuild {
path "src/main/jni/Android.mk"
}
}
}
Si usa CMake, consulte la documentación oficial de Google para configurar.
Configuración de NDK
Declarar EasyAR como biblioteca precompilada
include $(CLEAR_VARS)
# Asegúrese de que esta ruta apunte al directorio ABI actual en jniLibs
LOCAL_PATH := $(LOCAL_PATH_TOP)/../jniLibs/$(TARGET_ARCH_ABI)
LOCAL_MODULE := EasyAR
LOCAL_SRC_FILES := libEasyAR.so
include $(PREBUILT_SHARED_LIBRARY)
Vincular EasyAR con bibliotecas del sistema
LOCAL_SHARED_LIBRARIES += EasyAR
# OpenGL ES (requerido)
LOCAL_LDLIBS += -lGLESv3
EasyAR requiere al menos OpenGL ES 2.0, se recomienda OpenGL ES 3.0 (GLESv3).
Especificar arquitectura ABI
Especifique explícitamente ABI en app/build.gradle para evitar empaquetar arquitecturas inválidas:
android {
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
}
Si solo necesita una arquitectura, mantenga únicamente la correspondiente.
Configuración de permisos en AndroidManifest
EasyAR Sense requiere los siguientes permisos; su ausencia causará fallos de inicialización o pantalla negra:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
Ejemplo completo:
<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>
Inicializar EasyAR
Llame a Engine.initialize durante el inicio de la aplicación para inicializar.
Ejemplo (Java):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Engine.initialize(this, key);
}
Nota
La inicialización debe completarse antes de usar cualquier función relacionada con EasyAR.
Configuración adicional
En la plataforma Android, dependiendo de la versión del sistema y las funciones utilizadas, podrían requerirse las siguientes configuraciones y restricciones.
Configuración de uso de ARCore
Si usas ARCore en tu proyecto, consulta la documentación oficial para completar la configuración relacionada en AndroidManifest.xml y build.gradle.
Además, antes de inicializar EasyAR, debes cargar explícitamente la biblioteca nativa de ARCore:
System.loadLibrary("arcore_sdk_c");
Nota
Al usar versiones de ARCore anteriores a v1.19.0, no se podrá detectar en Android 11.
Esto se debe a las restricciones de visibilidad de aplicaciones introducidas en Android 11, que requieren declarar el nombre del paquete de ARCore en AndroidManifest.xml.
<queries>
<package android:name="com.google.ar.core" />
</queries>
Configuración de ofuscación (ProGuard)
Si habilitas la ofuscación de código Java, debes excluir el espacio de nombres cn.easyar.
EasyAR Sense utiliza reflexión de nombres de clase para obtener tipos Java a través de JNI durante el tiempo de ejecución.
Si las clases bajo cn.easyar se ofuscan o renombran, puede provocar un comportamiento indefinido.
Reglas básicas
-keep class cn.easyar.** { *; }
Reglas precisas recomendadas
-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
Estas reglas de ProGuard ya están incluidas en la biblioteca aar de EasyAR, por lo que generalmente no es necesario configurarlas nuevamente.
Almacenamiento delimitado
El mecanismo Scoped Storage (Almacenamiento delimitado) introducido desde Android 10 afecta a algunas API que dependen de rutas de archivos. Esto se debe a que las rutas no multimedia (como directorios personalizados) en /sdcard no son directamente accesibles en Android 10. En EasyAR, esto afecta a las API que requieren pasar rutas de archivos (como la grabación de pantalla), las cuales no pueden acceder directamente a rutas multimedia en Android 10, pero funcionan correctamente en Android 11.
Soluciones:
Opción simple (Android 10) Deshabilita Scoped Storage en
AndroidManifest.xml:<application android:requestLegacyExternalStorage="true" ... > </application>Opción recomendada
- Usar solo el almacenamiento interno de la aplicación
- O intercambiar datos con rutas multimedia a través de MediaStore
Android Gradle Plugin y NDK
Desde NDK r22, se usa el enlazador LLD por defecto y requiere la herramienta llvm-strip; esto es incompatible con la herramienta strip integrada en versiones de Android Gradle Plugin inferiores a 4.0.
Soluciones:
- Actualizar a Android Gradle Plugin 4.0 o superior
- O usar
doNoStripenpackagingOptionspara deshabilitar el striping (no recomendado)
Límite de longitud de ruta en Windows
En sistemas Windows, si la longitud de la ruta absoluta de cualquier archivo en el proyecto (incluyendo archivos temporales generados durante la construcción) supera los 260 caracteres, puede causar fallos en la construcción de Android Studio.
Soluciones:
- Ubicar el proyecto en una ruta más corta (por ejemplo,
C:\user\project) - Evitar niveles de directorios excesivamente profundos
Lecturas adicionales
- Dispositivos compatibles con EasyAR Mega
- Dispositivos compatibles con seguimiento de imágenes
- Dispositivos compatibles con seguimiento de movimiento
- Dispositivos compatibles con mapas espaciales dispersos
- Dispositivos compatibles con mapas espaciales densos
- Relación entre seguimiento de movimiento y otros módulos de EasyAR