Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi BoringSSL / Android - Wie binde ich das ein?? (https://www.delphipraxis.net/216631-boringssl-android-wie-binde-ich-das-ein.html)

SearchBot 31. Jan 2025 16:24

BoringSSL / Android - Wie binde ich das ein??
 
Hallo,

In meinem Projekt möchte ich aus einer NextCloud eine Datei herunterladen, in meiner App aktualisieren und wieder in die Cloud zurück speichern.
Mit diesem Code komme ich an die API ran:
https://github.com/halilhanbadem/delphi_nextcloudapi
Scheitert aktuell nur am SSL.

Zitat:

Erste Gelegenheit für Exception bei $C372C26D. Exception-Klasse EIdOSSLCouldNotLoadSSLLibrary mit Meldung 'SSL.-Bibliothek konnte nicht geladen werden.'. Prozess MeineApp.apk (3754)
Und jetzt komme ich mal wieder nicht weiter, weil die Emba-Hilfe hier so unglaublich ausführliche Informationen bereitstellt:
Zitat:

Unter Android Version 6 und höher müssen Sie die OpenSSL-Bibliotheken einbeziehen, da Android nicht mehr OpenSSL sondern BoringSSL verwendet.
:wiejetzt:
  • Wie "die OpenSSL-Bib.. einbeziehen"? Das steht doch, daß Android "BoringSSL" verwendet - warum dann die OpenSSL?
  • Und wo mache ich das "einbeziehen"?
:wall:

dummzeuch 31. Jan 2025 16:50

AW: BoringSSL / Android - Wie binde ich das ein??
 
Im englischen Original steht da:

"On Android version 6 and later, you need to include the OpenSSL Libraries since Android moved away from OpenSSL to BoringSSL."

"include" -> "einbeziehen" kann man so übersetzen, macht aber wenig Sinn.
Man muss also die OpenSSL-Library selbst mitliefern.

(Ich habe aber keine Idee, wie das geht, ich programmiere nicht für Android.)

philipp.hofmann 1. Feb 2025 00:17

AW: BoringSSL / Android - Wie binde ich das ein??
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich glaube ich habe die OpenSSL-Libraries von hier bezogen (notfalls PN an mich mit E-Mail-Adresse dann schicke ich dir meine Libs zu):
https://git.fairkom.net/chat/faircha...android-arm64/
https://github.com/IndySockets/OpenSSL-Binaries

a) Einbinden im Deployment (sowohl im Android-32 als auch im Android-64-Projekt): Siehe Anhang
b) Einbinden im Code:

Delphi-Quellcode:
procedure TicTrainerF.initSSL();
var help2: String;
begin
  if (not sslInited) then
  begin
    sslInited:=true;
    IdOpenSSLSetLibPath(String.Empty);
    IdSSLOpenSSLHeaders.Load();
    help2:=IdSSLOpenSSLHeaders.WhichFailedToLoad();
    if (length(help2) > 0) then
    begin
      IdOpenSSLSetLibPath(IncludeTrailingPathDelimiter(TPath.GetLibraryPath));
      IdSSLOpenSSLHeaders.Load();
      help2:=IdSSLOpenSSLHeaders.WhichFailedToLoad();
      if (length(help2) > 0) then
      begin
        IdOpenSSLSetLibPath(IncludeTrailingPathDelimiter(TPath.GetDocumentsPath));
        IdSSLOpenSSLHeaders.Load();
        mlog.info('SSL-Version(3): ' + IdSSLOpenSSL.OpenSSLVersion);
        help2:=IdSSLOpenSSLHeaders.WhichFailedToLoad();
        if (length(help2) > 0) then
        begin
          mlog.info('SSL-Errors: ' + help2);
        end;
      end else begin
        mlog.info('SSL-Version(2): ' + IdSSLOpenSSL.OpenSSLVersion);
      end;
    end else begin
      mlog.info('SSL-Version(1): ' + IdSSLOpenSSL.OpenSSLVersion);
    end;
  end;
end;
Das sollte es schon sein.

P.S.: Die ist alles OpenSSL 1.0, also uralt. Ich hoffe mit jedem Release, dass man sich mit Remy Lebeau (Indy) geeinigt hat und auf OpenSSL 1.1 oder neuer aktualisiert.

