Zitat:
Man muss in der Android-64-Bereitstellung trotzdem alle 32-bit Libraries mit dem Remote-Pfad library\lib\armeabi-v7a\ und alle 64-bit-Libraries mit dem Pfad library\lib\arm64-v8a\ aufnehmen.
Das stimmt so leider nicht, weil die so-Dateien dann nicht auf jedem Device gefunden werden. Ich habe vier Sets von Libraries und stelle diese nun folgendermaßen bereit:
AV-Player 32-Bit .\assets\internal\libavplayer32\
AV-Player 64-Bit .\assets\internal\libavplayer64\
OpenSSL 32-Bit .\assets\internal\libssl32\
OpenSSL 64-Bit .\assets\internal\libssl64\
Daher muss ich dann die Pfade in Form.create setzen:
Delphi-Quellcode:
{$IFDEF ANDROID}
{$IFDEF CPU64BITS}
sslPath:=IncludeTrailingPathDelimiter(TPath.GetDocumentsPath())+'libssl64';
avPlayerPath:=IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(TPath.GetDocumentsPath())+'libavplayer64');
{$ELSE}
sslPath:=IncludeTrailingPathDelimiter(TPath.GetDocumentsPath())+'libssl32';
avPlayerPath:=IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(TPath.GetDocumentsPath())+'libavplayer32');
{$ENDIF}
IdOpenSSLSetLibPath(sslPath);
avlib.FFMPEG_DLL_PATH:=avPlayerPath;
{$ENDIF}
Nachteil: Die 32-bit und die 64-Bit-Version wird so rund 10 MB größer, weil eben immer alle 4 Sets an Libs enthalten sind, aber nur so werden die Libraries auch auf allen Devices gefunden. Sonst werden die so-Files auf 3 von 12 der getesteten Geräte (Prelaunch-Report) nicht entpackt, warum auch immer (ich kann keine Logik, wie 32-bit oder 64-bit entdecken). Es gibt auch schon ein Patch, welches sich mit dem Issue beschäftigt, dieses hat bei mir aber nicht geholfen (
https://cc.embarcadero.com/item/30905).
Jetzt habe ich nur noch einen Fehler unter Android 5.0 und 64-Bit, welchen ich vernachlässige und eine Warnung mit folgendem Fehler (also nur noch 1 von 12 sind im Vergleich zu 32-bit-Version fehlerhaft gemeldet):
Problem: java.lang.OutOfMemoryError: Failed to allocate a 112 byte allocation with 1224 free bytes and 1224B until OOM
Code:
FATAL
EXCEPTION: FinalizerWatchdogDaemon
Process:
com.android.vending, PID: 978
java.lang.OutOfMemoryError: Failed to allocate a 112 byte allocation with 1224 free bytes and 1224B until OOM
at gtk.uncaughtException(PG:3)
at java.lang.Daemons$FinalizerWatchdogDaemon.finalizerTimedOut(Daemons.java:316)
at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:238)
at java.lang.Thread.run(Thread.java:818)