Android

Gebruikte technieken

Android Studio Logo

Android Studio

De ontwikkeling van de Android apps doen wij in Android Studio. Dit biedt de perfecte ondersteuning om native apps te maken. Het is een erg fijne editor die een zeer goede autocomplete-functie en eenvoudige shortkeys heeft wat de snelheid van de app-ontwikkeling ten goede komt. Google brengt regelmatig updates uit voor Android Studio en voegt steeds nieuwe functionaliteiten toe, zoals recent de Android Profiler, waarmee je de netwerk verzoeken, cpu- en geheugengebruik van de app kunt monitoren tijdens de ontwikkeling. Hiernaast biedt de ingevoegde AVD-manager een ideale manier om verschillende soorten Android-toestellen te testen als emulator. AVD staat dan ook voor ‘Android Virtual Device’.

Er zijn ook verschillende plugins beschikbaar voor Android Studio die het ontwikkelen ook weer eenvoudiger maken. Voorbeelden hiervan zijn Parceler, die eenvoudig de `Parcelable` implementatie toevoegt aan een class; Firebase, die het toevoegen van Google Firebase voor je verzorgd; en Fabric, die op zijn beurt de library ‘Fabric’ eenvoudig toevoegt aan je code.

Java Logo

Java

Tot recent was Java de uitgelezen programmeertaal om de code voor Android apps in te schrijven. Het is een objectgeoriënteerde taal die grotendeels gebaseerd is op de programmeertaal C++. De keuze voor Java vanuit Android was een logische, omdat het een bekende taal is voor veel ontwikkelaars wat zorgt voor een lage instapdrempel.

Kotlin Logo

Kotlin

Tegenwoordig is de taal Kotlin in opkomst en ook daar maken wij gretig gebruik van. Kotlin zorgt ervoor dat je de classes beknopt, eenvoudig en goed leesbaar kan maken en houden. Het helpt bij het voorkomen van NullPointerExceptions dankzij het introduceren van optionals. Bij het gebruik van een `data class` in Kotlin wordt er op de achtergrond allerlei boilerplate code gegenereerd, zoals ‘equals’, ‘hashCode’, ‘toString’, etc. Het biedt ondersteuning voor functional programming, met `lambda-expressions`, mapping, folding, etc. Een ander groot voordeel ten opzicht van Java is de mogelijkheid om ‘extensions’ te gebruiken. Hierdoor hoef je de originele class niet aan te passen om toch functionaliteit te kunnen toevoegen.

jUnit Logo

Testing

Ook voegen we unit tests toe aan onze projecten en eventueel integration en ui tests. We maken daarvoor gebruik van JUnit, Mockito en Espresso. Daarnaast zijn we bekend met andere test tools zoals PowerMock en Robotium. Door tests toe te voegen aan een app kunnen we de juistheid, de functionele toepassing, en gebruiksvriendelijkheid verifiëren voordat we het publiceren. Het zorgt voor een snelle terugkoppeling bij fouten, vroege detectie van die fouten en het veiliger refactoren van de broncode.

Libraries

Om apps binnen een bepaald budget en tijdsbestek te kunnen ontwikkelen, proberen wij altijd te voorkomen dat we het wiel opnieuw aan het uitvinden zijn. Meestal gebeurt dit door onze eigen code te hergebruiken van andere projecten, maar soms lopen we tegen iets nieuws aan. In de meeste gevallen zijn er dan libraries beschikbaar die we kunnen gebruiken om een dergelijke uitdaging op te lossen. Op zo’n moment maken we dan ook graag gebruik van de expertise van anderen.

Naast de Google Support en Google Play libraries maken we ook gebruik van 3rd party libraries. Bekende voorbeelden hiervan zijn Retrofit voor de network requests, Picasso voor de afbeeldingen en Butterknife voor het koppelen van de widgets vanuit de xml aan de Java-code.

Eén van de technieken die worden ondersteund vanuit een Google library en die ervoor zorgt dat we snel kunnen ontwikkelen is data-binding. Hiermee wordt eenvoudig de UI geüpdatet op het moment dat de achterliggende data wordt aangepast.

Tijdens het ontwikkelen van een app komt het met grote regelmaat voor dat je een lijstje van een bepaald type object wilt weergeven. Dit doen we dan in een zogenaamde RecyclerView. Om dit eenvoudig te kunnen toevoegen hebben we een generic recyclerview adapter ontwikkeld. Lees hierover meer in deze blog post.

Material Design Logo

Design

Bij het ontwerpen van de apps wordt rekening gehouden met de UI die Android-gebruikers kennen, namelijk Material design. Wij volgen hierin de guidelines van Android en proberen op alle schermen de juiste componenten te gebruiken. Lees meer over onze aanpak van design op onze design pagina.

Google Play Logo

Google Play

Nadat de ontwikkeling gereed is voor een app, start de acceptatie-test voor de klant en/of eindgebruikers. Google Play biedt hier uitstekende ondersteuning voor. Zo hebben we beschikking over een ‘Alpha-channel’ om eerst een interne acceptatie-test te kunnen uitvoeren en ook over een ‘Beta-channel’, die we gebruiken om de app onder externe testers te verspreiden. Het aanmelden als tester gaat eenvoudig via een link die vanuit Google Play wordt aangeboden. Nadat je aangemeld bent als tester kan je de app gewoon uit de Play Store downloaden. Ook eventuele updates volgen via hetzelfde kanaal.

Fabric Logo

Fabric

Fabric werd hierboven al even genoemd als plugin van Android Studio. Het is een tool die ondersteuning biedt voor mobiele apps waarmee je het gebruik van een app kunt monitoren. Daarnaast kunnen we ook de prestatie van de app bijhouden. Als de app crasht, komt er hier een anoniem bug report bij te staan waardoor wij op afstand het probleem kunnen analyseren, oplossen en via een update aan de gebruikers beschikbaar kunnen stellen.

Git Logo

Git

Git is een versiebeheersysteem dat op de broncode beheert. Iedere wijziging in de code wordt overzichtelijk toegevoegd aan een repository via een commit. Alle commits worden lokaal opgeslagen. Zodra de code er klaar voor is, maar in ieder geval aan het einde van de dag, worden de gedane commits naar de git remote gepusht. Hiervoor maken wij gebruik van Github en Bitbucket. Deze structuur zorgt ervoor dat de broncode met bijbehorende wijzigingen door het gehele team in te zien zijn. Samenwerken gaat hierdoor ook extra eenvoudig, dankzij pull requests. Dan kan eenvoudig de broncode nagelopen en beoordeeld worden. Dankzij git zijn er altijd backups en oude versies van de code beschikbaar. Bij het toevoegen van nieuwe ‘features’ of ‘bug fixes’ kan er op een aparte versie (‘branch’) gewerkt kan worden.

Benieuwd naar de rest van onze werkwijze?