AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Android-Bundle: Problematische Geräte 50% im Vergleich zu Android-32-APK
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von philipp.hofmann · begonnen am 7. Dez 2019 · letzter Beitrag vom 12. Mär 2020
Antwort Antwort
Seite 2 von 3     12 3      
philipp.hofmann

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

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

  Alt 21. Dez 2019, 23:26
Ja, ich will nicht den jeweiligen OS-Dialog für die Mails nutzen, sondern direkt Mails versenden. Für die Downloads habe ich jetzt auf System.Net umgestellt, das ist schon smarter, für die Mails stört mich aktuell OpenSSL noch nicht so richtig. Das letzte Problem für 64-Bit ist ja jetzt auch nur, dass der AVPlayer nicht auf allen Geräten läuft. Er läuft generell in 32-bit und auf 64-bit nur auf der Hälfte der Geräte. Da hoffe ich, dass der Hersteller nachbessert und so lange bleibe ich aktuell bei meiner 32-Bit-Auslieferung.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#12

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

  Alt 22. Dez 2019, 11:20
Ja, ich will nicht den jeweiligen OS-Dialog für die Mails nutzen, sondern direkt Mails versenden.
Wieso willst du das machen?
Gibt dir jeder Nutzer wohl seine Zugangsdaten für sein Konto?
Oder willst du nur einen Datenrückkanal haben.
Dann würde ich den Vorschlag von Rollo62 umsetzen und das über REST machen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
philipp.hofmann

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

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

  Alt 22. Dez 2019, 11:30
Ich verschicke aus der App auf User-Request Status-Mails über meinen eigenen SMTP-Server, relativ einfache Sache, daher reicht mir da die Indy-Lösung. Seht ihr da ein Stabilitätsproblem?
  Mit Zitat antworten Zitat
philipp.hofmann

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

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

  Alt 29. Dez 2019, 11: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 11:33 Uhr)
  Mit Zitat antworten Zitat
philipp.hofmann

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

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

  Alt 23. Jan 2020, 18:03
Jetzt mal noch die Info, wie man externe so-Files aktuell einbinden kann, wenn man Bundles benutzt. Ich habe die Libraries jetzt in folgende Pfade gesteckt:

- AV-Player
- 32-Bit-so-files -> library\lib\armeabi-v7a\
- 64-Bit-so-files -> library\lib\arm64-v8a\
- OpenSSL
- 32-Bit-so-files -> library\lib\armeabi-v7a\
- 64-Bit-so-files -> llibrary\lib\arm64-v8a\
Das Problem hier ist, dass je nach Device die Libraries in unterschiedlichen Pfaden gesucht werden. Lösung ist für mich jetzt, dass ich diese Pfade hintereinander durchprobiere, wobei dies je nach Komponente unterschiedlich geht. Dies ist deutlich platzsparender als die Lösung vom 29. Dez 2019 11:10, wo die Libraries für Android-32 auch unnötigerweise die 64-bit-Versionen enthielten und umgekehrt.

Open-SSL:
Delphi-Quellcode:
  {$IFDEF ANDROID}
    IdOpenSSLSetLibPath(String.Empty);
    IdSSLOpenSSLHeaders.Load();
    error:=IdSSLOpenSSLHeaders.WhichFailedToLoad();
    if (length(error)>0) then
    begin
      IdOpenSSLSetLibPath(IncludeTrailingPathDelimiter(TPath.GetLibraryPath));
      IdSSLOpenSSLHeaders.Load();
      error:=IdSSLOpenSSLHeaders.WhichFailedToLoad();
      if (length(error)>0) then
      begin
        IdOpenSSLSetLibPath(IncludeTrailingPathDelimiter(TPath.GetDocumentsPath));
        IdSSLOpenSSLHeaders.Load();
        log.d('SSL-Version(3): '+OpenSSLVersion);
        error:=IdSSLOpenSSLHeaders.WhichFailedToLoad();
        if (length(error)>0) then
        begin
          log.d('SSL-Errors: '+error);
        end;
      end else begin
        log.d('SSL-Version(2): '+OpenSSLVersion);
      end;
    end else begin
      log.d('SSL-Version(1): '+OpenSSLVersion);
    end;
  {$ENDIF}
