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:
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;
AV-Player (hier habe ich den Original-Code gepatch, wird aber wahrscheinlich auch in den Original-Code nach Test durch den Hersteller übergehen:
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;