Skip to main content
Esta página lista como diagnosticar uma captura que falhou, os problemas comuns de build e dicas de diagnóstico.

Diagnóstico por status

Na v10 não existe um tipo de erro separadoLivenessFacetecSDKError não existe. Toda falha chega como LivenessFacetecSDKLivenessState.Error(data), carregando o mesmo LivenessFacetecSDKResultData do caso de sucesso. A causa está inteiramente no data.status:

Exemplo de tratamento

friendlyMessage já vem pronto para exibição e é fixo por status. Use-o como fallback e trate explicitamente apenas os status que exigem uma ação diferente no seu fluxo.

Problemas comuns de build

ClassNotFoundException em runtime para uma dependência externa

As bibliotecas de terceiros não são incluídas no AAR fundido. Você precisa declará-las como implementation no seu app — veja a lista completa em Instalação.

Class not found para as classes do Shield

O repositório do Shield não foi declarado no settings.gradle.kts. Garanta que estes estão presentes:

DexArchiveBuilderException: method ID not in [0, 0xffff]

O número de métodos do dex excedeu 65.535. Em defaultConfig:

Erro de minCompileSdk na resolução da dependência

O aar-metadata do SDK exige compileSdk = 36 e isCoreLibraryDesugaringEnabled = true. Confira os dois em Instalação.

IllegalStateException: LivenessFacetecSDK not initialized. Call init() first.

A captura foi coletada antes de init() completar com sucesso.
startLivenessCheck() devolve um Flow cold: a exceção surge no momento da coleta (.collect { }), não na chamada da função. Garanta que init() retornou Result.success(...) antes de habilitar o botão de captura, ou trate a exceção com .catch { } no coletor.

O fluxo não inicia em emulador

O SDK só distribui bibliotecas nativas para armeabi-v7a e arm64-v8a. Em emulador x86/x86_64 o fluxo não executa — teste em dispositivo físico ou em emulador com imagem ARM.

Logging

Em builds release, todas as chamadas a android.util.Log do SDK são removidas pelo R8 via -assumenosideeffects. Nenhum log do SDK chega ao Logcat em produção, independentemente do nível configurado pelo seu app.

Sentry

A dependência io.sentry:sentry-android deve ser declarada no app cliente — o AAR referencia classes do Sentry em tempo de compilação e a ausência da dependência quebra a build com NoClassDefFoundError.

ProGuard / R8

As regras completas exigidas pelo build de release estão em Instalação — ProGuard / R8. Abaixo, os sintomas que indicam que elas estão faltando.
Mesmo com o problema corrigido, vale manter no seu roteiro de testes a validação de duas capturas consecutivas num build release minificado em device real. É a verificação mais barata contra qualquer regressão de minificação — que, por natureza, só aparece a partir da segunda captura.

NoClassDefFoundError em release com minificação ligada

Valide se o proguard.txt do AAR foi efetivamente mesclado abrindo o mapping.txt gerado pelo R8. Confira também se as regras do Koin (-keep class org.koin.** { *; }) estão presentes — o Koin 4.x não empacota regras consumer próprias.

Verificação de saúde

Use este checklist quando o SDK não inicializar:
1

Cheque a chave de API do seu backend do seu backend

A chave nunca é usada pelo app — ela vive no seu backend, na chamada de criação da sessão. Confirme queA chave nunca é usada pelo app — ela vive no seu backend, na chamada de criação da sessão. Confirme que está ativa na sua conta da Plataforma ID.
2

Confirme conectividade

O dispositivo precisa alcançar os endpoints da Plataforma ID. Teste em uma rede sem proxy/firewall corporativo.
3

Valide o AAR

Verifique se o .aar em app/libs/ está íntegro e contém classes.jar, proguard.txt e a pasta jni/.
4

Valide as bibliotecas nativas por ABI

Confirme que o APK traz arm64-v8a e armeabi-v7a com libvccvendorkeys.so, libe14c.so e libPhoenixAndroid.so, e que o teste está rodando em hardware ARM.
5

Confirme as dependências externas

Faltar qualquer dependência externa quebra o init com ClassNotFoundException. Confira a lista completa em Instalação.
6

Colete o status da falha

Como o SDK não emite logs em release, use os retornos da própria API: confirme se init() devolveu Result.success(...) e, na captura, registre o data.status e o data.friendlyMessage recebidos em LivenessFacetecSDKLivenessState.Error. O Diagnóstico por status mapeia cada valor para a ação recomendada.

Próximos passos

Implementação

Volte para a referência de uso do SDK

Customização

Veja como personalizar a UI do FaceTec