AV-Player (http://www.flashavconverter.com/cont...hi-component):
Delphi-Quellcode:
  {$IFDEF ANDROID}
    try
      avlib.FFMPEG_DLL_PATH:=string.Empty;
      avPlayerVideo:=TAVPlayer.Create(mainForm);
    except on E: Exception do
      begin
        avlib.FFMPEG_DLL_PATH:=IncludeTrailingPathDelimiter(TPath.GetLibraryPath);
        avPlayerVideo:=TAVPlayer.Create(mainForm);
      end;
    end;
  {$ENDIF}
Ich bin da mit EMBT noch dran (https://quality.embarcadero.com/browse/RSP-27336), wobei die Hauptkommunikation via E-Mail läuft.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.095 Beiträge
 
Delphi 12 Athens
 
#16

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

  Alt 23. Jan 2020, 18:59
Dankesehr für die Info.

Ich bin mir jetzt nicht sicher wo Du die Libraries einstellst, über den Deployment-Manager vermute ich.
Falls das hier unten schon steht, sorry, ich habe mir die vorherigen Punkten icht komplett durchgelesen.

Ohne es jetzt ausprobiert zu haben, es gibt ja unter Build-Setting im Project auch die Libraries-Zweige.
Unter iOS kann man da .a Files entsprechend hinkopieren, und es gelangt automatisch ins Deployment.

Das gibt es unter Android auch, und da liegen normalerweise ein paar Systemlibraries.

Es sollte doch möglich sein die Library-Zweige um Custom-Libraries zu ergänzen, so wie unter iOS auch.
Ich denke es ist ja generell dafür gedacht.
Dann sollten naturlich die richtigen Libraries am Ende in den richtigen Pfad kommen (gesteuert durch die IDE),
also von Library32 in den Pfad für 32-Bit, etc.


Hast Du das mal ausprobiert, oder nur über den Deploment-Manager ?
Falls es nicht geht, dann bitte rege das doch bei EMBA mal an.
  Mit Zitat antworten Zitat
philipp.hofmann

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

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

  Alt 23. Jan 2020, 22:43
Man sieht in meinem Bundle-File, dass die Libraries dort landen, wo sie eigentlich hingehören und ich habe es über den Bereitstellungsmanager konfiguriert, so wie es auch der Komponentenhersteller dokumentiert hat. Und ich habe auch das Patch von EMBT installiert, weil es gab im Bundle noch ein Problem in den XML-Konfigurationen. Beim lokalen Deployment klappt es bei meinen Geräten damit auch sowohl unter Android-32 und Android-64.

Ich glaube nicht, dass es bei Android-64 über die Build-Settings funktionieren kann, denn du musst im Bereitstellungsmanager des Android-64-Zweiges, sowohl die Android-32-so-Libraries als auch die Android-64-so-Libraries konfigurieren, damit beides im Bundle landet, weil du brauchst definitiv weiterhin die Android-32-Version, weil Unmengen von Android-Geräten sind 32-Bit und um es noch komplizierter zu machen, ist es auch noch vom Store abhängig:

Ich liefere aktuell zwei Android-Zweige aus:
a) Für den Amazon-App-Store (also für Amazon-Fire-Devices) liefere ich eine reine Android-32-bit-Version als apk-File aus. Hier sind dann nur die 32-bit-Libraries enthalten. Diese wird in Delphi mit der Android-32-Konfiguration gebuildet.
b) Für den Google-PlayStore liefere ich die Bundle-Version aus (d.h. das aab-File, welches sowohl die Android-32-bit- als auch die Android-64-bit-Version beinhaltet und in Delphi mit der Android-64-Konfiguration gebuildet wird).

Eigentlich ist es auch Sache des Komponentenhersteller, wie sich dies lösen lässt. Ich habe jetzt sowohl EMBT als auch den Komponentenhersteller mit einem Beispiel-Projekt versorgt, wo man sieht, was passiert und das der "normale" Weg bei 75% der Devices funktioniert und bei ein paar Ausnahmen nicht. EMBT hat jetzt einen alternativen Vorschlag gemacht, der wieder bei 75% der Devices funktionierte, dafür aber waren die nicht funktionierenden Devices andere. Daher mache ich jetzt einfach die Kombination aus beidem (bzw. bei OpenSSL sind es drei Wege, die zum Ziel führen).

Der Rest ist jetzt nicht mehr mein Bier, ich habe dem Hersteller von AVPlayer schon genügend unter die Arme gegriffen, da dort leider noch nicht alles so funktionierte wie es soll (z.B. habe ich letztes Wochenende gerade relativ viel Zeit investiert, um aufzuzeigen, wie man zur Laufzeit eines Liedes/Videos das Output-Device unter Windows und MacOS wechseln kann, man wollte mir erzählen, dass dies nicht (stabil) funktioniert und man die App neu starten muss und das ist nur einer von vielen Punkten auf der Liste, was dort noch zu tun war - jetzt läuft es meiner Meinung nach stabil und zufriedenstellend).
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.095 Beiträge
 
Delphi 12 Athens
 
#18

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

  Alt 24. Jan 2020, 07:57
Also das heisst Du fummelst das selber per UNZIP/ZIP in die ABB.

Eigentlich sollte es doch komplett durch die IDE verarbeitbar sein, was spricht dagegen ?

Es gibt ja zwei Zweige im Projekt:

Project\Android\Libraries
- Package1_32
- Package2_32
Project\Android64\Libraries
- Package1_64
- Package2_64

von dort automatisch ins Deploment, läuft oder lief schnmal so
Deployment\Android32
Deployment\Android64

von dort automatisch ins Bundle, bei Ausführen von Deploy
ARM7
Arm8

Ich hoffe mal das ist am Ende das eigentliche Ziel von EMBA.
Mal hoffen das es bald über die IDE-Konfiguration Bug-Frei so läuft wie gedacht.

Amazon ist ja ein anderes Thema, und kann damit auch wie bisher erstelt werden.
  Mit Zitat antworten Zitat
philipp.hofmann

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

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

  Alt 24. Jan 2020, 08:49
Nein, ich fummele nichts per Hand in die ABB und im Bereitstellungsmanager ist es dann wie folgt konfiguriert:

1. Android-32:
a) alle 32-bit-Libraries (so-files) nach library\lib\armeabi-v7a\

2. Android-64:
a) alle 32-bit-Libraries (so-files) nach library\lib\armeabi-v7a\
b) alle 64-bit-Libraries (so-files) nach llibrary\lib\arm64-v8a\

2.a) ist notwendig, damit das Bundle beides enthält. Die 1.Konfiguration wird bei der Erstellung des Bundles vollkommen ignoriert.
  Mit Zitat antworten Zitat
fppoels
(Gast)

n/a Beiträge
 
#20

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

  Alt 4. Mär 2020, 22:19
Hast du eine 64 Bit Version deiner App schon mal erfolgreich auf einem
64 Bit Android Gerät getestet?

Also mal nur für 64 Bit compilieren und auf 64 Bit Gerät ausführen.
Ggf. monitor.bat aus dem Android SDK starten um die Logcat Logmeldungen
anzeigen zu können.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz