Aan de slag met Android Studio

Voor het ontwikkelen van Android-applicaties bestaan er diverse ontwikkelomgevingen, waarvan het Eclipse-platform de meest prominente is. Na 5 jaar Eclipse-dominantie vond Google het tijd voor een compleet nieuwe ontwikkelomgeving: Android Studio. Deze IDE werd op Google I/O 2013 gepresenteerd door het Android SDK team. Google wil met deze IDE het ontwikkelproces van Android-applicaties beter stroomlijnen en de gebruikersinterface centraal stellen. Dit artikel geeft een eerste indruk.

IntelliJ IDEA
Het bedrijf Jetbrains produceert al geruime tijd verschillende ontwikkelomgevingen voor diverse programmeertalen, waarvan IntelliJ IDEA het vlaggenschip is voor Java-ontwikkeling.  De open source variant dient als basis voor Android Studio. Google heeft voor dit platform gekozen omdat het robuust en uitbreidbaar is.

Standaard biedt IntelliJ IDEA al veel functionaliteiten: Version Control via diverse plugins, Groovy en Java ondersteuning, refactoring en SmartType: intelligente code completion (zie afbeelding 1).

Afbeedling 1: SmartType begrijpt welke klassen Random inherit.

Ook ondersteunt IntelliJ ‘language injection’: de IDE is op de hoogte dat een String-representatie een ander taal voorstelt, bijvoorbeeld XML of een reguliere expressie (zie afbeelding 2).

Afbeelding 2: RegExp-injectie waarbij gelijk getoetst kan worden of het patroon voldoet.

IntelliJ biedt dus een solide basis. We gaan nu kijken welke features Google hieraan heeft toegevoegd in Android Studio.

Overzicht features
Android Studio heeft een aantal features die ik in de volgende secties nader onder de loep neem:

  • Gradle buildsysteem
  • Layout preview
  • AppEngine Cloud Endpoints-integratie
  • ADT TranslationManager

De huidige versie van Android Studio is beschikbaar als ‘Early Access Preview’: je moet rekening houden met wat foutjes her en der en ontbrekende functionaliteit. Maar met bijna elke week een update, zal Android Studio snel volwassen worden.

Gradle buildsysteem
Eén van de aspecten van het stroomlijnen van het ontwikkelproces uit zich door het inzetten van een uniform buildsysteem op basis van Gradle. Dit geeft de ontwikkelaar volledige controle op het compile/deploy proces: zowel in de IDE als op een continuous integration server, en met telkens hetzelfde resultaat. In combinatie met Maven voor dependency management, is dit een krachtige tool die op den duur de losse Ant scripts en de Eclipse builders zal gaan vervangen. Voor oudere projecten kan Eclipse een build.gradle file genereren dat gebruikt kan worden door Android Studio. Een voorbeeld van deze flexibiliteit is het werken met ‘productFlavors’, die gebruikt worden in combinatie met ‘buildTypes’ om verschillende ‘build variants’ te definiëren. Standaard ‘buildTypes’ zijn ‘release’ en ‘debug’.

Opmerking: De huidige versie op moment van schrijven van dit artikel gaf pas een lijst met build-varianten na het opnieuw opstarten van de IDE. De melding rechts laat ons nog even weten dat de IDE nog niet helemaal compleet is.

Aantal ‘productFlavors’ gecombineerd met het aantal build types geeft het aantal build varianten.

Door de verregaande integratie met de IDE kan voor specifieke ‘build variants’ gekozen worden. Zo is het mogelijk om voor de alpha-versie extra permissies in te zetten die niet van toepassing zijn voor de overige varianten. De IDE markeert ter verduidelijking de bijbehorende (re)source folders. Naast een statische manier van configureren, biedt Gradle ook de mogelijkheid om logica in het script te definiëren. Zo kan de configuratie worden uitgebreid met het volgend stukje Groovy-code, dat er voor zorgt dat elk ‘buildType’ een aparte package suffix krijgt:


android.buildTypes.each {
    type -> type.packageNameSuffix = ".$type.name"
}

