Wie Ihr Android Emulator in Fahrt kommt

Android Emulator Tipps und Tricks

Arne Limburg, Lars Röwekamp
©shutterstock.com/Samuel Chesterman

So interessant die Entwicklung von Android-Apps auch sein mag, spätestens beim Testen auf den verschiedenen AVDs via Android Emulator bekommt die Euphorie einen gewaltigen Dämpfer. Nach einer scheinbar ewigen Bootphase des virtuellen Devices stottert die App langsam vor sich hin und lässt schnell an den eigenen Fähigkeiten zweifeln. Es stellt sich die berechtigte Frage, warum dem so ist und was man dagegen machen kann.

Anders als Simulatoren, wie zum Beispiel dem xCode-iOS-Simulator, die lediglich den Softwarestack eines Systems abbilden, spiegelt ein Emulator zusätzlich die Hardware des zu emulierenden Systems wider. Das Resultat ist eine deutlich realistischere, virtuelle Umgebung – leider nicht selten zu Lasten der Performanz. Hier macht auch der Android Emulator keine Ausnahme. Für den Entwickler macht sich dieses Dilemma gleich in mehreren Punkten negativ bemerkbar.

Welche Probleme birgt der Android Emulator?

Zunächst einmal ist die „Start-up“-Zeit des virtuellen Devices extrem lang. Ein einmal gestarteter Android Emulator wird daher nur ungern wieder geschlossen. Das ist kein Problem, wenn man seine mobile Anwendung nur auf einigen wenigen Device-Konfigurationen laufen lassen möchte. Bei einem breit angelegten Test dagegen sind sehr gute Nerven und viel Geduld gefragt. Ein weiteres Problem stellt die allgemeine Performance des Android Emulators und somit auch der eigenen App innerhalb des Emulators dar. Diese hinkt in der Regel deutlich hinter der Performanz realer Devices hinterher. Verantwortlich hierfür sind die unterschiedlichen Instruction-Sets von ARM (Emulator) und x86 (Host), die eine performanzfressende Interpretation zur Folge haben. Last but not least ist da noch die fehlende Unterstützung der rechnereigenen GPU durch den Emulator. Dies wirkt sich insbesondere bei der Emulation von Tablets und bei grafiklastigen Apps negativ aus.

Die gute Nachricht: Es gibt einige nette Tricks, mit dem sich das Laufzeitverhalten des Android Emulators deutliche beschleunigen lässt. Let’s pimp up the Emulator …

Snapshot

Seit der Version r9 der Android Platform Tools (Januar 2011) ist es möglich, den aktuellen Status des Android Emulators bzw. eines spezifischen virtuellen Devices (AVD) als „Snapshot“ zu speichern, um ihn dann bei erneutem Start wieder herzustellen. Einmal gebootet, kann so das AVD später in wenigen Sekunden neu gestartet werden.

Die Aktivierung ist denkbar einfach. Im Android Virtual Device Manager muss lediglich die Emulatoroption „Snapshot“ innerhalb des Edit-Fensters des gewünschten AVDs angewählt werden. Ist dies geschehen, kann zusätzlich beim Starten des Devices – innerhalb der Launch-Options – mit „Launch from Snapshot“ und „Save to Snapshot“ das gewünschte Verhalten feinjustiert werden. Das Ergebnis ist beeindruckend. Die „Start-up“-Zeit verringert sich von einigen Minuten auf wenige Sekunden. Einmal gestartet bleibt der Emulator allerdings so langsam wie zuvor. Da scheint noch Luft nach oben für weitere Optimierungen zu sein.

Host GPU – bitte helfen!

