Schlechte Leistung in Android beim Ausführen von APK, läuft gut im Browser

12

Ich habe ein kleines Spielprojekt in HTML5 mit der Phaser- Engine erstellt (habe sowohl 1.1.5 als auch 1.1.6 ausprobiert). Um es dann auf eine mobile Plattform zu portieren, wurde Phonegap / Cordova für Windows Phone 8, Android und iOS verwendet.

In meinem Spiel gibt es ungefähr 10 Elemente, die animiert werden (von Punkt a nach Punkt b und einige Rotationen gleichzeitig). Unter iOS und Windows Phone 8 gab es keine Probleme.

Aber mit Android ist die Leistung nicht akzeptabel. Wenn ich mein Spiel hingegen über den Gerätebrowser starte, läuft es reibungslos und ohne Verzögerung. Aber die kompilierte APK läuft sehr ruckelig und die Elemente bewegen sich sehr langsam und flackernd.

Ich habe geprüft, dass das Android-Hardware-Beschleunigungs-Flag in der Manifest-Datei auf "true" gesetzt ist. Versuchte es auch falsch zu ändern, aber das spiegelte keine Änderung in der Leistung wider.

Ich habe das gleiche auf Android 4.2 auf dem Samsung S2-Gerät überprüft und auf dieser Leistung ist besser. Aber auf Asus Nexus Tab 7 (mit Android 4.4) ist es sehr ruckelig, während das Betriebssystem und das Gerät beide auf dem neuesten Stand sind. Auch überprüft auf einem anderen Gerät mit Android 4.3 (Samsung Galaxy Grand Duos) und auch auf diesem ist die Leistung überhaupt nicht gut.

In meinem Spiel habe ich sowohl WebGL / Canvas-Rendering versucht (Phaser-Engine verwendet Pixi.js, die auf 2D-Canvas zurückgreifen, wenn WebGL nicht unterstützt wird), aber keine Änderung. Ähnliches gilt für easeljs.

Wenn jemand anderes mit ähnlichen Problemen konfrontiert ist und eine Möglichkeit vorschlagen kann, wie Leistung zu erzielen. Ich habe die Beispiele von cocoonjs überprüft und obwohl sie glatt und akzeptabel erscheinen, kann ich diesen Weg nicht einschlagen.

devilzk83
quelle
3
Diese Frage ist sehr gut geschrieben. Ich würde gerne wissen, ob Sie einen Benchmark oder Profiler verwendet haben, um den möglichen Schuldigen einzugrenzen, und ob Sie sich mit einer Reihe einfacher Schritte an phonegap gewandt haben, um dies zu reproduzieren.
AturSams
Ich habe noch nicht an phonegap geschrieben. Versuchte Profiler und konnte nichts Ungewöhnliches mit dem Framework oder der Codebasis finden. Vielleicht ist das der Grund, warum auch auf dem Desktop und im mobilen Browser alles reibungslos funktioniert. Ein Ergebnis war, dass Android eine andere Laufzeit für WebView-basierte Apps und den Browser selbst hat. Es konnte jedoch nichts gefunden werden, was darauf hindeutet, dass solch ein kleines Tweening im APK-Modus (WebView) zu einer so großen Verzögerung führt. Tatsächlich tritt dieses Problem auf der Registerkarte "Nexus" auf, auf der KitKat ausgeführt wird, das die schnellste Webansicht haben soll (Chrome-basiert).
Devilzk83
Dies ist eine sehr oberflächliche Beobachtung von meiner Seite; Es scheint, dass Sie auf einen Bug stoßen könnten. Ich verstehe nicht, warum die Leistung der High-End-Geräte stark voneinander abweicht.
AturSams
1
Ich bin gespannt, warum du nicht auf die CocoonJS-Route willst. Ich glaube, dass sowohl Phaser als auch Pixi in CocoonJS gut funktionieren. Was hindert Sie daran, diese Option auszuprobieren?
Geoff
2
Der Fehler, der zu lahmem CSS3- und Canvas-Rendering führt, ist das neue Chromium-basierte Webview, und es ist ein totales Fiasko für Cordova / Phonegap-Entwickler auf Android ... Ghaaadzoooks hat noch niemand bei Google die Leistung von Webview Canvas / CSS3 getestet, bevor KitKat aus der Tür gebootet wurde ? Ich hoffe, dass es schnell und hoffentlich transparent behoben wird, insbesondere für Benutzer von Mobiltelefonen mit gesperrten Android-Builds von Drittanbietern ... Völliges Fiasko. Wenn Sie ein Cordova / Phonegap-Entwickler sind oder Webview verwenden, melden Sie diesen Fehler bitte mit Google Android-Fehlerberichten. Weitere Informationen: groups.google.com/forum/#!topic/phonegap/1ZxXe6chHZc code.googl

Antworten:

2

Das Chromium-basierte WebView, das dieses Problem verursacht, wurde schließlich Mitte 2014 in KitKat Version 4.4.3 / 4.4.4 aktualisiert. Dies ist jedoch ein Trost, wenn man bedenkt, dass einige Anbieter scheinbar willkürliche Entscheidungen darüber getroffen haben, welches ihrer Telefone das Update erhalten hat und welches nicht nicht. Samsung Galaxy S4 ist zum Beispiel immer noch in 4.4.2 gefangen.

