An dieser IDE geht kein Weg mehr vorbei: Android Studio 1.3

Dominik Helleberg

(c) Shutterstock / Marrvid

Android Studio ist die offizielle IDE um Android Applikationen zu entwickeln und hat sich seit der überraschenden Ankündigung auf der Google I/O 2013 schnell weiter entwickelt. Das erste „fertige“ 1.0 Release wurde im Dezember 2014 veröffentlicht und hatte gegenüber dem klassischen ADT PlugIn für Eclipse noch einige Defizite. Auf der diesjährigen I/O wurde ein Preview der Version 1.3 gezeigt, welche ab Ende Juli als finales Release verfügbar ist. In diesem Artikel werfen wir einen Blick auf die neuen Fetaures von Android Studio 1.3.

SDK Manager

Der bisher als Standalone-Applikation verfügbare SDK-Manager wurde ins Android Studio integriert. Der SDK Manager ist der Paket-Manager des Android SDKs. Er sorgt für die Updates der einzelnen Pakete und bietet dem Entwickler die gezielte Auswahl benötigter SDK-Komponenten an. Ein großer Vorteil der Integration ins Android Studio ist der damit verbundene regelmäßige Check auf aktuellere Pakete wie z.B. der Support Library, da beim Start der IDE direkt eine Benachrichtigung angezeigt wird, falls neue Versionen verfügbar sind. In diesem Zuge wurde auch die Installation des NDKs (Native Development Kit) mit in den SDK-Manager integriert.

Abb.1: SDK Manager

Abb.1: SDK Manager

Neue Tools

Bei der Migration des Eclipse-basierten ADT-Plug-ins auf Android Studio wurden weitere Tools direkt ins Android Studio integriert und dabei zum Teil wesentlich verbessert. Nachdem schon Trace View fester Bestandteil von Android Studio geworden ist, finden sich jetzt auch der Allocation Tracker und der Heap Dump Viewer in der neuen IDE ein.

Allocation Tracker

Der Allocation Tracker visualisiert die Anzahl neu erstellter Objekte über einen dezidierten Zeitraum. Dies ist zum Beispiel hilfreich, wenn die Applikation ungewünscht oft durch einen Garbage-Collector-Lauf unterbrochen wird und es damit zu Unterbrechungen bei Animationen oder beim Scrolling kommt. Der Allocation Tracker wird zur Laufzeit der Anwendung gestartet, den entsprechenden Button findet man im „Android“-Tool-Fenster unter dem „Memory“-Tab. Nach dem Start wird jedes neu erstellte Objekt erfasst, bis die Aufzeichnung beendet wird.

Die Auswertung der Ergebnisse erfolgt tabellarisch, wie aus Eclipse bekannt, und zusätzlich auch grafisch, entweder als rundes „Sunburst“-Diagramm oder rechteckig. Wichtig bei der Darstellung ist die korrekte Sortierung, die entweder nach Anzahl der erstellten Objekte (wenn man z.B. auf der Suche nach unnötiger Garbage-Collector-Ausführung ist), oder nach Größe der Objekte erfolgt (um z.B. Speicher-Probleme zu identifizieren).

Abb.2: Allocation Tracker

Abb.2: Allocation Tracker

Heap Snapshot Viewer (HPROF)

Der neue Heap Snapshot Viewer ist die Alternative zum MAT (Memory Analyzer) Plug-in unter Eclipse. Per Knopfdruck wird aus einer laufenden Applikation ein vollständiger Heap Dump, also ein Abbild aller Objekte und deren Beziehungen erzeugt. Dies ist hilfreich bei der Suche nach Memory Leaks, denn für jedes Objekt lässt der Referenzbaum aufzeigen, welcher an der Wurzel das sogenannte GC-Root ist, also die Referenz, die dafür verantwortlich ist, dass dieses Objekt im Speicher gehalten wird und nicht vom Garbage Collector gelöscht werden kann. 

Spannend hierbei sind vor allem größere Objekte wie Activities oder Bitmaps. Sollten diese öfter als benötigt im Heap Dump auftauchen, sollte man auf jeden Fall nach der Ursache forschen. Ein Heap Dump lässt sich per Click während der App-Ausführung im „Memory“-Tab des „Android“-Tool-Fensters erstellen. Die Konvertierung in das HPROF-Format und das Parsen erfolgt automatisch. Die Darstellung ist drei-geteilt und zeigt links oben eine Ansicht der erfassten Klassen.

Selektiert man eine Klasse, erhält man rechts daneben eine Ansicht der jeweiligen Objekte, also Instanzen der Klasse mit deren Eigenschaften und Heap-Größen. Möchte man herausfinden, warum eine Instanz im Speicher gehalten wird, sieht man im unteren Bereich auf den Referenzbaum. Dieser gibt uns die Möglichkeit, die Referenzen auf die Instanz zu überprüfen und die Ursache zu ermitteln.

Abb.3: Heap Snapshot Viewer

Abb.3: Heap Snapshot Viewer

Captures-Ansicht

Schon etwas länger vorhanden ist im Android Studio das „Captures“-Tool-Window. Hier werden alle erzeugten Snapshots und Traces gesammelt und angezeigt. Ein Doppelklick auf eine Datei öffnet das entsprechende Tool. Die Dateien werden im „/captures“-Verzeichnis des jeweiligen Projektes abgelegt und können bei Bedarf mit eingecheckt werden.

Abb.4: Captures Window

Abb.4: Captures Window

Native Code

Einer der größten Neuerungen in Android Studio 1.3 wird diejenigen Entwickler sehr freuen, die sich täglich mit dem NDK, also dem Native Development Kit, beschäftigen. Google spendiert den Android-Entwicklern eine ausgezeichnete C-/C++-Unterstützung in der IDE. Öffnet man eine entsprechendes .c / .cpp Datei, erhält man vollständigen Support für die typischen Sprachfeatures von C/C++, inklusive Refactorings, Code-Analyse etc. Google integriert hier die kommerzielle CLion-IDE von JetBrains in Android Studio und bietet sie der Android Community damit „for free“ an! Mit CLion kommt auch native-debugging mit in die IDE. Hier kann der Entwickler zwischen dem GDB und dem neuen LLDB Debugger wählen (unter Run / Debug Configurations -> Android Native -> „Native Debugger“). 

Damit nicht genug, bietet Android Studio noch ein ganz spezielles Feature an: Die IDE hat ein vollständiges Verständnis von JNI, dem Java Native Interface, und kann somit schon während der Entwicklungzeit sowohl die Java- also auch die native Seite des Codes analysieren und frühzeitig auf Fehler hinweisen. So checkt die IDE, ob die aus Java mit dem Keyword „native“ markierten Methoden im C-Code vorhanden sind und den von JNI vorgeschriebenen Namenskonventionen entsprechen. Über Code-Completion lassen sich die Methoden im C-Code erzeugen. Zusätzlich generiert die IDE schon typische Parameter-Konvertierungen (zum Beispiel für den Datentyp „String“). Damit werden dem Entwickler viele Arbeitsschritte speziell im JNI-Bereich erspart.

Leider ist der C/C++ Support zur Zeit noch als „Beta“-Feature markiert. Dies dürfte u.a. an der Problematik des Build-Systems liegen. Denn um alle Features nutzen zu können, muss der Entwickler auf das experimentelle Gradle-Plug-in für Android umsteigen, das sich zur Zeit mit Version 0.2 in der Beta-Phase befindet und eine modifizierte Syntax der build.gradle erfordert. Das „alte“ NDK-Build System wird noch unterstützt, allerdings muss hier das Property „android.useDeprecatedNdk=true“ in der lokalen gradle.properties-Datei gesetzt werden. Es bleibt abzuwarten, wie schnell das experimentelle Gradle Plug-in zum Standard wird, und welcher Migrationspfad für bestehende Projekte aufgezeigt wird.

Abb.5: C / C++ Editor

Abb.5: C / C++ Editor

Der Marshmallow kommt

… und mit ihm einige Neuigkeiten für den Android-Entwickler. Viel diskutiert und an anderen Stellen ausführlichst besprochen: Das neue Permission-System. Android Studio respektiert die Tatsache, dass der App zur Laufzeit Permissions vergeben und entzogen werden können. So überpüft die IDE, ob der Entwickler den aktuellen Zustand der Permission abfragt. Tut er das nicht, wird ein Fehler angezeigt und ein QuickFix angeboten. Weiterhin bietet die IDE einfachen Boilerplate Code, um den Benutzer nach der Berechtigung zu fragen. Dies wird für Applikationen aktiviert, die das Target SDK auf 23 oder höher gesetzt haben.

Abb.6: Runtime Permissions

Abb.6: Runtime Permissions

Annotations

