Upozornění: článek obsahuje různé věci obecně pro vývoj na Android, ne jen ohledně synapse.
Už je to nějakou dobu, kdy jsem portoval Synapsi pro iOS a Linux (2014). V té době mobilní kompilátory nemají AnsiString a proto jsem tam trošku kouzlil a jen část kódu (speciálně hlavně ssPosix.inc, což je implementace soketů společná pro všechny Embarcadero kompilátory mimo windows) se dostala do oficiálního SVN. I to stačilo pro desktopové kompilátory (Mac, Linux). Ale od té doby je už nějakou dobu Android součástí i Professional nebo Community verze, takže zde bude i více článků o něm, protože ho najdete v čemkoliv.
Takže rok se s rokem (několika) sešel a máme zde další pokus, tentokrát už s minimem změn proti SVN r239 (jen 3 soubory). Navíc testovací program používá synapsí nový SSL handler.
Pokud nechcete číst, tak rovnou download synapse Android (1.8M) - včetně testu.
procedure TfrmMain.btnDownloadClick(Sender: TObject);
begin
//InitSSLInterface;
if not IsSSLloaded then // debug
begin
Log('SSL not loaded!'+DLLUtilName+';'+DLLSSLName);
end
else
Log('SSL loaded!');
HTTPCheck;
end;
procedure TfrmMain.HTTPCheck;
var
ls: TStringList;
stream: TMemoryStream;
begin
ls := TStringList.Create;
stream := TMemoryStream.Create;
try
Log('Synapse from Delphi (FMX)');
HttpGetText(edUrl.Text, ls);
Log(ls.Text);
Log('Text size (expected 217, maybe crlf different): ' +
IntToStr(Length(ls.Text)));
HttpGetBinary('https://delphi.cz/themes/standard/delphicz-trans3.png', stream);
Log('Stream size (expected 16 316): ' + IntToStr(stream.Size));
stream.Position := 0;
icImageControl.Bitmap.CreateFromStream(stream);
finally
ls.Free;
stream.Free;
end;
end;
Test je FMX aplikace, která po deploy a spuštění (normálně připojíte Androidí zařízení a pokud se nejedná o něco exotického tak se objeví v projektu) a dáte spustit (nebo spustit bez debuggeru)
Po chvilce se program spustí a kliknutím na ikonu se stáhne robots.txt z mého serveru a logo (jako ověření binarního přenosu). http protokol jsem zvolil protože to ověřuje najednou mnoho věcí a výsledek je hnedle dostupný.
Trošku legrace je, že delphi.cz používá https, takže bylo nutné přidat podporu pro OpenSSL. A vzal jsem rovnou 1.1, když už to synapse nově umí. Android od v6 nemá OpenSSL (místo nich má ne úplně kompatibilní jejich fork BoringSSL), takže bylo nutné knihovny přidat do deploymentu. Toto Vás nemusí trápit, pokud nechcete SSL používat. Precompiled Android SSL jsou třeba zde github.com/delphicz/OpenSSL-for-Android-Prebuilt, je to fork na mém githubu, jsou tam i jiné (pro mne) zajímavé projekty.
Pro upřesnění: arm64-v8a/lib je 64bit ARM (je součástí test projektu), armeabi-v7a/lib je 32 bit ARM, což je v podstatě historie.
Takže pokud máme staženo, otevřeno deployment projektu (menu Project/deployment). Opakuji: toto je nutné jen pro SSL, pokud nechcete SSL, tak nic.
Přidáte tam ty dvě .so knihovny a zkontrolujete RemotePath (RemotePath se dá změnit myší na tom políčku).
Nyní po spuštění by mělo být vše v pořádku i pro https servery.
Jen upozornění: některé verze Androidu zakazují plain http komunikaci (bez https), řešením je změna AndroidManifest.template.xml v adresáři aplikace, do sekce
aplication
<application android:usesCleartextTraffic="true">
</application>
tedy přidáte tam to: android:usesCleartextTraffic="true", což je příkaz přímo pro Android.
Další upozornění: pokud máte nějakou starší verzi Delphi, tak se může hodit obnovení knihoven v projektu: