C++ goes Android

Intel-C++-Compiler – Android-Entwicklung mal anders
Kommentare

Wer seine Android-Apps in C oder C++ entwickeln möchte, kann sich freuen: Der Intel-C++-Compiler richtet sich an alle Entwickler, die genau das machen.

Er reiht sich damit in ein immer breiter werdendes Sortiment von Tools ein, die Intel für die Android-Entwicklung anbietet. Google unterstützt die Entwicklung in den Programmiersprachen C und C++ mit dem Native Development Kit (NDK). Das NDK enthält mehrere Cross-Compiler, Bibliotheken und Headerdateien, die für die Android-Entwicklung notwendig sind. Ein Cross-Compiler ist für die native Entwicklung unter Android stets erforderlich, da sich Android in wichtigen Punkten von den Standard-Linux-Distributionen unterscheidet. So wurde beispielsweise die C-Bibliothek „Bionic“ eigens für Android entwickelt.

Der Compiler

Der Intel-C++-Compiler für Android basiert auf dem C++-Compiler für Linux, der sich vor allem im High Performance Computing (HPC) branchenweit einen Namen gemacht hat. Eine der Stärken ist die automatische Vektorisierung von Schleifen. Spiele und Multimediaanwendungen profitieren besonders hiervon.

Der Compiler steht für alle gängigen Betriebssysteme zur Verfügung: Microsoft Windows, Linux und OS X. Die Installation setzt jedoch ein installiertes Android NDK voraus. Der Compiler kann sowohl in der NDK-Build-Umgebung, in Eclipse und in einer so genannten Standalone Environment verwendet werden.

Verwendung in der NDK-Build-Umgebung

Die NDK-Build-Umgebung ist Bestandteil des Android NDKs. Sie erleichtert die Entwicklung von Cross-Platform-Programmen für Android erheblich. Die NDK-Build-Umgebung basiert auf der GNU-Make-Umgebung.

Das NDK unterstützt unterschiedliche so genannte Toolchains. Eine Toolchain beschreibt hierbei eine komplette Compilerumgebung. Das aktuelle Android NDK Version 9c beinhaltet die Compilerumgebungen GCC 4.6, GCC 4.8 und LLVM 3.3. Der Intel-C++-Compiler für Android fügt sich bei der Installation als weitere Compilerumgebung nahtlos in das NDK ein.

Um das Beispiel hello-jni, das Bestandteil des Android NDKs ist, mit dem Intel-Compiler zu übersetzen, ist es notwendig, die passende Compilerumgebung auszuwählen. Öffnen Sie die Kommandozeile, wechseln Sie in das Verzeichnis des hello-jni-Beispiels und starten Sie ndk-build mit den folgenden Optionen:

cd %NDK_DIR%sampleshello-jnijni
%NDK_DIR%ndk-build V=1 -B NDK_TOOLCHAIN=x86-icc APP_ABI=x86

Die verwendeten Optionen für ndk-build haben folgende Bedeutung:

  • V=1: aktiviert die ausführliche Ausgabe (optional)
  • -B: erzwingt eine komplette Übersetzung (optional)
  • NDK_TOOLCHAIN=x86-icc: verwendet den Intel-Compiler für die Übersetzung
  • APP_ABI=x86: kompiliert für die Zielarchitektur: x86 (optional)

Auf der Kommandozeile werden alle Befehle ausgegeben, die die NDK-Build-Umgebung ausführt, um das hello-jni-Projekt zu übersetzen. Der verwendete Compiler ist hier sichtbar und es sollte icc.exe für C-Quelltext oder icpc.exe für C++-Quelltext ausgeführt werden:

C:IntelBeaconMountainNDKsampleshello-jni> ....ndk-build V=1 NDK_TOOLCHAIN=x86-icc APP_ABI=x86
...
C:/Intel/cc_android_14.0.0.014//bin/ia32/icc.exe ...
...

Verwendung in Eclipse

Der Intel-Compiler für Android kann auch direkt aus der Eclipse-Entwicklungsumgebung verwendet werden. Durch die Integration des Compilers in das Android NDK muss lediglich eine Application.mk-Datei im Verzeichniss /jni/ des Android-Projekts mit folgendem Inhalt erzeugt werden (Abb. 1):

APP_ABI:=x86
NDK_TOOLCHAIN:=x86-icc

Zukünftig wird das Projekt automatisch mit dem Intel-Compiler übersetzt. Für den Entwickler ist der Wechsel des Compilers transparent. Der Arbeitsablauf innerhalb Eclipse für das Erzeugen, Ausführen und Debuggen der Applikation ändert sich hierdurch nicht.

Abb. 1: Eine kleine Änderung, und schon ist der Intel-Compiler eingebunden

Ausgewählte Compilerfunktionen

Der Intel-Compiler zeichnet sich nicht nur durch seine Kompatibilität zu GCC aus, er bietet darüber hinaus auch erweiterte Funktionen an. Sie vereinfachen die Entwicklung von Applikationen in C und C++ und helfen insbesondere, die Applikation zu optimieren.

Der Compiler beinhaltet spezielle Optimierungen für die momentan verfügbaren x86-Plattformen für Handys und Tablets. Diese können in der Android.mk-Datei der zu übersetzenden Applikation konfiguriert werden. Hierfür wird die Variable APP_CFLAGS definiert bzw. um die Option –xATOM_SSSE3 erweitert. Diese Option konfiguriert den Compiler für Prozessoren, die auf der Mikroarchitektur „Saltwell“ basieren. Das Setzen dieser Option ist generell zu empfehlen.

Eine erweiterte Möglichkeit zur Optimierung bietet die Option -ipo (Interprocedural Optimization). Ist IPO aktiviert, erzeugt der Compiler zunächst aus den Sourcefiles Zwischenobjekte, um sie später während des Linkens als Einheit zu optimieren. Dadurch sind deutlich weitergehende Optimierungen möglich, da ohne IPO die Sourcefiles einzeln übersetzt und optimiert werden. Vorteile ergeben sich hierdurch beispielsweise durch erweitertes Inlining von Methoden und bei der Verwendung von Konstanten über mehrere Quelldateien hinweg.

Fazit

Performancekritische Anwendungen können mithilfe des Intel-C++-Compilers für Android eine erhebliche Geschwindigkeitssteigerung auf x86-basierenden Smartphones und Tablets erfahren. Hierfür ist ein Umschreiben des Quellcodes in den meisten Fällen nicht erforderlich. Eine Testversion des Intel-C++-Compilers für Android kann von hier heruntergeladen werden.

Aufmacherbild: Android robot sitting with a Tablet Computer. Isolated on white background von Shutterstock / Urheberrecht: Kirill__M

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -