Synapse pro Android s OpenSSL 1.1 (podruhé a lépe) krok za krokem

vložil Radek Červinka 29. prosince 2021 18:23

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;

design

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)

project

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.

Deploy

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.

run

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:

Revert

Tagy: ,

Komentáře

7.1.2022 16:00:29 #

geby

V článku dvakrát zmiňuješ OpenSSH, ale máš na mysli OpenSSL.

Jinak díky za úpravy, už je to na Synapsím SVN.

geby

11.1.2022 0:02:54 #

radekc

Samozřejmě překlep, díky za upozornění.

radekc

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců