Habilitar recursos EasyAR em aplicativos Android
Este capítulo explica como configurar o projeto Android do EasyAR no Android Studio, sem usar motores 3D como Unity.
Preparação
Antes de começar, você precisará de:
- Versão mais recente do Android Studio
- JDK 8/11/17
- Android Gradle Plugin 4.0 ou superior
- Android NDK r28 ou superior
- Obter uma licença do EasyAR
- Escolher uma versão de lançamento do EasyAR Sense e fazer o download
Nota
Nem todos os dispositivos Android suportam todos os recursos do EasyAR Sense. Alguns recursos dependem de hardware ou configurações adicionais. Consulte as listas de dispositivos suportados para cada recurso específico.
Importar o EasyAR Sense para Android
Esta seção descreve como importar o SDK do EasyAR Sense em um projeto Android não-Unity. O EasyAR Sense oferece APIs Java e C++ e suporta Kotlin, permitindo que você desenvolva na linguagem que preferir.
Como as configurações podem variar entre diferentes IDEs, aqui focaremos no método de configuração típico baseado em Android Studio + Gradle.
Escolhendo o método de uso da API
O EasyAR Sense for Android oferece dois métodos de uso da API:
- Usar apenas a API Java
- Usar as APIs Java e C++
Escolha um deles para configurar de acordo com os requisitos do seu projeto.
Usar apenas a API Java
Ao usar apenas a API Java do EasyAR, não é necessário configurar o NDK.
Coloque o EasyAR.aar em app/libs/ ou no diretório especificado pelo Gradle.
Usar as APIs Java e C++
Ao precisar usar a API C++ do EasyAR simultaneamente, é necessário configurar a dependência Java e a biblioteca nativa.
Arquivos da camada Java
Coloque o
EasyAR.jaremapp/libs/ou no caminho especificado pelo Gradle.Bibliotecas nativas (
.so)Coloque as bibliotecas nativas fornecidas pelo EasyAR por ABI no seguinte caminho ou no caminho especificado pelo Gradle.
app/src/main/jniLibs/ ├── armeabi-v7a/ │ └── libEasyAR.so └── arm64-v8a/ └── libEasyAR.soArquivos de cabeçalho C++
Copie a pasta
easyardo diretórioincludeno SDK do EasyAR para o seguinte caminho ou para o caminho especificado peloAndroid.mk/CMakeLists.txt.app/src/main/jni/easyar/O caminho dos arquivos de cabeçalho deve ser explicitamente especificado no
Android.mkouCMakeLists.txt.
Explicação da configuração do Gradle
Ao usar a API C++, é necessário habilitar o Native Build no Gradle, usar apenas a API Java não requer configuração. Você pode usar o ndk-build (Android.mk) para configurar.
Adicione em app/build.gradle:
android {
externalNativeBuild {
ndkBuild {
path "src/main/jni/Android.mk"
}
}
}
Se usar o CMake, consulte a documentação oficial do Google para configurar.
Configuração do NDK
Declarando o EasyAR como biblioteca pré-compilada
include $(CLEAR_VARS)
# Garanta que este caminho aponte para o diretório ABI atual em jniLibs
LOCAL_PATH := $(LOCAL_PATH_TOP)/../jniLibs/$(TARGET_ARCH_ABI)
LOCAL_MODULE := EasyAR
LOCAL_SRC_FILES := libEasyAR.so
include $(PREBUILT_SHARED_LIBRARY)
Vinculando easyar com bibliotecas do sistema
LOCAL_SHARED_LIBRARIES += EasyAR
# OpenGL ES (obrigatório)
LOCAL_LDLIBS += -lGLESv3
O EasyAR requer pelo menos OpenGL ES 2.0, sendo OpenGL ES 3.0 (GLESv3) recomendado.
Especificando a arquitetura ABI
Especifique explicitamente a ABI em app/build.gradle para evitar o empacotamento de arquiteturas inválidas:
android {
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
}
Se precisar de apenas uma arquitetura, mantenha apenas o item correspondente.
Configuração de permissões no AndroidManifest
O EasyAR Sense requer as seguintes permissões; a ausência resultará em falha de inicialização ou tela preta:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
Exemplo 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>
Inicializando o EasyAR
Chame Engine.initialize durante a inicialização do aplicativo.
Exemplo (Java):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Engine.initialize(this, key);
}
Nota
A inicialização deve ser concluída antes de usar qualquer funcionalidade relacionada ao EasyAR.
Configurações adicionais
Na plataforma Android, dependendo da versão do sistema e dos recursos utilizados, as seguintes configurações e limitações também podem ser relevantes.
Configurar o uso do ARCore
Se o projeto usar ARCore, consulte a documentação oficial para completar as configurações relevantes no AndroidManifest.xml e build.gradle.
Além disso, antes de inicializar o EasyAR, é necessário carregar explicitamente a biblioteca nativa do ARCore:
System.loadLibrary("arcore_sdk_c");
Nota
Ao usar versões do ARCore anteriores à v1.19.0, o dispositivo Android 11 não será detectado.
Isso ocorre devido às restrições de visibilidade de aplicativos introduzidas no Android 11, exigindo a declaração do nome do pacote do ARCore no AndroidManifest.xml.
<queries>
<package android:name="com.google.ar.core" />
</queries>
Configurar ofuscação (ProGuard)
Se a ofuscação de código Java estiver ativada, é necessário excluir o namespace cn.easyar.
O EasyAR Sense usa reflexão de nomes de classe via JNI durante a execução para obter tipos Java.
Se as classes em cn.easyar forem ofuscadas ou renomeadas, pode causar comportamento indefinido.
Regras básicas
-keep class cn.easyar.** { *; }
Regras 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
Essas regras do ProGuard já estão incluídas na biblioteca aar do EasyAR, geralmente não sendo necessário reconfigurá-las.
Armazenamento com escopo
O mecanismo Scoped Storage (armazenamento particionado) introduzido no Android 10 afeta APIs que dependem de caminhos de arquivo. Isso ocorre porque caminhos não relacionados a mídia (como diretórios personalizados) em /sdcard não são diretamente acessíveis no Android 10. No EasyAR, isso impacta APIs que exigem caminhos de arquivo (como gravação de tela), que não funcionarão com caminhos de mídia diretos no Android 10, mas funcionarão no Android 11.
Soluções:
Solução simples (Android 10) Desative o Scoped Storage no
AndroidManifest.xml:<application android:requestLegacyExternalStorage="true" ... > </application>Solução recomendada
- Use apenas o armazenamento interno do aplicativo
- Ou troque dados com caminhos de mídia via MediaStore
Android Gradle Plugin e NDK
A partir do NDK r22, o vinculador LLD é usado por padrão, exigindo llvm-strip; isso é incompatível com a ferramenta strip integrada em versões do Android Gradle Plugin abaixo de 4.0.
Soluções:
- Atualize para Android Gradle Plugin 4.0 ou superior
- Ou use
doNotStripempackagingOptionspara desativar o stripping (não recomendado)
Limite de comprimento de caminho no Windows
No Windows, se o caminho absoluto de qualquer arquivo (incluindo arquivos temporários gerados durante a compilação) exceder 260 caracteres, o Android Studio pode falhar na compilação.
Soluções:
- Coloque o projeto em um caminho mais curto (ex:
C:\user\project) - Evite hierarquias de diretórios muito profundas
Leitura adicional
- Dispositivos suportados pelo EasyAR Mega
- Dispositivos suportados pelo rastreamento de imagem
- Dispositivos suportados pelo rastreamento de movimento
- Dispositivos suportados pelo mapa espacial esparso
- Dispositivos suportados pelo mapa espacial denso
- Relação entre rastreamento de movimento e outros módulos do EasyAR