Mobility / Software-Entwicklung / Software-Test

Emulatoren für die Entwicklung mit Android

Bei der Entwicklung von Android-Apps spielt die Emulation von Devices am Entwicklungsrechner eine sehr wichtige Rolle. Dies ist insbesondere dadurch bedingt, dass es tausende unterschiedliche Geräte gibt, auf denen Android Apps installiert werden können. Diese unterscheiden sich unter anderem in der Bildschirmauflösung und Größe, Ausstattung mit RAM, Leistungsfähigkeit und Architektur der CPU, sowie in der Betriebssystemversion. Außerdem wächst die Anzahl der Sensoren mit jeder neuen Generation von Smartphones und die Bedeutung der Grafikbeschleunigung für Spiele nimmt ebenfalls zu.

Als Entwickler von Android Apps ist es notwendig, mehrere Varianten von Devices einfach und schnell testen zu können. Dafür spielen Emulatoren eine wichtige Rolle.

In diesem Beitrag möchte ich aufzeigen, welche Performance von Emulatoren erwartet werden kann, und wie sie konfiguriert werden können, um realistische und akzeptable Antwortzeiten zu erreichen. Die Grafikleistung für Spiele und deren Optimierung ist ein eigenes Thema, auf das ich hier nicht eingehen werde.

Smartphone Apps_android emulator

Emulatoren für Android

Mit der Android Entwicklungsumgebung (dem ADT) kommt der Standard – Emulator in drei Ausführungen, für die jeweilige CPU-Architektur:

  • ARM (emulator-arm.exe)
  • ATOM (emulator-x86.exe)
  • MIPS (emulator-mips.exe)

Eine Alternative besteht im Emulator von Genymotion, der eine Integration für die Entwicklungsumgebungen bietet. Dieser ist allerdings für kommerziellen Einsatz kostenpflichtig. Vorteil ist die Nutzung des Managers VirtualBox von Oracle zur Steuerung der virtuellen Maschinen, da hier auch AMD-CPUs unterstützt werden.

Weiters gibt es noch einige Android App Player am Markt, deren Fokus jedoch nicht die Integration mit einer Entwicklungsumgebung ist, sondern die Nutzung von Android Spielen auf PC – Hardware. Diese sind für unsere Untersuchungen nicht relevant.

 

Performance ohne Optimierung

Zur Einschätzung der Performance wurden Tests auf einem Laptop mit Intel i7 CPU (2,9 – 3,6GHz) durchgeführt. Die Laufzeiten wurden anschließend mit Smartphone mit Quadcore CPUs verglichen. Das Smartphone wurde per USB-Anschluss vom Laptop mit der Android-Entwicklungsumgebung gesteuert. Zum Test der Geschwindigkeit auf dem Device dient eine App, die 3 unterschiedliche Messungen vornimmt. Die Berechnungen wurden aus konkreten Apps entnommen, stellen also praktisch relevante Werte dar:

  • Fließkommaberechnungen
  • Suchalgorithmus (reine Integer – Berechungen), wie beispielsweise für Strategiespiele benötigt
  • Anlage und Kopie von Strings

 

ARM Emulator ohne Beschleunigung

Smartphone
4×1,4GHz

Android booten

2 min 17 sec

27 sec

App laden und starten

9 sec

6 sec

Fließkomma

20 sec

1,8 sec

Integer/sec 1 Thread

815

8735

Integer/sec 2 Threads

1167

16463

Integer/sec 4 Threads

549

30951

Memory

934 ms

159 ms

 

Hier ist deutlich zu erkennen, dass der ARM Emulator auch bei guter Hardwareausstattung des Entwicklungsrechners nur sehr bedingt einsetzbar ist. Die Zeiten für das Starten des Emulators und Ausführen der App sind nicht mit einem physischen Smartphone vergleichbar.

Die Gründe für die relativ schlechte Performance sind vor allem, dass die physischen Smartphones bereits sehr schnelle Prozessoren beinhalten und andererseits diese CPUs mit dem gesamten Android-Betriebssystem emuliert werden müssen.

CPU_Auslastung2_android emulator

Abbildung 1

 

Die Abbildung 1 zeigt die CPU Belastung durch den Android Emulator während der Tests. Es wird lediglich ein Prozessorkern zu 100% ausgelastet wird. Moderne 4-Kern oder 8-Kern CPUs bringen damit nur minimale Vorteile für die Performance.

 

Welche Möglichkeiten gibt es zur Beschleunigung?

Die kostengünstigste und einfachste Variante ist es, nicht die ARM-CPU zu emulieren, sondern eine Atom-CPU mit einem Android-Betriebssystem in einer virtuellen Umgebung auszuführen. Somit kann „x86“ – Code direkt am Entwicklungsrechner ausgeführt, und nicht mehr zusätzlich über den Umweg des ARM-Maschinencodes emuliert werden. Wie dies konfiguriert werden kann, lesen Sie im folgenden Abschnitt.

Alternativ kann natürlich auch die Hardware des Entwicklungsrechners optimiert werden. Konkrete Empfehlungen gibt es dazu weiter unten.

 

HAXM

Die Abkürzung HAXM steht für „Intel Hardware Accelerated Execution Manager“ und ermöglicht die Ausführung von Android-Images auf bestimmten Intel CPUs. Dadurch kann sowohl die Startzeit, als auch die Geschwindigkeit der Apps, die im Emulator laufen, wesentlich gesteigert werden.

