Bits&Chips: Een kijkje onder de motorkap van Android
1 of 5
http://www.bits-chips.nl/nieuws/bekijk/artikel/een-kijkje-onder-de-moto...
Achtergrond Een kijkje onder de motorkap van Android 27 januari 2010 In drie jaar tijd ontwikkelde Android zich van een vaag gerucht tot een interessant platform voor mobiele telefoons. Ondertussen staan ook diverse projecten buiten de mobieltjes te trappelen om het platform te gebruiken. Klaas van Gend en Peter Vandenabeele over ontwikkelen met en de eigenaardigheden van het platform. Samen met de Open Handset Alliance bracht Google in november 2007 Android uit als een opensource besturingssysteem voor smartphones. Het heeft een waar huzarenstukje afgeleverd door in drie jaar een volledig nieuw mobiel platform uit de grond te stampen. Android is gebaseerd op de Linux-kernel, maar als je het platform vergelijkt met een ‘standaard’ Gnu/Linux-systeem zoals Opensuse of Openembedded, dan houden de overeenkomsten al snel op. Op wat details na (Freetype, LibPNG, SQLite) zijn de gewone Linux-bouwstenen afwezig: geen Gnu C Library, geen X Window System, geen standaard Java-runtime, geen UDev voor hot-plugging. De licentievoorwaarden zijn een duidelijke drijfveer voor sommige van deze keuzes. Het systeem is daarnaast losjes gebaseerd op Java: toepassingen worden in principe in deze taal ontwikkeld en hebben, anders dan bij andere mobiele-Java-runtimes, volledige toegang tot de systeembronnen. Het Android-platform draait boven op een aangepaste Linux-kernel. De gewone kernel van Linus Torvalds is op dit moment helaas nog niet geschikt. Behalve de daarin ontbrekende hardwareondersteuning voor specifieke mobiele chipsets heeft het Android-team ook een aantal bijzondere wijzigingen aangebracht. Voor het eerste project had het één duidelijke prioriteit: ervoor zorgen dat de eerste telefoon, de HTC G1, de deadline haalt. Daarvoor zijn nogal wat bochten afgesneden: bestaande subsystemen voor bijvoorbeeld logging en stroombesparing zijn opnieuw geïmplementeerd en het team heeft zich heel sterk gericht op één enkele chipset van Qualcomm. Dat is niet de aanpak die in de Linuxgemeenschap gebruikelijk is, dus toen deze wijzigingen naar buiten kwamen, was het commentaar dan ook niet van de lucht.
De Android-ontwikkelkit komts standaard met een emulator. Deze demo-app is te downloaden op www.opentux.nl/artikelen/bc/android.
2/1/2010 11:11 AM
Bits&Chips: Een kijkje onder de motorkap van Android
2 of 5
http://www.bits-chips.nl/nieuws/bekijk/artikel/een-kijkje-onder-de-moto...
De losse drivers zijn destijds bijna allemaal opgenomen in de staging tree van de kernel. Deze is speciaal voor Revolutie in het land van de smartphones stuurprogramma’s die nog niet voldoende kwaliteit hebben. Helaas bleek niemand bereid (ook Google niet!) om de code te onderhouden of te verbeteren, dus enkele versies later werd deze weer verwijderd. Java-puinhoop Boven op de kernel draait een aantal opensource componenten die samen het platform vormen. De meest in het oog springende is Dalvik, de nieuwe Java-interpreter voor Android. Dalvik gebruikt standaard Java-bytecode, maar deze wordt voor uitvoering vertaald naar Dalvik-bytecode. De interpreter is helemaal van de grond af geschreven, enerzijds om het geheugengebruik te optimaliseren en anderzijds waarschijnlijk ook om de invloed van Sun in te perken (zie kader). Androids C-bibliotheek Bionic vindt zijn oorsprong in BSD, maar is flink gestript ten opzichte van dit besturingssysteem: er is geen volledige multithreading, geen standard template library en geen gewone interprocescommunicatie. Het laatste is opgelost met de kerneldrivers. Bionic is dus kleiner en hanteert een BSD-licentie. Voor tweedimensionale graphics is er de SGL-omgeving, die is gebaseerd op een XML-paginabeschrijving. OpenGL/ES verzorgt de 3D-graphics. Diverse onderdelen van Android maken onder water ook gebruik van OpenGL voor het versnellen van de 2D-graphics. Als HTML-render-engine is Webkit beschikbaar. Deze is oorspronkelijk geschreven voor KDE en sindsdien ook gebruikt in de Safari-browser van Apple, Googles Chrome-browser en Nokia’s Series 60-platform. Een goede browser is natuurlijk belangrijk voor een bedrijf als Google. Android beschikt ook over SQLite als ingebouwde database. Hiermee zijn data en configuraties efficiënt op te slaan en tussen toepassingen te delen. Voor gewone applicatieontwikkelaars is dit allemaal minder van belang. Zij gebruiken de Api’s vanuit Java. Zo is er de eenvoudig te gebruiken Webview-class, die een webpagina kan downloaden en weergeven. Verder zijn er rechtstreekse classes voor 2D-graphics, Bluetooth en WLan. Deze interfaces tonen dat Google wat geleerd heeft van de puinhoop van Java: er zit een consequentere structuur in de Api’s en Android bevat een subset van de Apache Harmony Java SE 5.0-bibliotheken, waaronder bijvoorbeeld java.sql, java.util (generics) en een deel van het Java Security Framework. Telefoonboek Om een Android-applicatie te schrijven, moet de SDK worden geïnstalleerd op een ontwikkelsysteem. Omdat het platform nogal snel evolueert, is deze softwareontwikkelkit opgesplitst in een SDK-gedeelte dat bestaat uit een aantal Eclipseplug-ins en een platformgedeelte dat ondersteuning biedt voor een specifieke Android-release. Het SDK-deel kan beschikken over meerdere platforms en de meeste ontwikkelaars zullen ze gewoon allemaal willen installeren om voor verschillende versies te kunnen testen. Tussen release 1.5 (Cupcake) en 2.0 (Eclair) zit bijvoorbeeld een groot verschil in het aantal ondersteunde beeldschermresoluties. Android behandelt beeldschermresoluties sowieso wat stiefmoederlijk. In de eerste drie releases (1.0, 1.1 en 1.5) ondersteunde het alleen QVGA (320 bij 480). Dit was op meerdere plaatsen hardgecodeerd in het platform om de eerste mobieltjes snel in de winkel te krijgen. Latere versies stonden pas enkele andere resoluties toe. Dat zorgt er nu wel voor dat ontwikkelaars hun toepassingen nu een keer of vier moeten testen – voor elke ondersteunde schermresolutie. En de verschillen zijn groot: op dit moment varieert de resolutie van 240 bij 320 tot 852 bij 480 pixels.
De Nook-e-reader van Barnes & Noble was een van de eerste niet-telefoontoepassingen van Android. Hoewel het niet verplicht is om Eclipse te gebruiken, zullen weinig mensen eromheen kunnen. Google heeft een complete en geïntegreerde SDK afgeleverd rond dit IDE-platform. Het starten van een nieuw Android-project gaat via de project-
2/1/2010 11:11 AM
Bits&Chips: Een kijkje onder de motorkap van Android
3 of 5
http://www.bits-chips.nl/nieuws/bekijk/artikel/een-kijkje-onder-de-moto...
wizard. Deze maakt alle gestandaardiseerde mappen en bestanden aan die nodig zijn voor de ontwikkeling van een app. Belangrijk is het manifest. Daarin zijn alle instellingen te vinden, waaronder de capabilities die een applicatie verwacht van Android zoals netwerk- of gps-toegang, telefoonboek en het uitstellen van suspend voor bijvoorbeeld spelletjes. Andere Eclipse-plug-ins laten onder meer toe om de gebruikersinterface grafisch te ontwerpen. Belangrijk is ook de mogelijkheid om vanuit Eclipse de debugger te starten. Standaard komt Android met een softwareemulator, maar als je toevallig een ontwikkeltelefoon of -bord hebt liggen, dan zijn deze ook over USB aan te spreken. Eclipse uploadt dan de toepassing naar de emulator of hardware en start deze, waarna de debugger zijn werk kan doen. De Android-website bevat enkele leuke tutorials en een uitgebreide class-documentatie. Deze zijn direct toegankelijk in Eclipse tijdens het kloppen van de code. Overerven Omdat binnen Android een aantal GUI-concepten opnieuw zijn uitgewerkt, is ook het taalgebruik maar weer eens verrijkt met een paar nieuwe termen. De meeste toepassingen hebben tenminste één pagina met een GUI en elke pagina heet in Android een activity. Als de gebruiker wegnavigeert van de activity, dan wordt deze in meerdere stappen in slaap gesust. Applicaties zonder GUI heten services. Om te zorgen dat een muziekspeler kan doorspelen als de gebruiker in zijn Facebook-applicatie zit, wordt een muziekspeler typisch opgebouwd uit een aantal activities voor de muziekkeuze en draait de daadwerkelijke speler als een service. Om ervoor te zorgen dat services kunnen reageren op nieuwe verzoeken en voor het uitwisselen van data tussen toepassingen zijn er de Broadcast Receiver- en Content Provider-interfaces. Een asynchroon mechanisme genaamd Intent wordt gebruikt om berichten te versturen tussen de bovenstaande concepten. Intents worden gebruikt om een applicatie te starten, maar ook de communicatie tussen de muziekservice en de muziek-activity gaat via Intents. Natuurlijk zijn al deze items classes in Android en moet de programmeur gedrag uit de standaardklassen laten overerven om zijn eigen toepassing te schrijven. Intimi Dat de Google-ontwikkelaars bochten hebben afgesneden, werd pijnlijk duidelijk toen andere bedrijven Android wilden gaan gebruiken. Qualcomm heeft er duidelijk garen bij gesponnen. Mobiele-processorfabrikanten als TI met zijn Omap en Freescale met I.MX zetten direct teams aan het werk om Android ook op hun platforms aan de gang te krijgen. Daarbij liepen ze tegen echte hacks aan, zoals de hardgecodeerde schermresoluties, hardwareafhankelijke touchscreendrivers in plaats van het generieke TSlib en lelijke constructies met betrekking tot hot-plug en systeeminitialisatie. Bovendien werd duidelijk dat de gepubliceerde broncode niet de echte ontwikkel-trees waren. Buiten de intimi was iedereen dus op zichzelf aangewezen. Nog groter bleken de problemen toen ports naar X86 en PowerPC aan bod kwamen. De programmeurs hebben zich duidelijk niet bekommerd om endianness-problemen en bestanden als keymaps zijn alleen gecompileerd beschikbaar – little endian natuurlijk. Op dit moment is de meerderheid van de beschikbare mobieltjes gebaseerd op Qualcomm. Sinds de Motorola Droid uitkwam, is ook de Omap-ondersteuning officieel compleet. Maar wil je een mobieltje maken gebaseerd op een andere processor, verwacht dan een boel kernelproblemen. Infrarood Toch willen diverse bedrijven graag Android toepassen in andere apparaten dan mobieltjes. Door zijn opensource karakter en dan specifiek de BSD-achtige licentie is de software vrij aan te passen en te integreren in commerciële producten. De GUI oogt mooi, werkt vlot op een embedded processor (typisch vanaf 500 MHz) en ondersteunt veel multimediafuncties. De ontwikkelingen in Android die voor een goede bruikbaarheid moeten zorgen in toepassingen voor het brede publiek zijn natuurlijk mooi meegenomen om ook de gebruikers van embedded systemen een vlotte en intuïtieve interface aan te bieden. Voor toepassingen zonder grafische interface is het niet zo zinvol Android toe te passen. Een standaard embedded Linux-configuratie lijkt dan beter geschikt. Potentiële toepassingen zijn er legio. Op de afgelopen Consumer Electronics Show was er zelfs een magnetron met een Android-interface. Een van de eerste officieel beschikbare producten is de Nook, de e-bookreader van de Amerikaanse boekenwinkel Barnes & Noble. Dit apparaat combineert een groot zwart-wit E Ink-display met een kleuren-TFT-scherm op Android. Hiermee heeft de Nook een aantal voordelen boven de knopjesinterface van Amazons Kindle. De ontwikkelaars hadden als voordeel dat de Nook nog steeds veel lijkt op een mobieltje – met een tweede scherm. Ook zitten er twee projecten voor draagbare spelcomputers in de pijplijn. Alweer niet al te ver van het concept van een mobieltje verwijderd, alleen dan zonder telefoongedeelte. Jammer genoeg bleek dan weer dat de mediaspeler de telefoonstack gebruikt. Van een iets andere orde is de belangstelling uit settopboxland. Android heeft hier als voordeel dat het een flitsende UI heeft. Het grootste nadeel van het platform voor deze markt is dat settopboxen over het algemeen worden bestuurd met een afstandsbediening. Daarom moet er ondersteuning voor infraroodcommunicatie worden toegevoegd en moet de UI
2/1/2010 11:11 AM
Bits&Chips: Een kijkje onder de motorkap van Android
4 of 5
http://www.bits-chips.nl/nieuws/bekijk/artikel/een-kijkje-onder-de-moto...
worden Sinds de herschreven introductie voor vangebruik Androidmet in 2007 een afstandsbediening. zijn tientallen telefoons Deze van markt vooral lijkt HTC, de belangrijkste Motorola, Samsung motivatie enom SonyEricsson Android geschikt te maken voor Mips en PowerPC. Wanneer Intel binnenkort met een X86-gebaseerde settopboxchipset op de proppen komt, kan dat nog leuk worden. Ook vanuit industriële hoek is er interesse. Veel Windows CE-gebaseerde systemen worden oud en Android/Linux lijkt een mooie vervanger. Dit is voorlopig nog toekomstmuziek, hoewel diverse bedrijven al aan Android-ondersteuning werken. Sommigen – waaronder veel gamesfabrikanten – willen echter helemaal niets van doen hebben met alweer een nieuwe UI-standaard. Maar omdat de oorspronkelijke Java-belofte van universele porteerbaarheid niet echt is uitgekomen en ook de Iphone incompatibel is met veel systemen, zoeken ze andere uitwegen. Bedrijfjes als Antix Labs en Ideaworks zijn hard bezig om cross-platform spelletjestoolkits te bouwen die zowel op Blackberry, Iphone en Symbian als op Android draaien. De programmeertaal is C of C++, want ook dat kan (met wat trucs) op Android. En Google zelf? Dat bouwt naast Android rustig verder aan webgebaseerde applicaties. Ook die werken op meerdere platforms. Klaas van Gend is senior solutions architect bij Montavista Software, dat zich specialiseert in embedded Linux-software en -diensten. Peter Vandenabeele is freelance Ruby on Rails-ontwikkelaar met interesse in mobiele applicaties. Klaas van Gend en Peter Vandenabeele Terug naar overzicht op de markt gekomen. Begin januari 2010 kwam daar de Nexus One bij, als ‘Google Phone’. Google speelt het slim. De integratie met GMail, Google Calendar, Google Maps, Google Voice en de contactenlijst is bijzonder handig voor de miljoenen gebruikers die nu reeds hun data en communicatie in de Google-wolk beheren. De telefoonfabrikanten biedt Android eindelijk een wapen om te concurreren tegen de Iphone, die exclusief door Apple wordt geproduceerd. De opensourcelicentie op Android creëert hier een open markt met een groot aanbod aan Android-telefoons in verschillende prijsklassen en kwaliteitsniveaus. Met de Nexus One probeert Google de markt nog verder open te breken door de verkoop van unlocked toestellen, waarmee het de mobiele operatoren passeert. Om het platform nog aantrekkelijker te maken voor eindgebruikers, heeft Google de Android Market gecreëerd. Daar zijn nu zo’n 22 duizend toepassingen beschikbaar, waarvan zo’n 60 procent gratis. Bij verkoop van apps via de dit portaal houdt Google 30 procent transactiekosten in. De typische verkoopprijs van een toepassing ligt tussen 0,99 en 3,99 dollar. Afgaande op de mailinglijsten zijn de opbrengsten voor de meerderheid van de ontwikkelaars nog beperkt en is de kans om de ontwikkelkosten te dekken klein. Ook is het voor de klanten erg moeilijk om in de overvloed van applicaties de meest nuttige software te vinden. Aparte portals worden nuttig om hierin de relevante toepassingen te ontdekken. Maar het ongereguleerde van de Android Market heeft ook zijn voordelen. Toepassingen en nieuwe versies van applicaties komen snel beschikbaar en expliciet geweerde niches in de Iphone Market, zoals de ‘adult’-toepassingen, worden toegelaten via alternatieve Market-applicaties voor Android. Ondanks de klachten van sommige ontwikkelaars lijkt het minder gereguleerde van de Android Market voorlopig in het voordeel van Google te spreken. Het heeft er alle schijn van dat Google Android en de Nexus One vooral ziet als een garantie op een open toegang voor advertenties naar de vele gebruikers van smartphones. Android zelf is volledig gratis en ook de Market en de Google Phone lijken niet direct bedoeld om op zichzelf sterk winstgevend te zijn. De recente acquisitie van het Admobnetwerk voor mobiele advertenties voor 750 miljoen dollar bevestigt het belang van mobiele advertenties voor Google. Voor ontwikkelaars van toepassingen zijn er vooral indirecte inkomsten: ofwel via advertenties in de toepassing ofwel wanneer een toepassing meer klanten naar een fysieke business kan leiden. Denk aan bioscopen, restaurants, autodealers, et cetera. Het Nederlandse Layar heeft ondertussen een mooi platform gebouwd om gelokaliseerde toepassingen op Android te draaien.
Dalvik Android is Java-gebaseerd, maar in plaats van de standaard Java-omgeving van Sun te gebruiken, heeft Google een eigen interpreter ontwikkeld: Dalvik. Dit kan beschouwd worden als work-around voor het eeuwenoude licentie-‘probleem’ voor mobiel Java: Sun heeft wel de rechten op de Enterprise-versie van Java (J2EE) vrijgegeven in een BSD-licentie, maar de rechten van Java voor mobieltjes (J2ME) blijft onder de GPL. Dat betekent dat telefoonfabrikanten of operators voor elke commerciële applicatie op J2ME die linkt met de J2ME-bibliotheken de GPL moeten gebruiken, of toch een commerciële licentie moeten kopen van Sun. Met Dalvik kunnen ze dit omzeilen. Dalvik is geen Java en heeft dus formeel niks met Sun te maken. Maar je kunt wel code schrijven in deze taal en die via
2/1/2010 11:11 AM
Bits&Chips: Een kijkje onder de motorkap van Android
5 of 5
http://www.bits-chips.nl/nieuws/bekijk/artikel/een-kijkje-onder-de-moto...
Java-bytecode omzetten naar Dalvik-bytecode.
© Bits & Chips | Deze pagina op internet: http://www.bits-chips.nl/nieuws/bekijk/artikel/een-kijkje-onder-de-motorkapvan-android.html
2/1/2010 11:11 AM