Befolgen Sie die Ratschläge anderer Antworten: Wenn Sie ein Canvas-basiertes Spiel haben, vermeiden Sie PhoneGap, es sei denn, Sie können feststellen, dass das Ausschließen von Handys mit KitKat-Versionen unter 4.4.3 akzeptabel ist.

Weston Hochzeit
quelle
1

Versuchen Sie, Ihr Spiel in libgdx neu zu erstellen. Libgdx ist schnell genug und hat keine derartigen Probleme. Es funktioniert auf allen Plattformen. Leider ist dies nur das, woran ich im Moment denken kann, und ich mag die Idee, js in android java umzuwandeln, oder was auch immer dieser Coverter tut, nicht. Obwohl dies einige Zeit in Anspruch nehmen wird, sollten Sie LibGDX testen.

captainbuzz123
quelle
1

Scheint, dass dies ein Problem bei den meisten Spieleentwicklern ist. Ähnliches Problem

"Ich werde oft gehört, dass Phonegap nicht die beste Wahl war, wenn es darum ging, ein Canvas-Spiel zu erstellen. Es ist eher an Web-Apps als an native Spiele angepasst."

Es scheint, Ausgabe Fähigkeiten für Android-Handys zu rendern. Es gibt einige Engines, die nicht mehr mit dem Rendern von Sprites umgehen können. Ich weiß, dass 10 Objekte einfach zu rendern sind, aber es sieht definitiv problematisch mit den Renderfunktionen aus.

Mein Vorschlag ist, dass Sie mit Cocoonjs gehen .

Sushobhit333
quelle
1

Ich bin auf dasselbe Problem mit Phaser gestoßen (mit diesem einfachen Spiel ) auf . Leider sind Sie mit HTML5 und Web- / Canvas-Rendering der Gnade Ihres Telefons ausgeliefert - es gibt Benutzer mit defekten oder schlecht funktionierenden Browsern (wie meinen).

Wie von @ captainbuzz123 vorgeschlagen, besteht die einzige echte Lösung darin, auf eine Nicht-HTML5-Plattform umzusteigen. Mein Werkzeug der Wahl fürs Erste ist momentan OpenFL .

Während meine (sehr einfache) Phaser-App mit OpenFL auf meinem Telefon mit etwa 8-12 FPS ausgeführt wird (weil sie in C ++ übersetzt und über das Android NDK ausgeführt wird), wird die Leistung meines Telefons sehr flüssig.

Es ist definitiv einen Versuch wert.

ashes999
quelle
1

Ein Update für die erste Woche des Jahres 2020:

Cocoonjs war wahrscheinlich eine solide Lösung für dieses Problem in der Vergangenheit, aber sie werden heruntergefahren. Ein Zitat aus ihrer offiziellen Website , das alles sagt

Mit großem Bedauern verkünden wir, dass wir unseren geliebten Dienst, Cocoon, nicht mehr anbieten werden.

Wir haben Ludei / Cocoon gestartet, weil wir der Meinung waren, dass die Zukunft der App- und Spieleentwicklung auf HTML5 basieren würde. Leider ist dies nicht geschehen und die Entwicklung der Ureinwohner ist stärker als je zuvor.

Dies spiegelt tatsächlich die HTML5-Entwicklung für Mobilgeräte im Jahr 2019 wider. Nicht, dass dies nicht möglich wäre, aber es ist nicht effektiv, wie erwartet ...

Nach einigen mit Phaser und Cordova erstellten Produktionsspielen wechsele ich zur nativen Entwicklung für IOS und Android erstellt wurden, . Wir haben es satt, die Leistungsgrenze selbst bei den einfachsten Mechaniken für mittlere Endgeräte zu erreichen

Nur um meine nächsten Tech- / Stack-Lösungsoptionen mitzuteilen, aus denen ich in der Gegenwart oder in naher Zukunft auswählen kann:

  • SpriteKit für IOS und LibGDX für Android: Dies wird wahrscheinlich die leistungsstärkste Lösung sein, obwohl für jede Plattform eine eigene Entwicklung erforderlich ist.

  • Cocos2D-X ist sich nicht wirklich sicher, wie gut es unterstützt wird und ist es immer noch eine gültige Wahl, aber es sollte sehr ausgereift und performant sein + Sie können in C ++ schreiben und für jede Plattform bauen, die es gibt

  • Corona scheint ein interessantes (und kostenloses) plattformübergreifendes und performantes Framework zu sein. Wenn Sie Lua verwenden , müssen Sie es mit den anderen hier genannten Lösungen vergleichen

  • Verwenden Sie einen der modernen Motoren wie Unity oder Godot . Ich bin nicht sicher, wie dies im Vergleich zu den genannten Frameworks in Bezug auf die Leistung ist

Hoffe das hilft jedem ..

Blauer Bot
quelle
0

Sah dies neulich, könnte ein Blick wert sein, um dieses Problem zu lösen. Klingt für mich nach einer ganz netten Idee: http://tmtg.net/glesjs/

Die Tatsache, dass es im Browser gut funktioniert, aber nicht auf Phonegap / Cordova, ist in der Tat sehr seltsam. Die ganze Canvas / WebGL-Situation auf Android (kann nicht für iOS sprechen) erschien mir immer ziemlich schrecklich. Auf jeden Fall etwas, in das Google mehr Energie stecken muss, vielleicht ist Lollipop eine Verbesserung!

Milo Mordaunt
quelle