LivenessFacetecSDK — o pacote que orquestra o motor FaceTec — a um projeto Android que ainda está em Android Gradle Plugin (AGP) 8.x.
Essa é uma build alternativa do
LivenessFacetecSDK, com o mesmo contrato público da 2.0.0 padrão, recompilada com um toolchain mais antigo (AGP, Kotlin, Gradle, Koin, OkHttp, kotlinx-serialization) para quem ainda não migrou para AGP 9.x. Se o seu projeto já está em AGP 9.x, use a build padrão em Instalação — o comportamento é idêntico.Pré-requisitos
Antes de começar, garanta que você tem:- Uma chave de API válida emitida pela Plataforma ID, usada pelo seu backend na criação da sessão — o app nunca a recebe.
- Acesso aos arquivos
.aardoLivenessFacetecSDK(build compat) e do motor FaceTec distribuídos pela Valid. - O Package Name (
applicationId) do seu app enviado à equipe da Valid para liberação na licença FaceTec. - Um projeto Android em AGP 8.x, atendendo aos Requisitos mínimos abaixo.
Requisitos mínimos
O
compileSdk = 36 e o desugaring de bibliotecas do core são exigidos pelo aar-metadata do SDK (minCompileSdk=36). Configurar valores abaixo disso faz a build falhar na resolução da dependência.Seu projeto pode estar em AGP 8.x com uma versão de Kotlin diferente de
2.1.20 — isso é normal e seguro. O Kotlin usado para compilar o SDK não precisa ser idêntico ao do seu projeto para interoperar; o que importa é o AGP estar na faixa 8.x.Instalação
1
Obter os binários
Baixe na plataforma da Valid a build compat AGP 8 do
LivenessFacetecSDK (liveness-facetec-sdk-2.0.0.aar) e o .aar do motor FaceTec (facetec-sdk-10.1.18.aar), entregue separadamente.2
Adicionar os AARs ao app
Copie os dois arquivos para a pasta
libs do módulo app:3
Configurar repositórios
No
settings.gradle.kts do projeto, declare os repositórios necessários para resolver as dependências externas do SDK:4
Configurar app/build.gradle.kts
Declare os AARs junto com as dependências externas obrigatórias — atenção às versões abaixo, diferentes das da build padrão (Koin, OkHttp e kotlinx-serialization):
kotlinx-serialization-json é necessária porque o código compilado do SDK referencia essas classes em runtime. O plugin do compilador (kotlin.serialization) não é necessário no app consumidor — a serialização já vem compilada dentro do AAR do SDK.5
Sincronizar e validar
Sincronize o Gradle (
File → Sync Project with Gradle Files no Android Studio). Após o sync, o classpath deve resolver com.vcc.vendor.facetec.sdk.LivenessFacetecSDK.ProGuard / R8
Os.aar do SDK e da FaceTec já trazem, cada um, seu próprio proguard.txt, aplicados automaticamente pelo AGP ao app cliente assim que os dois são declarados como dependência. Juntos, cobrem as classes públicas do SDK, as classes do FaceTec, a ponte JNI e os metadados do Kotlin — nenhuma regra manual para esses itens é necessária.
As dependências abaixo empacotam suas próprias regras consumer e não requerem regras manuais:
Regras obrigatórias
Como o build typerelease liga isMinifyEnabled = true, adicione ao proguard-rules.pro do módulo app:
-dontoptimize não é necessário. Integrações antigas do SDK exigiam essa flag para contornar um VerifyError em classes internas do FaceTec sob R8 Full Mode; o problema foi corrigido no FaceTec 10.1.18. AGP 8.11 (usado nesta build) já usa R8 Full Mode por padrão desde a série 8.x — o mesmo cuidado de validar duas capturas consecutivas numa build release minificada se aplica aqui tanto quanto na build padrão. Se você carrega -dontoptimize de uma integração anterior, pode remover.Se o seu app usar Retrofit diretamente com interfaces anotadas, pode ser necessário preservar anotações em runtime:
NoClassDefFoundError em release com minificação ligada, valide se os proguard.txt dos AARs foram efetivamente aplicados abrindo o mapping.txt gerado pelo R8.
Permissões
A solução injeta no manifesto do seu app, via manifest merger, todas as permissões e Activities necessárias —INTERNET, CAMERA, ACCESS_NETWORK_STATE, a Activity de captura do FaceTec e a Activity-ponte do SDK. Nenhuma declaração manual é necessária.
A FaceTec trata a solicitação de permissão de câmera e a respectiva tela inteiramente por conta própria — o SDK não contém lógica de permissão de câmera, e seu app não precisa pedir
CAMERA antes de iniciar a captura.Checklist pós-integração
Antes de considerar a integração concluída:1
Manifesto mesclado
Abra
app/build/intermediates/merged_manifest/<variante>/AndroidManifest.xml e confirme a presença da permissão CAMERA, da Activity de captura do FaceTec e da Activity-ponte do SDK.2
Bibliotecas nativas no APK
Confirme que o APK traz
arm64-v8a e armeabi-v7a com as .so do SDK — via unzip -l app-debug.apk | grep '\.so' ou pelo APK Analyzer do Android Studio.3
Build release minificado
Rode
./gradlew :app:assembleRelease com as regras de ProGuard / R8 e valide duas capturas consecutivas no mesmo launch do app. É a regressão mais barata contra problemas de minificação, que só aparecem a partir da segunda captura.4
Dispositivo real ARM
O fluxo completo não roda em emulador x86/x86_64. Valide em hardware ARM.
5
AGP/Kotlin do seu projeto
Confirme que seu projeto está de fato em AGP 8.x. Se migrar para AGP 9.x depois de integrar esta build, troque para a build padrão (
2.0.0) na próxima atualização — veja Instalação.