Allerdings gibt es dafür einige Einschränkungen:

  1. Die Beschleunigung funktioniert nur auf Intel CPUs
  2. die CPU muss die VT – Technologie beherrschen
  3. es kann nur ein Intel x86 Image (für Atom) verwendet werden

Was funktioniert somit nicht?

  • Ein ARM – System Image, hier wird der ARM – Prozessor emuliert
  • CPUs anderer Hersteller
  • Emulation von Devices vor API Level 10 (also vor Android 2.3.3)

Die Installation für HAXM ist entweder über den Android SDK – Manager oder über die Intel Homepage zu beziehen. Im SDK – Manager müssen Sie dafür folgendes Element installieren:

 

HAXM_Install_android emulator

Abbildung 2

 

Achtung: auch wenn der SDK – Manager behauptet, dass HAXM installiert ist, bedeutet dies nur, dass das Installationsprogramm downgeloaded wurde! Dieses muss erst aufgerufen werden.

Suchen Sie dazu das Verzeichnis \sdk\extras\intel\Hardware_Accelerated_Execution_Manager und führen Sie die Datei „intelhaxm.exe“ aus.

Zusätzlich muss für die entsprechende Android-Version das „Intel x86 Atom System Image“ installiert werden (zum Beispiel hier für API 19):

 

Atom_Image_Install_android emulator

Abbildung 3

 

Bei der Konfiguration der virtuellen Devices mit dem Android Virtual Device Manager kann schließlich für die CPU „Intel Atom (x86)“ ausgewählt werden:

AVD_define_android emulator

Abbildung 4

 

Nach der Installation sollten Sie beim Aufruf des Emulators die Meldung sehen: „HAX is working and emulator runs in fast virt mode“.

 

Hardware des Entwicklungsrechners

Der Hauptspeicher des Entwicklungsrechners ist ein wichtiger Faktor, insbesondere bei Emulation von aktuellen Devices, die schon mit 3GB ausgestattet sind. Somit sollte der Entwicklungsrechner, auf dem die Emulation stattfindet, mindestens 8 oder besser 16GB RAM installiert haben.

Eine SSD – Festplatte reduziert die Ladezeit des Emulators und der Images stark.

Eine schnelle CPU mit zumindest 2 Prozessorkernen und möglichst hohem Takt ist zu bevorzugen. Die Anzahl der Kerne ist hier weniger ausschlaggebend, da der Emulator nur auf einem Prozessorkern läuft. Die Möglichkeit von Hyperthreading ist für die Beschleunigung nicht förderlich.

 

Definition der Virtuellen Devices

Neuere Android – Versionen der Generation 4.X sind größer als ältere Generationen und haben damit auch längere Ladezeiten. Wenn also nicht die letzte Version getestet werden muss, können in Ausnahmefällen auch die älteren verwendet werden.

Die Verwendung von Snapshots beschleunigt das Laden von Emulatoren deutlich. Allerdings werden diese auch öfters zerstört und es muss normal ohne Laden des Snapshots gebootet werden. In diesen Fällen ist der Vorteil schnell wieder dahin. Außerdem kann damit die Option der Nutzung der „Host GPU“ nicht ausgewählt werden.

 

Messergebnisse

Die Ergebnisse der Tests mit Verschiedenen Emulatoren und Vergleich mit echten Geräten sind eindeutig. Hinweis: die Werte schwanken naturgemäß je nach Ausführung um einige Prozent, die Unterschiede sind also oft nicht signifikant, um abzuleiten dass ein Emulator schneller ist als ein anderer.

Startzeiten

ARM Emulator ohne Beschleunigung

Mit HAXM
auf Atom

Genymotion

Android booten

2 min 17 sec

20 sec

18 sec

App laden und starten

9 sec

8 sec

2 sec

 

 

Messergebnisse_android emulator

Abbildung 5

 

Die gemessenen Zeiten der praktischen Tests sind in Abbildung 5 ersichtlich, die Werte sind relativ zur unbeschleunigten ARM Emulation angeführt.

Die Emulatoren mit HAXM oder Genymotion bieten praktisch die gleiche Performance bei der Ausführung der Tests. Genymotion scheint hier lediglich Vorteile beim Laden der Apps auf das emulierte Device zu bringen. Erstaunlich ist, dass die Emulatoren das Leistungsniveau von aktuellen Smartphones erreichen, solange es sich um „single Thread“ – Apps handelt. Da der Emulator am Entwicklungsrechner nur auf einem Prozessorkern läuft, sind die Smartphones mit mehreren Prozessorkernen im Vorteil.

 

Fazit

Die Entwicklung für Android verlangt den Test auf mehreren Devices mit unterschiedlicher Betriebssystemversion, Bildschirmauflösung und Größe. Dafür spielen Emulatoren eine bedeutende Rolle.

Mittels der Beschleunigung über Virtualisierung kann die Geschwindigkeit von Emulationen wesentlich verbessert werden und sogar das Niveau von aktuellen Smartphones erreicht werden.

Dabei sind jedoch einige Voraussetzungen zu beachten. Insbesondere bei Verwendung von HAXM genügt die „Installation“ über das Android SDK nicht, das Installationsprogramm wird hier lediglich heruntergeladen und muss noch ausgeführt werden.

Wesentlich ist auch die Ausstattung des Entwicklungsrechners, auf dem die Emulation läuft. Hier ist eine schnelle CPU mit möglichst viel Hauptspeicher von Vorteil. Die Anzahl der Prozessorkerne beeinflusst die Geschwindigkeit der Emulation hingegen praktisch nicht.

 

Passende Artikel

Kommentare gesperrt.