Android Studio unterstützt eine Reihe von Android-spezifischen Annotationen, um die Codequalität und Inspektion zur Compile-Zeit zu unterstützen. So können Methoden markiert werden, welche zum Beispiel die Ausführung im UI-Thread erfordern. Ebenso können Integer-Konstanten markiert werden, um zu verdeutlichen, dass hier z.B. die ID einer Ressource oder ein Farbwert erwartet wird. Eine vollständige Liste findet sich hier. Diese Annotationen sollten auch in eigenen Methoden und Klassen verwendet werden, daher lohnt sich hier ein tiefer gehender Blick!

Debugger

Der ohnehin schon ausgezeichnete Java-Debugger von IntelliJ, der natürlich auch im Android Studio zum Einsatz kommt, wurde um ein paar Android-spezifische Features erweitert. Im Android-API kommen häufig Integer-Werte oder -Konstanten zum Einsatz, zum Beispiel für Farbwerte oder Ressource IDs. Der Debugger ist jetzt dazu in der Lage, beispielsweise auf Basis der zuvor beschriebenen Annotations Integer-Werte zur Laufzeit zu interpretieren. Dies funktioniert leider noch nicht überall, aber es lohnt sich, während einer Debug-Session bei einer nicht aussagekräftigen integer-Zahl auf „View as -> Android Typed Integer“ zu klicken, wie in der Abbildung zu sehen ist.

Abb.7: Debugger

Abb.7: Debugger

Databinding

Ebenfalls in „beta“ ist das Databinding Framework, welches zur Compile-Zeit durch Code-Generierung ein direktes Verbinden von View-Properties in XML an Java-Properties ermöglicht. Android Studio unterstützt die dafür eingeführte Expression Language in XML (wenn auch leider noch ohne Code-Completion) sowie die Einbindung der generierten Klassen in den Classpath. Weitere Informationen zum Databinding findet man im Android Developer Guide.

…und sonst?

Neben den besprochenen „größeren“ Features finden sich noch allerhand kleine, aber praktische Details in der neuen Android-Studio-Version. So wurden zum Beispiel einige Live Templates integriert, die es ermöglichen, log-Statements einzufügen oder einen „Parceable“-Block zu generieren. Eine gute Übersicht der neuen Live-Templates findet man unter „Preferences -> Editor -> Live Templates“ (siehe Abbildung 8).

Ebenfalls vereinfacht wurde die Einbindung von Google-Diensten, zum Beispiel GCM oder Google Analytics. Diese lassen sich jetzt aus dem „Project Structure“-Dialog auswählen, danach werden automatisch die Abhängigkeiten dem Projekt hinzugefügt und wenn möglich schon Boilerplate Code generiert.

Abb.8: Live Templates

Abb.8: Live Templates

Wie geht es weiter?

Aktuell ist bereits die Version 1.4 von Android Studio im „Canary“ Channel verfügbar. Das Release gibt einen Ausblick auf neuen Features, hierzu zählt ein Theme-Editor sowie ein Vector-Grafik-Editor mit der Option, die benötigten PNGs programmatisch zu generieren.

Auch wenn leider noch nicht alle Tools in Anroid Studio integriert wurden (Hierarchy Viewer, anyone?) zeigt sich, dass an dieser IDE kein Weg mehr vorbei geht. Die Qualität und Effizienz der App-Entwicklung ist mit Android Studio stark gestiegen, auch wenn es nach einem Eclipse-Umstieg am Anfang etwas ungewohnt ist, lohnt es sich langfristig auf jeden Fall.

API Summit 2018
Christian Schwendtner

GraphQL – A query language for your API

mit Christian Schwendtner (PROGRAMMIERFABRIK)

DDD Summit 2018
Nicole Rauch

Domain-Driven Design für Einsteiger

mit Nicole Rauch (Softwareentwicklung und Entwicklungscoaching)

Aufmacherbild: vector app development concept illustration von Shutterstock.com / Urheberrecht: Marrvid

Verwandte Themen:

Geschrieben von
Dominik Helleberg
Dominik Helleberg
Dominik Helleberg ist bei der inovex GmbH für die Entwicklung von mobilen Applikationen zuständig. Neben diversen Projekten im JME-, Android- und Mobile-Web-Umfeld hat er den JCP und das W3C bei der Definition von Standards für mobile Laufzeitumgebungen unterstützt.
Kommentare

Hinterlasse einen Kommentar

3 Kommentare auf "An dieser IDE geht kein Weg mehr vorbei: Android Studio 1.3"

avatar
400
  Subscribe  
Benachrichtige mich zu:
Markus Kohler
Gast

Der Heap Snapshot Viewer ist (noch keine echte) Alternative zum MAT. Dafür fehlen su viele Features. Aber immerhin der Dominator tree ist da, von daher besteht Hoffnung auf eine echte Alternative.