Ative a RA para usar os recursos de realidade aumentada no seu app novo ou existente.
Configurar o app para ser obrigatório para RA ou opcional
Para economizar espaço em dispositivos individuais, todos os recursos de RA são armazenados em um app chamado Google Play Services para RA, que é atualizado separadamente pela Play Store. Os apps Android que usam recursos de RA se comunicam com o Google Play Services para RA usando o SDK do ARCore. Um app compatível com recursos de RA pode ser configurado de duas maneiras: RA necessária e RA opcional. Essa designação determina como o app interage com o app Google Play Services para RA.
Um app RA obrigatório não funciona sem o ARCore. É necessário um dispositivo compatível com o ARCore com o Google Play Services para RA.
- A Google Play Store só disponibilizará apps com RA em dispositivos compatíveis com o ARCore.
- Quando os usuários instalarem um app de RA necessário, a Google Play Store instalará automaticamente o Google Play Services para RA no dispositivo. No entanto, seu app ainda precisará realizar verificações adicionais de tempo de execução caso o Google Play Services para RA esteja desatualizado ou tenha sido desinstalado manualmente.
Um app opcional em RA usa o ARCore para melhorar a funcionalidade existente. Ele tem recursos opcionais de RA que são ativados apenas em dispositivos compatíveis com o ARCore que instalaram o Google Play Services para RA.
- Os apps opcionais de RA podem ser instalados e executados em dispositivos não compatíveis com o ARCore.
- Quando os usuários instalarem um app opcional de RA, a Google Play Store não instalará automaticamente o Google Play Services para RA no dispositivo.
RA necessária | RA opcional | |
---|---|---|
Uso de recursos de RA | Seu app precisa do ARCore para a funcionalidade básica. | O ARCore aumenta a funcionalidade do seu app. O app pode ser executado sem a compatibilidade com o ARCore. |
Visibilidade na Play Store | O app está disponível somente na Play Store em dispositivos compatíveis com o ARCore. | Seu app segue os procedimentos normais de listagem. |
Método de instalação do Google Play Services para RA | A Play Store instala o Google Play Services para RA com o app. | Seu app usa o ArCoreApk_requestInstall() para fazer o download e instalar o ARCore. |
Requisitos do Android minSdkVersion |
Android 7.0 (API de nível 24) | Android 7.0 (API de nível 24) |
É necessário usar ArCoreApk_checkAvailability() ou ArCoreApk_checkAvailabilityAsync() para verificar o suporte do ARCore e o status da instalação |
||
É preciso usar ArCoreApk_requestInstall() para instalar o Google Play Services para RA |
Para tornar o app RA obrigatório ou RA opcional, atualize o AndroidManifest.xml
para incluir as seguintes entradas:
RA necessária
<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>
RA opcional
<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>
Em seguida, modifique o build.gradle
do app para especificar um minSdkVersion
de pelo menos 24
:
android {
defaultConfig {
…
minSdkVersion 24
}
}
Adicionar dependências do build
Verifique se o arquivo
build.gradle
do projeto inclui o repositório Maven do Google.allprojects { repositories { google() … } }
Adicione uma tarefa personalizada ao arquivo
build.gradle
do módulo para extrair as bibliotecas nativas incluídas no arquivo AAR do ARCore. Dessa forma, eles podem ser referenciados diretamente em um projeto C ou C++.No diretório
app/build
, defina uma variável para o diretório em que as bibliotecas nativas serão extraídas.Crie uma configuração do Gradle para armazenar os dados e as tarefas de extração.
/* 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 }
Crie uma tarefa para copiar as bibliotecas nativas do arquivo AAR e adicione-as às dependências de compilação.
// 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) } }
Configure as sinalizações de build nativas para transmitir os locais às ferramentas de build externas.
// 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" } }
Adicione as dependências para as bibliotecas Java e nativas.
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' ... }
Faça referência às bibliotecas nativas em
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} )
Executar verificações de tempo de execução
Durante o tempo de execução, faça o seguinte para garantir que os recursos de RA no app sejam executados sem problemas.
Verificar se o ARCore é compatível
Os apps de RA obrigatórios e AR opcionais precisam usarArCoreApk_checkAvailability()
ou ArCoreApk_checkAvailabilityAsync()
para determinar se o dispositivo atual é compatível com o ARCore. Em dispositivos não compatíveis com o ARCore, os apps precisam desativar a funcionalidade relacionada à RA e ocultar elementos de IU associados.
Um app Android NDK pode usar a classe ArCoreApk
do Java para verificar a compatibilidade e gerenciar a instalação na API de sessão C ARCore nativa. Dependendo da estrutura do app, isso pode ser mais fácil do que usar as funções ArCoreApk_
devido à grande quantidade de erros envolvidos e à interação com a interface do usuário.
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.
}
}
Embora o Google Play Services para RA seja instalado com o app de RA obrigatório, os usuários com dispositivos incompatíveis podem instalá-lo usando uma fonte externa. Usar ArCoreApk_checkAvailability()
ou ArCoreApk_checkAvailabilityAsync()
para verificar a compatibilidade com o ARCore garante uma experiência consistente.
Talvez o ArCoreApk_checkAvailability()
precise consultar os recursos de rede para determinar se o dispositivo é compatível com o ARCore. Durante esse período, ele retornará AR_AVAILABILITY_UNKNOWN_CHECKING
. Para reduzir a latência e o pop-up percebidos, os apps precisam chamar ArCoreApk_checkAvailability()
uma vez no início do ciclo de vida para iniciar a consulta, ignorando o valor retornado. Dessa forma, um resultado em cache estará disponível imediatamente quando um elemento da IU de entrada em RA for exibido.
Verificar se o Google Play Services para RA está instalado
Os apps de RA obrigatórios e AR opcionais precisam chamar ArCoreApk_requestInstall()
antes de criar uma sessão do ARCore para verificar se uma versão compatível do Google Play Services para RA está (ainda) instalada e garantir que foi feito o download de todos os dados necessários de perfis de dispositivos do 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.
}
Obedeça aos requisitos de privacidade do usuário
Para publicar seu app na Play Store, verifique se ele está em conformidade com os Requisitos de privacidade do usuário do ARCore.
Qual é a próxima etapa?
- Saiba como configurar uma sessão do ARCore.