Einzelnen Beitrag anzeigen

philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
862 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Android-Bundle: Problematische Geräte 50% im Vergleich zu Android-32-APK

  Alt 29. Dez 2019, 10:10
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)

Geändert von philipp.hofmann (29. Dez 2019 um 10:33 Uhr)
  Mit Zitat antworten Zitat