Skip to content
mobius1qwe edited this page Oct 7, 2026 · 1 revision

Home > Android

Android

Delphi · Nível: intermediário

Em uma frase: qual motor usar num aplicativo Android, e o que colocar dentro do APK para ele funcionar.

Qual cliente

Motor Desde Quando Precisa no APK Android mínimo
netHTTP 1.0 HTTP comum, sem nada a instalar nada o do Delphi
OkHttp 1.2 🚧 HTTP/2, ou aceitar só um certificado (SSL.Pins) 2 jars o do Delphi
MsQuic 1.2 🚧 QUIC com servidor RAL MsQuic; também servidor no celular libmsquic.so por arquitetura 9
Kwik 1.2 🚧 QUIC no Android 8, ou sem biblioteca nativa 5 jars 8

O netHTTP no Android não faz HTTP/2 nem lê a impressão digital do certificado: por isso existe o OkHttp.

Warning

No Android, rede na thread principal é proibida (NetworkOnMainThreadException). Chame com ebMultiThread: Cliente.Get('/rota', AoResponder, ebMultiThread). Ver O cliente.

OkHttp 1.2 🚧

  1. Copie para uma pasta java\ ao lado do .dpr os dois jars de src\engine\okhttp\java: okhttp-4.11.0.jar e ralokhttp.jar.
  2. Project > Add... > Libraries (plataforma Android) e adicione os dois.
  3. No código:
uses RALClient, RALConsts, RALTypes, RALOkHttpClient; // a unit precisa estar no uses

Cliente.EngineType := ENGINEOKHTTP;   // 'OkHttp'
Cliente.HTTPVersion := rhv2;          // opcional: HTTP/2

Faltou um jar? O erro aparece no primeiro pedido: ClassNotFoundException.

MsQuic 1.2 🚧

  1. Baixe do branch external, pasta msquic/, os zips msquic-2.6.1-android_arm64-v8a.zip e ..._armeabi-v7a.zip.
  2. Coloque cada libmsquic.so em lib\arm64-v8a\ e lib\armeabi-v7a\ ao lado do .dpr.
  3. Project > Deployment, adicione os arquivos com Remote Path library\lib\arm64-v8a\ (Android 64) e library\lib\armeabi-v7a\ (Android 32).
  4. Deixe LibPath vazio. No código: Cliente.EngineType := ENGINEMSQUIC; e RALMsQuicClient no uses.

Servidor no celular: o certificado e a chave vão no Deployment com Remote Path assets\internal\, e no código:

Servidor.SSL.CertificateFile := TPath.Combine(TPath.GetDocumentsPath, 'cert.pem');
Servidor.SSL.PrivateKeyFile  := TPath.Combine(TPath.GetDocumentsPath, 'key.pem');

Kwik 1.2 🚧

Os 5 jars de src\engine\kwik\java (kwik-0.11.jar, agent15-3.3.jar, hkdf-2.0.0.jar, io.whitfin.siphash-2.0.1.jar, ralkwik.jar) entram como no OkHttp. Cliente.EngineType := ENGINEKWIK; e RALKwikClient no uses.

Note

O Kwik é LGPL v3. Veja o que isso significa para um aplicativo fechado antes de distribuir. Ver Licenças.

Certificado autoassinado no celular

Desde o Android 7 um app não confia em certificado instalado pelo usuário. A saída é o app aceitar o certificado pela impressão digital: SSL.Pins, com OkHttp, MsQuic ou Kwik. Ver HTTPS no cliente.

Erros comuns

O que acontece Causa O que fazer
NetworkOnMainThreadException pedido na thread principal ebMultiThread
ClassNotFoundException o jar não entrou no APK Project > Add > Libraries
MsQuic: erro do linker ao carregar Android 8 ou anterior, ou .so da arquitetura errada Android 9+, ou use Kwik
emCertPinUnsupported SSL.Pins com netHTTP no Android use OkHttp
emOkHttpAndroidOnly OkHttp rodando no Windows no Windows use netHTTP

Veja também

Clone this wiki locally