Seit Android 4.0.3 a.k.a. API 15 bzw. den parallel erschienenen Android Plattform Tools r17 unterstützt der Emulator zusätzlich GPU Hardwarebeschleunigung. Anders formuliert macht sich der Emulator die GPU des Entwicklerrechners zunutze, was zu einer deutlich besseren Performanz führt – dies erwartungsgemäß insbesondere bei grafiklastigen Apps oder der Emulation eines Tablets mit vielen Pixeln. Um das Feature innerhalb des Emulators zu nutzen, muss wieder lediglich ein entsprechendes Häkchen in den Emulatoroptionen des ausgewählten AVDs gesetzt werden. Und hier kommt auch schon die erste Überraschung ins Spiel. Möchte man beide, bisher vorgestellten Optimierungen – Snapshot und GPU-Support – parallel aktivieren, meutert der AVD Manager. Grund hierfür ist, dass die Google-Entwickler den korrekten GPU-Support beim Wiedereinstieg in einen Snapshot nicht garantieren können und daher die Kombination beider Features von vornherein verbieten.

Möchte man übrigens die Option nicht generell für ein bestimmtes AVD setzen sondern lediglich bei Bedarf, kann man das oben beschriebene Verhalten auch via Command Line erreichen:

emulator –avd <avd-name> -gpu on

x86 verleiht Flügel

Nun aber zum eigentlichen Highlight der Tipps und Tricks (ebenfalls verfügbar seit Android 4.0.3): Dem aufmerksamen Leser mag aufgefallen sein, dass die wesentliche Performanzbremse in der Interpretation der ARM Instructions zu finden ist. Was liegt also näher, als hier den Hebel zur Optimierung anzusetzen. Der Schlüssel zum Erfolg? x86 Images und Virtual Machine Acceleration!

Viele CPUs liefern Erweiterungen zur performanten Ausführung von virtuellen Maschinen. Diese Tatsache nutzt auch der Android-Emulator für eine wirklich erhebliche Performanzsteigerung, die bei korrekter Installation sehr nahe an die Performanz echter Endgeräte heranreicht. Anders als bei den bisher gezeigten Verbesserungen sind allerdings einige Handgriffe vonnöten, um die gewünschte Optimierung, in Form der Installation einer Kernelerweiterung, auf dem eigenen Entwicklungsrechner zu realisieren. Sowohl unter Windows als auch unter Mac OS X muss zunächst die Installation des Intel Hardware Accelerated Exceution Managers (Intext HAXM) erfolgen. Dieser findet sich in dem Verzeichnis

<sdk>/extras/intel/Hardware_Accelerated_Execution_Manager

unter dem Namen IntelHAXM.exe bzw. IntelHAXM.dmg oder kann in seiner aktuellsten Version direkt bei Intel heruntergeladen werden. Und auch auf Linux basierten Systemen ist die Aktivierung denkbar einfach, da dort lediglich die KVM (Kernel-based Virtual Machine) installiert werden muss.

Startet man nach erfolgter Installation ein x86-basiertes Emulator Image, greift die Hardwarebeschleunigung unter Windows und OS X automatisch. Das erkennt man an der Ausgabe „HAX is working and emulator runs in fast virt mode“ – und natürlich an der deutlich verbesserten Performanz.

Unter Linux dagegen müssen dem Emulator noch einige Parameter mit auf den Weg gegeben werden, damit er von der Hardwarebeschleunigung Gebrauch macht:

emulator –avd <avd-name> -gemu –m 512 –enable-kvm

Alternativen

Möchte man sich partout nicht auf den Emulator des Android Platform Toolkits einlassen, existieren auch noch alternative Möglichkeiten. Ein möglicher Kandidat ist der Emulator von Genymotion, eine Weiterentwicklung des AndroidVM-Projekts. Der Genymotion Emulator fällt durch gute „Start-up“-Zeiten, hervorragende Performanz und einige nette Features, wie z. B. UI Controls zur Simulation von GPS-Daten oder des aktuellen Batteriestatus, positiv ins Auge. Ein weiteres Plus ist die direkte Integration eines Launchers sowohl in Eclipse als auch in Android Studio. Weniger schön dagegen ist, dass der Entwickler das gewünschte zu emulierende Gerät lediglich aus einer fest vorgegebenen Liste von vorkonfigurierten, virtuellen Devices auswählen kann. Das Erstellen oder gar Speichern eigener Konfigurationen dagegen ist nicht möglich. Ein weiterer Wermutstropfen ist die direkte Abhängigkeit des Emulators zu VirtualBox. Zielgruppe von Genymotion sind übrigens nach eigenen Angaben nicht nur Android-Entwickler sondern vor allem auch diejenigen, die Android-Anwendungen präsentieren wollen – zum Beispiel direkt beim Kunden vor Ort.