Voor builden vanaf de commandline kun je in de project folder het commando ‘./gradlew tasks’ gebruiken. Dit levert een behoorlijke lijst met mogelijke taken op. De belangrijkste hiervan zijn :

  • Assemble: assembleert alle build varianten. Dit kan ook specifieker: ‘assembleFreeDebug’ (aFD) zorgt voor het packagen van de gratis debug-variant uit ons voorbeeld.
  • Check:  dit commando start bijvoorbeeld code quality tooling op (indien geconfigureerd).
  • Build: combinatie van assemble en build.
  • Clean: schoont de build-directory op.

Het uitweiden over alle mogelijkheden van het buildsysteem gaat te ver voor dit artikel; daarvoor verwijs ik naar de referenties.

Layout preview
Dit is de meest opmerkelijke feature van Android Studio. Tijdens het bewerken van de layout-XML, krijg je een dynamische preview te zien van het scherm in de geselecteerde taal. Daarbij markeert de IDE het onderdeel dat je op dat moment bewerkt. Zo kan snel een potentieel probleem worden ontdekt als voor een bepaalde taal een label te lang blijkt te zijn. Ook is de preview renderer foutbestendig;  bij een tikfout in de layout-XML zal alleen dat onderdeel niet gevisualiseerd worden en geeft de IDE direct een hint om het euvel te verhelpen.

Layout preview met device frames.

 Layout preview met een XML-fout.

Code editor
Tijdens het bewerken van je code zijn er een aantal extra features beschikbaar, waaronder ‘String Reference Folding’: in de editor is dan de waarde van een referentie zichtbaar, in plaats van de sleutel.  Ook referenties naar icons worden getoond: deze zijn in de kantlijn zichtbaar.


String folding en icoon-presentatie.

AppEngine Cloud Endpoints integration
Google AppEngine is een platform voor het ontwikkelen en hosten van webapplicaties. Android Studio bevat ondersteuning voor het integreren met AppEngine, maar deze feature valt wat mij betreft een beetje uit de toon. Het lijkt een poging om het ontwikkelen van Android-applicaties in combinatie met AppEngine te stimuleren. De feature kan met behulp van een wizard cliënt-code genereren voor het koppelen met een webapplicatie die op AppEngine draait.

ADT Translation manager
Voor het meertalig maken van apps kan deze plugin alle ‘Resource Strings’ uploaden via een Google Developer Account. Via de vertaalservice van Google kun je de resources laten vertalen in bijna elke gewenste taal, uiteraard tegen een (geringe) vergoeding.

Conclusie
Naast een nieuw splashscreen en kekke iconen heeft de preview-versie van Android Studio al aardig wat interessante features te bieden. De’ layout preview-feature’ is hierbij degene die het meest in het oog springt.

Het uniforme buildsysteem lijkt een verstandige keuze maar vergt wat gewenning voor de fervente Maven gebruiker.  Bij het testen van deze feature bleek de IDE dan ook nog niet helemaal compleet te zijn.

De AppEngine cloud endpoints integratie had Google wat mij betreft weg kunnen laten. In plaats hiervan had een generieke client/server oplossing niet misstaan.

Alles bij elkaar genomen is de nieuwe IDE een welkome toevoeging aan het Android ontwikkel- ecosysteem.

Develop with pleasure, develop with Android Studio!

Referenties

Android Studio

IntelliJ IDEA: Ten tijde van het schrijven van dit artikel blijkt ook Jetbrains zelf versie 13 EAP (codename Cardea) als download aan te bieden. Deze versie beschikt over alle features van Android Studio, met uitzondering van de AppEngine endpoint integration en Android wizards.

GRADLE: Gradle is een ‘build system’ dat voortbouwt op de concepten van Apache Ant en Apache Maven. Configuratie vindt plaats via een Groovy-gebaseerd DSL configuratiescript, in tegenstelling tot XML-configuratie van de meer traditionele systemen.

gradle.org

tools.android.com/tech-docs/new-build-system/user-guide

developers.google.com/events/io/sessions/32523664