Hallo!
Eigentlich ganz schön, noch einmal etwas Neues zu beginnen, aber manchmal macht mich das wahnsinnig, dass kaum `was funzzt, was bei PC-Anwendungen seit fast dreißig Jahren funzzt.
Ich will in meiner Android-App eine Datei herunterladen und habe es zunächst ganz einfach probiert:
Delphi-Quellcode:
procedure Herunterladen(Quelle, Ziel: string);
var Stream: TMemoryStream;
begin
Stream := TMemoryStream.Create;
try
FMain.IdHTTP1.Get(Quelle, Stream);
Stream.SaveToFile(Ziel);
finally
Stream.Free;
FMain.IdHTTP1.Free;
end;
end;
Ergebnis ist eine Fehlermeldung:
Im Projekt Name.apk ist eine
Exception der Klasse EIdOSSLCouldNotLoadSSLLibrary mit der Meldung 'SSL.-Bibliothek konnte nicht geladen werden.' aufgetreten.
Also habe ich aufgerüstet. Alles, was nicht schnell genug auf den Bäumen war, in die Uses gefercht:
Delphi-Quellcode:
System.Net.URLClient, System.Net.HttpClient, System.Net.HttpClientComponent,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
IdSSLOpenSSL, IdSSLOpenSSLHeaders, IdIOHandler,
IdIOHandlerSocket, IdIOHandlerStack, IdSSL;
Über "Bereitstellung" unter "Projekt" die Dateien libcrypto.so.1.1 und libssl.so.1.1 eingebunden.
Und die Routine wie folgt erweitert:
Delphi-Quellcode:
procedure Herunterladen(Quelle, Ziel: string);
var
Stream: TMemoryStream;
HTTP: TIdHTTP;
SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
Stream := TMemoryStream.Create;
HTTP := TIdHTTP.Create(nil);
SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
SSLHandler.SSLOptions.Method := sslvTLSv1_2;
SSLHandler.SSLOptions.Mode := sslmUnassigned;
HTTP.IOHandler := SSLHandler;
HTTP.Get(Quelle, Stream);
Stream.SaveToFile(Ziel);
finally
Stream.Free;
SSLHandler.Free;
HTTP.Free;
end;
end;
Trauriges Ergebnis ist dieselbe Fehlermeldung.
Wie bekomme ich die dlls eingebunden?