![]() |
Wo müssen externe shared objects unter Android hin?
Hallo,
angenommen mein Android Projekt bindet externe shared objects (.so Dateien, also quasi die DLLs auf nicht Windows Plattformen) ein, wo müssen die hin? Nach .\assets\internal\ oder woanders? Und wenn ich die mittels LoadLibrary laden will, muss ich dann, angenommen eine solche wäre unter .\assets\internal\test.so diese mittels LoadLibrary(TPath.Combine(TPath.Combine('assets', 'internal'), 'test.so')) laden? Grüße TurboMagic |
AW: Wo müssen externe shared objects unter Android hin?
Der Forenserver hat auch ein kleines Zeitproblem.
Ich erstellte den Post devinitiv nach der Tagesschau. Als ich die STartseite neu lud, meinte der aber, der Beitrag wäre um 19:44 erstellt worden und jetzt weiß er scheinbar, dass es doch eher 20:44 Uhr war... ;-) |
AW: Wo müssen externe shared objects unter Android hin?
Bei Android muss man die so.Dateien normalerweise zweimal bereitstellen (32-bit und 64-bit):
- library\lib\arm64-v8a\ - library\lib\armeabi-v7a\ Es hängt aber am Ende vom Device (Android-Version) und auch von der Library ab, wo genau gesucht wird. Ich habe daher begleiten bei mir folgenden Code eingebaut, damit alle PreLaunch-Tests erfolgreich sind (sowohl bei Google als auch bei Amazon): Für OpenSSL:
Delphi-Quellcode:
AV-Player (hier habe ich den Original-Code gepatch, wird aber wahrscheinlich auch in den Original-Code nach Test durch den Hersteller übergehen:
IdSSLOpenSSLHeaders.Load();
{$IFDEF ANDROID} 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): '+OpenSSLVersion); help2:=IdSSLOpenSSLHeaders.WhichFailedToLoad(); if (length(help2)>0) then begin mlog.info('SSL-Errors: '+help2); end; end else begin mlog.info('SSL-Version(2): '+OpenSSLVersion); end; end else begin mlog.info('SSL-Version(1): '+OpenSSLVersion); end;
Delphi-Quellcode:
function MySafeLoadLibrary(ModuleName:string):HMODULE;
var Error: string; {$IF Defined(ANDROID)} function ShouldNativeLibrariesBeExtracted: Boolean; begin if TOSVersion.Check(6, 0) then Result := (TAndroidHelper.Context.getApplicationInfo.flags and TJApplicationInfo.JavaClass.FLAG_EXTRACT_NATIVE_LIBS) <> 0 else Result := True; end; {$ENDIF} begin {$IF Defined(ANDROID)} if ShouldNativeLibrariesBeExtracted then ModuleName := TPath.Combine(TPath.GetLibraryPath, ModuleName); {$ENDIF} Result := LoadLibrary(PChar(ModuleName)); if Result = 0 then begin Error := string.Format('Could not load ''%s'' due to: %s', [ModuleName, string(UTF8String(dlerror))]); log.d('mySafeLoadLibrary: '+error); ShowMessage(Error); raise Exception.Create(Error); end; end; |
AW: Wo müssen externe shared objects unter Android hin?
Danke mal soweit!
Inzwischen hab' ich das mit dem Laden der Libraries auch so hinbekommen, nur hat's jetzt im weiteren. Seufz! Muss aber erstmal noch etwas selber probieren... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 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-2025 by Thomas Breitkreuz