TurboMagic 2. Feb 2025 15:56

AW: BoringSSL / Android - Wie binde ich das ein??
 
Hallo,

was ich so mitbekommen habe läuft gerade wohl ein irgendwie zu Indy gehörendes Projekt,
welches TLS 1.3 Unterstützung umsetzt. Ich würde mal vermuten, dass da auch neuere OpenSSL
Versionen mit am Start sind.

philipp.hofmann 2. Feb 2025 22:40

AW: BoringSSL / Android - Wie binde ich das ein??
 
Müssen ja dann neue Versionen am Start sein, Version 1.0 wird kein TLS 1.3 mehr bekommen. Es wird auch endlich Zeit. Danke für den Hinweis, dann hoffe ich mal auf Delphi 13.

jaenicke 3. Feb 2025 00:51

AW: BoringSSL / Android - Wie binde ich das ein??
 
Zitat:

Zitat von TurboMagic (Beitrag 1545863)
was ich so mitbekommen habe läuft gerade wohl ein irgendwie zu Indy gehörendes Projekt,
welches TLS 1.3 Unterstützung umsetzt. Ich würde mal vermuten, dass da auch neuere OpenSSL
Versionen mit am Start sind.

Ja, genau darum geht es dabei. Embarcadero ist da ja selbst interessiert dran und wenn der OpenSSL-Teil nun wie beschrieben ausgelagert wird, soll ein Update in Zukunft einfacher sein. Mal schauen, was daraus wird und natürlich auch wie schnell:
https://www.indyproject.org/2024/08/...enssl-updates/

Es gibt aber andere Lösungen, insbesondere diese:
https://www.esegece.com/products/sgcindy - Das ist eine Erweiterung der Indy Komponenten, mit Unterstützung für OpenSSL 1.1.1 & 3.0.0 und win32, win64, Android, iOS and Mac OSX. Das würde ich hier empfehlen, da man die gewohnten Indy-Komponenten nutzen kann. Entsprechend gehe ich davon aus, dass das mit dem genannten Projekt ebenfalls direkt nutzbar sein sollte.

fisipjm 3. Feb 2025 08:19

AW: BoringSSL / Android - Wie binde ich das ein??
 
Zitat:

Zitat von SearchBot (Beitrag 1545838)
In meinem Projekt möchte ich aus einer NextCloud eine Datei herunterladen, in meiner App aktualisieren und wieder in die Cloud zurück speichern.
Mit diesem Code komme ich an die API ran:
https://github.com/halilhanbadem/delphi_nextcloudapi
Scheitert aktuell nur am SSL.

Warum verwendet du nicht die RESTClient / RESTRequest / RESTResponse Komponenten die Delphi dir mitliefert? Die können SSL ohne irgend ein Gefummel mit DLLs etc. Un der Code in der delphi_nextcloudapi sieht nicht besonders komplex aus, ich denke nicht das es länger als 1h dauert das mit den REST-Komponenten nach zu bauen.

vG
PJM

SearchBot 3. Feb 2025 12:19

AW: BoringSSL / Android - Wie binde ich das ein??
 
Hallo Philipp,

vielen Dank :thumb:
Zitat:

Zitat von philipp.hofmann (Beitrag 1545848)
https://github.com/IndySockets/OpenSSL-Binaries

a) Einbinden im Deployment (sowohl im Android-32 als auch im Android-64-Projekt): Siehe Anhang

Da habe ich ein bisschen suchen müssen - im Athens ist das im Menü "Projekt / Bereitstellung" und hat erst geklappt, nachdem ich in der Spalte "Remote-Pfad" den Eintrag zu "library\lib\armeabi-v7a" geändert habe, also da, wo auch die <Projektname>.so drin ist.

Zitat:

b) Einbinden im Code:
Für "IdOpenSSLSetLibPath" und "TPath" musste ich noch die units "IdSSLOpenSSLHeaders, System.IOUtils" ins uses der NextCloudAPI und dort auch im SetConfig als erstes deine initSSL; hinzufügen.

Nun klappt es.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz