Datakommunikation/telefoni, Software

Android med sten i skoen

Googles Android-telefon kan programmeres i Java. Men ikke uden problemer.

 

Google har sammen med en række andre producenter taget initiativ til at skabe mobil-platformen Android, der skal byde på et åbent styresystem til smartphones. De første telefoner er på markedet, men mange mobilproducenter ser ud til at tøve og se, hvordan telefon-systemet bliver modtaget af forbrugerne.

Android bygger på Linux, men systemets indre er ikke umiddelbart tilgængeligt for applikationer. I stedet har Google skabt sit eget Android-specifikke Java-miljø, som kan tilgå telefonens delsystemer som telefoni- og sms-tjenester. Det er også muligt for applikationer at sende meddelelser til hinanden. Eksempelvis kan man starte telefonens browser op fra en Android-applikation.

Androids Java-miljø er en underlig hybrid. Det er ikke Java Mobile Edition (ME), som er Suns officielle bud på Java til mobiler. Og det er heller ikke den ”almindelige” Java Standard Edition (SE). I stedet har Google taget kerneelementer fra Java SE og tilføjet Android-specifikke klasser, som kan benyttes til at tilgå telefonens funktioner. Baggrunden for valget skulle ifølge rygter være, at Sun ikke har frigivet Java ME, men opkræver licenser for anvendelsen af miljøet, og den galej vil Google ikke med på. I modsætning til Java ME er standard-udgaven af Java open source, så her kan Google gøre, som de lyster. Dele af Android-miljøet stammer fra Apache-projektets implementering af Java.

Når et nyt projekt oprettes, skal der angives et pakke-navn, et navn på komponenten, en ”target”-værdi, som skal være 2 for SDK 1.5, samt et navn på applikationen.

Rose med torne
Prosabladet har kigget nærmere på Androids udviklingsmiljø, og det kan med det samme siges, at der er en del torne på den rose.

Google og de øvrige partnere bag Android tilbyder et gratis udviklingsmiljø (SDK), som kan downloades fra adressen developer.android.com. Det består af Androids Java-kørselsmiljø, en telefon-emulator, dokumentation og en plugin til Eclipse, som kan benyttes til at udvikle applikationerne med.

Først skal man konfigurere emulatoren. I version 1.5 kan Android-miljøet nemlig benytte flere forskellige emulatorer, hvilket skulle bringe emulatorerne tættere på deres fysiske modparter. Emulatoren konfigureres én gang for alle ved at udføre kommandolinje-programmet android.bat, som findes i mappen Tools i SDK-mappen, med parametrene sat som i eksempel 1.

Eksempel 1
Emulatoren skal konfigureres én gang for alle ved at udføre denne kommando i et kommando-vindue. Android.bat-programmet findes i mappen Tools i SDK-mappen. Kommandoen konfiguerer emulatoren med navnet my_avd til target 2, som – noget forvirrende – svarer til SDK verson 1.5.

android create avd --target 2 --name my_avd

 

Når plugin’en er installeret i Eclipse, skal man sætte stien til mappen med Android-SDK’et, via  menuen Windows > Preferences > Android > SDKLocation. Et nyt projekt skabes så med menuen File > New > Project > Other > Android > Android project. Projektet opretter en lang række skelet-filer.

Arkitekturen i en Android-applikation er en smule indviklet. Et Android-program består af en central klasse, som nedarves fra Android-klassen Activity.

Applikationen skal fortælle, hvilke muligheder den ønsker at benytte. Her angives det, at applikationen skal have netadgang for at fungere.

Applikationens grafiske layout kan angives med en XML-fil, som det kendes fra Microsofts XAML og Adobes MXML. Af pladshensyn kommer vi ikke nærmere ind på denne mulighed, men benytter i dette eksempel et programmatisk layout som i Swing, Javas grafiske miljø. Til sidst kommer en XML-konfigurationsfil, AndroidManifest.xml. Derudover skaber miljøet autogenereret kode i mappen gen, men den kan man blot ignorere.

Android benytter som sagt en komponent-model, som det kendes fra eksempelvis Midlets i Java ME og Servlets, hvor komponenten iværksættes af det omgivende miljø. Det sker, når klassens onCreate-metode kaldes. Herfra opsættes den grafiske brugerflade.

Et minimalt Android-progran kan ses i eksempel 2, som er hentet fra SDK-dokumentationen, der i parentes bemærket er ganske udmærket. onCreate-metoden opsætter en TextView-widget, som knyttes til superklassens metode setContentView. Det minder ganske meget om fremgangsmåden i Swing. Applikationen afvikles i emulatoren med Eclipse-menuen Run > Run Configurations, hvor der oprettes en ny Android Run configuration.

Eksempel 2
package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 TextView tv = new TextView(this);
 tv.setText(”Hello, Android”);
 setContentView(tv);
 }
}

PROSA-feed på Android
Så langt, så godt. Nu ville vi prøve med et eksempel med lidt mere kød på. Vi ville skrive et ganske simpelt program, som kunne vise de seneste nyheder fra Prosa.dks feed. Vi gik rask til opgaven. Her benytter vi en underklasse til Activity, ListActivity, som gør det nemt at skabe et hurtigt program, hvis brugerflade blot er en liste. For at få adgang til internettet skal XML-konfigurationen fortælle, at programmet ønsker at få netadgang. Det gøres nemt i Eclipse ved at dobbeltklikke på AndroidManifest.xml i Package Explorer. Dernæst åbnes en dialog, hvor konfigurationen kan redigeres uden at rode med XML-kode. Under fanebladet ”Permissions” skal der tilføjes et ”Uses Permissions”-element med værdien android.permission.INTERNET, som vælges i listen til højre (Se fig 2). Men dialogboksen er ikke helt stabil og står af i ny og næ. Første minuspoint til Androids SDK.

Det sørgelige resultat af vores anstrengelser. Vi kunne ikke få Androids XML-parser til at gøre som i Java SE 6, så her er i stedet de første 10 tegn fra Prosa.dks XML-feed.

Dernæst ville vi skrive en simpel feed-henter og parser. Første udgave af denne artikel byggede på version 1.0 af SDK´et, og her havde emulatoren en fejl, som gjorde, at den undertiden ikke kan foretage DNS-opslag. Fejlen er almindeligt kendt i Androids udviklerfora, men der er ikke nogen klar løsning eller udmelding fra Android-projektet. Vi udskiftede Prosa.dk med IP-nummeret, og så gik det, men det gav flere minuspoint til Androids SDK. Fejlen er dog tilsyneladende rettet i den emulator, som kommer med version 1.5.

Nu kunne vi langt om længe downloade Prosas feed. Men den medfølgende XML-SAX-parser stammer fra Apache-projektet og giver andre resultater end den SAX-parser, der følger med Suns Java SE, hvor koden gjorde, hvad den skulle. Vi flyttede udviklingsmiljø til en ny pc, med et andet styresystem og netværk. Samme resultat. På dette tidspunkt smed vi håndklædet i ringen og konkluderede, at Android SDK’et ikke lever op til forventningerne. Det skal dog med, at masser af udviklere ikke har haft problemer med SDK’et. Men måske skulle Google alligevel kaste lidt flere penge og ressourcer efter Androids SDK.

LINKS
Android SDK og Eclipse-plugin
http://developer.android.com/