In etwa die gleiche Zielgruppe hat auch der webbasierte Emulator Manymo. Im Gegensatz zu allen anderen bisher vorgestellten Emulatoren muss für dessen Verwendung lediglich ein Browser vorhanden sein. Auch hier wählt der Anwender aus einer Reihe vorgefertigter Konfigurationen die passende aus und lädt anschließend sein APK in den Emulator – vorheriges, kostenloses Sign-in vorausgesetzt. Der Emulator selbst erinnert in puncto Performanz leider stark an das nicht gepimpte Pendant des Android Plattform Toolkits und ist somit sicherlich nur für Gelegenheitsnutzer geeignet oder für Personen, die sich der Installation eines echten Emulators verweigern.

Fazit

„Out of the Box“, also ohne Manipulation, ist der Emulator des Android Plattform Toolkits kaum zu gebrauchen. Lange „Start-up“-Zeiten, ruckelnde Grafiken und eine unterirdische Performanz bringen mehr Frust als alles andere mit sich. Bereits kleinste Tricks können allerdings helfen, eine deutlich bessere Performanz zu erreichen. CPU und GPU Acceleration sowie die alternative Verwendung von Snapshots lassen beinahe das Gefühl aufkommen, man würde mit einem realen Device arbeiten. Wer damit immer noch nicht zufrieden ist, kann auf Emulatoren alternativer Anbieter umsteigen, die z. B. zusätzliche Sensoren unterstützen. Man darf gespannt sein, was sich zukünftig am Emulatorhimmel noch so alles tut. In diesem Sinne: Stay tuned!

MobileTech Conference 2014MobileTech Conference
Mobile-Interessierte aufgepasst! Jede Menge spannende Sessions rund um Android, iOS und das Mobile-Web gibt es auf der MobileTech Conference, die vom 1. bis 4. September in Berlin stattfindet und mit mehr als 60 renommierten Mobile-Experten aufwartet.
Bei Anmeldung bis 31. Juli erhalten Teilnehmer der MobileTech Conference ein Android-Tablet kostenfrei und sparen mit den Frühbucherpreisen: www.mobiletechcon.de/tickets 

Aufmacherbild: Android with mobile phone cartoon vector von Shutterstock / Urheberrecht: Samuel Chesterman

Geschrieben von
Arne Limburg
Arne Limburg
Arne Limburg ist Softwarearchitekt bei der open knowledge GmbH in Oldenburg. Er verfügt über langjährige Erfahrung als Entwickler, Architekt und Consultant im Java-Umfeld und ist auch seit der ersten Stunde im Android-Umfeld aktiv.
Lars Röwekamp
Lars Röwekamp
Lars Röwekamp ist Gründer des IT-Beratungs- und Entwicklungsunternehmens open knowledge GmbH, beschäftigt sich im Rahmen seiner Tätigkeit als „CIO New Technologies“ mit der eingehenden Analyse und Bewertung neuer Software- und Technologietrends. Ein besonderer Schwerpunkt seiner Arbeit liegt derzeit in den Bereichen Enterprise und Mobile Computing, wobei neben Design- und Architekturfragen insbesondere die Real-Life-Aspekte im Fokus seiner Betrachtung stehen. Lars Röwekamp, Autor mehrerer Fachartikel und -bücher, beschäftigt sich seit der Geburtsstunde von Java mit dieser Programmiersprache, wobei er einen Großteil seiner praktischen Erfahrungen im Rahmen großer internationaler Projekte sammeln konnte.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: