Repository navigation
android
Home > 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.
| 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.
- Copie para uma pasta
java\ao lado do.dpros dois jars desrc\engine\okhttp\java:okhttp-4.11.0.jareralokhttp.jar. -
Project > Add... > Libraries(plataforma Android) e adicione os dois. - No código:
uses RALClient, RALConsts, RALTypes, RALOkHttpClient; // a unit precisa estar no uses
Cliente.EngineType := ENGINEOKHTTP; // 'OkHttp'
Cliente.HTTPVersion := rhv2; // opcional: HTTP/2Faltou um jar? O erro aparece no primeiro pedido: ClassNotFoundException.
- Baixe do branch
external, pastamsquic/, os zipsmsquic-2.6.1-android_arm64-v8a.zipe..._armeabi-v7a.zip. - Coloque cada
libmsquic.soemlib\arm64-v8a\elib\armeabi-v7a\ao lado do.dpr. -
Project > Deployment, adicione os arquivos com Remote Pathlibrary\lib\arm64-v8a\(Android 64) elibrary\lib\armeabi-v7a\(Android 32). - Deixe
LibPathvazio. No código:Cliente.EngineType := ENGINEMSQUIC;eRALMsQuicClientnouses.
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');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.
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.
| 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
|
Começar
Servidor
- Rotas e parâmetros
- Ler o pedido e responder
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar