Mit dem Intel® HAXM Android-Anwendungen schneller testen und debuggen

Zusammenfassung

Dieses Dokument enthält nützliche Informationen für alle Android*-Entwickler, die mit der Leistung des Android-Emulators unzufrieden sind. Immer wieder haben wir von Android-Entwicklern gehört, wie langsam und frustrierend die Arbeit mit dem Emulator sei. Dies sollte aber nicht der Fall sein! Der Android-Emulator lässt sich mit dem Intel® Hardware Accelerated Execution Manager (Intel® HAXM) – bzw. der KVM für Linux* – um ein Vielfaches beschleunigen, so dass Sie Ihre Android-Anwendungen wesentlich schneller testen und debuggen können. Voraussetzung hierfür ist, dass Sie einen relativ neuen Computer mit Intel® Prozessor, aktivierter Intel® Virtualisierungstechnik und Microsoft Windows* oder Apple Mac OS* verwenden. Dieses Dokument beschreibt den Umgang mit dem Emulator und die Schritte, die für die Beschleunigung erforderlich sind. Zudem erfahren Sie, wie man mit dem NDK nativen x86-Code kompiliert und APKs mit nativen x86-Bibliotheken richtig in den Google Play Store hochlädt.

Inhalt

1. Einleitung
2. Installation
2.1. Voraussetzungen
2.2. Installation unter Windows
2.3. Installation unter Linux
2.3.1. Installation der KVM
2.4. Erstellen eines AVD (Android* Virtual Device)
3. Bewährte Methoden
3.1. Testen Ihrer Anwendung mit dem Emulator von Eclipse
3.2. Einreichen mehrerer APKs für verschiedene ABIs vs. Einreichen von Fat Binaries bei Google Play
3.3. Kompilieren Ihres NDK für x86
3.3.1. Hinzufügen des NDK-Pfads zu Ihrer Umgebungsvariablen
3.3.2. Kompilieren mit dem NDK
3.3.3. Alternativmethode für die Kompilierung mit dem NDK

1. Einleitung

Dieses Dokument beschreibt die Installation des Intel® Hardware Accelerated Execution Manager (Intel® HAXM), einer hardwaregestützten Virtualisierungsengine (Hypervisor), die die Intel® Virtualisierungstechnik (Intel® VT) zur Beschleunigung der Android*-Entwicklung unter Windows* nutzt. Zudem werden die Einrichtung einer hardwaregestützten KVM unter Linux* sowie bewährte Methoden zur nativen Kompilierung und Einreichung von x86-Apps beim Google Play Store für x86 erläutert.

2. Installation

2.1. Voraussetzungen

  • Das Android SDK muss installiert sein.
  • Ihr Computer muss mit einem Intel® Prozessor ausgestattet sein. Außerdem müssen die Intel VT-x, die EM64T und die Execute-Disable(XD)-Bit-Funktionalität über das BIOS·unterstützt sein.

2.2. Installation unter Windows

Nachdem Sie das Android* SDK installiert haben, öffnen Sie den SDK Manager. Unter „Extras“ finden Sie den Intel® HAXM.

Markieren Sie das Kontrollkästchen und klicken Sie auf die Schaltfläche „Install packages…“. Nach der Installation des Pakets wird der Status als „Installed“ angezeigt, was allerdings irreführend ist, da es nicht zutrifft. Das SDK kopiert lediglich die EXE-Datei des Intel HAXM auf Ihren Rechner; die Installation selbst muss erst durchgeführt werden.

Um die EXE-Datei zu installieren, suchen Sie auf Ihrer Festplatte nach IntelHaxm.exe (Mac OS X: IntelHAXM.dmg). Falls Sie alle Standardeinstellungen akzeptiert haben, finden Sie die Datei unter: C:\Programme\Android\android-sdk\extras\Intel\Hardware_Accelerated_Execution_Manager\IntelHaxm.exe.

Der Intel HAXM funktioniert nur in Kombination mit einem der auf Intel® Atom™ Prozessoren ausgerichteten x86-System-Images, die für Android 2.3.3 (API 10), 4.0.3 (API 15), 4.1.2 (API 16) und 4.2.2 (API 17) verfügbar sind. Diese Intel System-Images können genau wie die ARM-basierten Images über den SDK Manager installiert werden.

Nachdem Sie IntelHaxm.exe angeklickt haben, wird ein Begrüßungsbildschirm angezeigt:

Legen Sie die RAM-Zuweisung für den Intel HAXM·fest und klicken Sie anschließend auf „Next“. Im folgenden Bildschirm wird die Speicherzuweisung bestätigt. Wenn Sie die angezeigten Einstellungen verwenden möchten, klicken Sie auf Install.

Vor der Installation des Intel HAXM muss die Intel VT-x im BIOS aktiviert sein, da andererseits während der Installation der folgende Fehler auftritt:

Sollte dieser Fehler angezeigt werden, aktivieren Sie bitte im BIOS die folgende Funktion.

Als alternative Methode können Sie auch die erforderlichen Komponenten für den Intel HAXM und das x86-Emulator-System-Image direkt von der Website http://software.intel.com/de-de/android herunterladen.

2.3. Installation unter Linux

Die Schritte zur Beschleunigung des Android*-Emulators für Linux* unterscheiden sich von der Methode für Windows* und Mac OS X*, da der Intel® HAXM mit Linux nicht kompatibel ist. Stattdessen benötigen Sie die KVM (Kernel-basierte virtuelle Maschine). Die folgenden Schritte wurden mit Ubuntu* 12.04 durchgeführt und können bei anderen Linux-Distributionen leicht abweichen.

Wie unter Windows (und Mac OS X) müssen Sie zunächst das Android SDK von der Android-Entwicklerwebsite herunterladen. Dort finden Sie ein ADT-Bundle (Android Developer Tool), das sowohl die Eclipse* IDE als auch das Android SDK enthält. Laden Sie die ZIP-Datei herunter und extrahieren Sie sie auf Ihren Linux-Rechner. Achten Sie darauf, dass Sie die für Ihre Linux-Distribution richtige Version wählen (32- bzw. 64-bit). Die·geeignete Version können Sie mit dem folgenden Befehl einfach ermitteln:

file /sbin/init

Vor der Installation der für die KVM erforderlichen Pakete sollten Sie prüfen, ob Sie das neueste Repository verwenden. Geben Sie dazu bitte Folgendes ein:

sudo apt-get update

2.3.1. Installation der KVM

Die KVM ist eine vollwertige Virtualisierungslösung für Linux* auf x86-Hardware (d. h. Intel® VT). Bevor Sie die KVM installieren und ausführen, müssen Sie prüfen, ob Ihre CPU die Hardware-Virtualisierung unterstützt. Geben Sie dazu bitte Folgendes ein:

egrep –c ‘(vmx|svm)’ /proc/cpuinfo

Ist das Ergebnis 0, unterstützt Ihre CPU keine Hardware-Virtualisierung, was jedoch für die Ausführung der KVM erforderlich ist. Sollte das Ergebnis 1 oder höher sein, können Sie mit der Installation fortfahren. Allerdings sollten Sie dennoch prüfen, ob die Funktion im BIOS aktiviert ist (Abschnitt 2.2).

Falls Sie die KVM noch nicht installiert haben, beginnen Sie nun mit der Installation. Um zu prüfen, ob Ihr Prozessor die KVM unterstützt, geben Sie bitte Folgendes ein:

kvm-ok

Ist die KVM vorhanden, wird Folgendes angezeigt:

"INFO: Your CPU supports KVM extensions
INFO: /dev/kvm exists
KVM acceleration can be used"

Wenn Sie jedoch den folgenden Text sehen, müssen Sie die Intel® VT im BIOS aktivieren:

"INFO: KVM is disabled by your BIOS
HINT: Enter your BIOS setup and enable Virtualization Technology (VT),
and then hard poweroff/poweron your system
KVM acceleration can NOT be used"

Im nächsten Schritt werden die KVM und andere erforderliche Pakete installiert. Geben Sie dazu bitte Folgendes ein:

sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Wenn Sie die Konfiguration nicht ändern möchten, wählen Sie im nächsten Fenster „No configuration“:

Fügen Sie anschließend Ihren Anwender zu den Gruppen KVM und libvirtd hinzu.Geben Sie dazu bitte Folgendes ein:

sudo adduser your_user_name kvm
sudo adduser your_user_name libvirtd

Melden Sie sich nach der Installation neu an, damit die Änderungen übernommen werden. Überprüfen Sie die Installation abschließend mit dem folgenden Befehl:

sudo virsh -c qemu:///system list

Nun können Sie mit dem nächsten Schritt – dem Erstellen und Ausführen des AVD (Android Virtual Device) – fortfahren. Dieser Vorgang ist für Linux* und Windows* identisch.

2.4. Erstellen eines AVD (Android* Virtual Device)

Nachdem Sie das SDK und den Intel® HAXM – bzw. die KVM unter Linux* – installiert haben, können Sie ein virtuelles Gerät mit hardwarebeschleunigter Emulation erstellen. Legen Sie dazu im AVD Manager ein neues Gerät an. Als CPU/ABI muss Intel Atom (x86) ausgewählt sein. Diese Option erscheint nur dann in der Dropdown-Liste, wenn Sie das Intel® x86-System-Image installiert haben. Damit Grafiken flüssiger dargestellt werden, aktivieren Sie beim Erstellen der AVD die Option „GPU Emulation“.

Klicken Sie auf New und erstellen Sie Ihr x86-AVD. Achten Sie darauf, dass die gewählte API von einem x86-System-Image unterstützt wird. Zudem muss CPU/ABI auf x86 eingestellt und die GPU-Emulation (OpenGL ES*) aktiviert sein. Klicken Sie danach auf Create AVD, um das AVD zu erstellen.

Um das x86-AVD zu starten, klicken Sie bitte auf „Start“ und anschließend auf „Launch“.

Wenn die Installation·erfolgreich durchgeführt wurde, wird nach dem Start des Emulators ein Dialogfeld angezeigt, das darauf hinweist, dass der Intel HAXM im schnellen virtuellen Modus ausgeführt wird.

Falls Sie sich erneut vergewissern möchten, dass Sie ein x86-System-Image verwenden, können Sie im Emulator die Details jederzeit über „About phone“ abrufen.

Der mit dem Intel® HAXM bzw. der KVM erzielte Leistungsgewinn hängt unter anderem vom PC, Laufwerk·und Speicher ab, sollte aber das 5- bis 10fache betragen. Der Screenshot unten zeigt einen Vergleich zwischen einem x86/HAXM-AVD und einem ARM-basierten AVD. Das x86-AVD benötigte 15 Sekunden zum Booten in den Sperrbildschirm, das·AVD ohne Intel® Technik hingegen ganze 40 Sekunden.

