Diagnóstico por status
Na v10 não existe um tipo de erro separado —LivenessFacetecSDKError 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 paraarmeabi-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 aandroid.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ênciaio.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 oproguard.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