[In Leistungstests verwendete Software und Workloads können speziell für die Leistungseigenschaften von Intel® Mikroprozessoren optimiert worden sein. Leistungstests, wie SYSmark* und MobileMark*, werden mit spezifischen Computersystemen, Komponenten, Softwareprogrammen, Operationen und Funktionen durchgeführt. Jede Veränderung bei einem dieser Faktoren kann andere Ergebnisse zur Folge haben. Als Unterstützung für eine umfassende Bewertung Ihrer vorgesehenen Anschaffung, auch im Hinblick auf die Leistung des betreffenden Produkts in Verbindung mit anderen Produkten, sollten Sie noch andere Informationen und Leistungstests heranziehen. Konfiguration: Bei diesem Testlauf wurde ein Mac Book Pro verwendet. Weitere Informationen finden Sie unter http://www.intel.com/performance”]

3. Bewährte Methoden

3.1. Testen Ihrer Anwendung mit dem Emulator von Eclipse

Mit dem Intel® HAXM können Sie den Emulator für den Test von sowohl NDK-basierten wie auch von Dalvik*-Anwendungen beschleunigen. Falls Sie für die Entwicklung Eclipse* einsetzen, lässt sich mit den folgenden einfachen Schritten sicherstellen, dass Sie beim Starten des Emulators den Intel HAXM verwenden.

Überprüfen Sie zunächst, ob Sie Ihr AVD wie in Schritt 2 beschrieben erstellt haben. Wenn das AVD bereit ist, wählen Sie Run As -> Run Configurations:

Anschließend sollte die folgende Seite angezeigt werden:

Wählen Sie das gewünschte AVD, indem Sie das entsprechende Kontrollkästchen markieren. Nachdem Sie Ihr AVD erstellt und die Konfiguration eingerichtet haben, beginnen Sie mit dem Kompilieren Ihres Projekts und führen Sie das Debugging mit dem Emulator durch, indem Sie Run As -> Android Application wählen. Damit wird das hardwarebeschleunigte AVD automatisch gestartet.

Nachdem das AVD gestartet wurde, sollten Sie den Startbildschirm Ihrer Anwendung sehen (nachdem der Bildschirm entsperrt wurde).

3.2. Einreichen mehrerer APKs für verschiedene ABIs vs. Einreichen von Fat Binaries bei Google Play

Bislang erfolgte die Einreichung entwickelter Anwendungen über Fat Binaries, in denen alle Bibliotheken und NDK-Dateien·enthalten waren. Dieser Ansatz ließ keine Unterscheidung der Architekturen zu. Anwender mussten das gesamte APK herunterladen – einschließlich der Dateien, die für eine spezielle Architektur·nicht relevant waren (so hatten beispielsweise x86-Anwender auch den ARM-Code und umgekehrt). Bei einer sehr großen Fat Binary musste der Anwender große Datenmengen herunterladen, die für das Gerät gar nicht gebraucht wurden. Dies ist bestenfalls bei APKs unter 20 MB·akzeptabel.

Intel/Google haben jetzt einen CPU-Filtermechanismus eingebaut, der es Ihnen ermöglicht, mehrere APKs mit den für die jeweilige Architektur benötigten Bibliotheken einzureichen. Hierzu müssen Sie lediglich den folgenden empfohlenen Versionsverwaltungscode befolgen.

Die erste Ziffer steht für die ABI („6“ für x86); darauf folgt die API-Ebene der Zielarchitektur („11“); dann die Bildschirmgröße („13“); und schließlich die Versionsnummer Ihrer Anwendung („3.1.0“).

Stellen Sie sicher, dass Ihre Versionsnummer mindestens 8 Stellen umfasst, und weisen Sie die höchste erste Ziffer der x86-Version zu. Im Beispiel oben ist dies „6“ für x86, „2“ für ARMv7 und „1“ für ARMv5TE. Damit werden x86-Versionen auf x86-Geräten bevorzugt und ARM-Versionen auf ARM-Geräten.

Wenn Sie diese Anweisungen befolgen, können Sie sicherstellen, dass Ihre Anwender das maximale Leistungspotenzial aus ihrem Gerät herausholen. Zudem lässt sich dadurch verhindern, dass Anwender aufgrund von Codeübertragungsproblemen versuchen, Anwendungen auf bestimmten Geräten auszuführen.

Weitere Informationen finden Sie hier: http://software.intel.com/de-de/articles/google-play-supports-cpu-architecture-filtering-for-multiple-apk.

3.3. Kompilieren Ihres NDK für x86

Dieser Abschnitt erläutert, wie Sie den NDK-Teil Ihrer Anwendung für x86 kompilieren.

Damit Ihre NDK-basierte Anwendung auf einem x86-AVD läuft, müssen Sie Ihre NDK-Bibliothek für die x86-Architektur kompilieren. Führen Sie dazu die folgenden einfachen Schritte aus:

Öffnen Sie ein Eingabeaufforderungsfenster und navigieren Sie zum Ordner Ihrer NDK-Dateien (siehe unten):

Stellen Sie sicher, dass Sie den Pfad für Ihre Umgebungsvariable festgelegt haben, damit Sie das Skript ndk-build überall ausführen können.

3.3.1. Hinzufügen des NDK-Pfads zu Ihrer Umgebungsvariablen

Um Ihre Umgebungsvariable für das NDK einzurichten, klicken Sie mit der rechten Maustaste auf Computer und wählen Sie Eigenschaften. Gehen Sie zu Erweiterte Systemeinstellungen und klicken Sie auf Umgebungsvariablen. Wählen Sie Path und klicken Sie auf Bearbeiten. Fügen Sie am Ende des Strings „Wert der Variablen“ den Pfad zum NDK-Stammordner (der die Datei ndk-build.cmd enthält, siehe Bild unten) hinzu:

3.3.2. Kompilieren mit dem NDK

Nachdem Sie in der Eingabeaufforderung zu Ihrem NDK-Ordner navigiert sind, führen Sie bitte Folgendes aus:

ndk-build APP_ABI:=all

Mit diesem Befehl wird Ihre NDK-Datei für jede verfügbare Architektur kompiliert, also für ARMv5TE, ARMv7, x86 und mips.

Um die Datei für eine bestimmte Architektur zu kompilieren, ersetzen Sie „all“ durch die gewünschten Architekturen. Beispiel:

ndk-build APP_ABI:=armeabi armeabi-v7a x86 mips

Achten Sie darauf, dass Sie Ihr Projekt in Eclipse* aktualisieren, um die neuesten Einstellungen zu übernehmen (z. B. die letzten vom Skript ndk-build erstellten Ordner). In den Ordnerbibliotheken Ihres Projekts sollten jetzt vier Ordner angezeigt werden, einer für jede Architektur.

Das x86-AVD kann jetzt mit Ihrer NDK-Anwendung verwendet werden.

3.3.3. Alternativmethode für die Kompilierung mit dem NDK

Um Ihren nativen Code für alle Architekturen, einschließlich x86, zu kompilieren, können Sie auch die Datei Application.mk (im Ordner jni) bearbeiten. Sollte die Datei Application.mk nicht vorhanden sein, können Sie sie selbst erstellen und anschließend den Befehl unten hinzufügen:

APP_ABI:=armeabi armeabi-v7a x86 mips

Wenn Sie nun die Batch-Datei, also das Skript ndk-build, ausführen, werden die Bibliotheken für alle verfügbaren Architekturen kompiliert.

Zur Vereinfachung können Sie auch „all“ verwenden, anstatt alle Architekturen aufzuführen:

APP_ABI:=all