Mastermind som Android-app

1. Skillnader mellan labb 6 och Android-versionen.

Vi föreslår att ni först läser beskrivningen av labb 3 som app; denna finns här.

Programmet i labb 6 består av ett interface och tio klasser. För att åstadkomma motsvarande Android-app behålls gränssnittet GuessEngine oförändrat, liksom klasserna Code, Color, ContradictionException och Reply, samt er modellklass. Dock måste samtliga förses med en första rad som anger paketnamnet.

Vyklasserna OldGuessPanel och NewGuessPanel måste skrivas om för att utnyttja Android-bibliotekets komponenter och metoder. Här har vi inte gjort detta för att kunna anpassas till godtycklig skärmstorlek; vi förväntar oss en WVGA-skärm med 800x480 pixlar.

Slutligen slås MasterMindView och Main ihop på liknande sätt som i Game of Life. Också här beskrivs layouten i en separat XML-fil.

Allt detta, utom modellklassen, är gjort i den zip-fil ni kan ladda ner nedan.

2. Att göra en Android-app

Följande fyra korta steg måste utföras:

  1. Ladda ner Mastermind_android.zip och packa upp i en lämplig katalog. Resultatet blir en katalog Mastermind med följande innehåll:
    $ ls Mastermind
    AndroidManifest.xml res src
    

    Manifestfilen AndroidManifest.xml innehåller information om projektet; den skapas automatiskt när ett Android-projekt skapas. Katalogen res innehåller resurser hörande till projektet. Här finns i underkatalogen layout den layoutbeskrivning vi nämnde ovan. I de tre drawable-katalogerna finns projektets ikon för olika skärmupplösningar.

    I katalogen src finns källkoden; närmare bestämt i underkatalogen src/se/chalmers/cse/tda547/mastermind. Anledningen till denna djupa katalogstruktur är att varje Android-program måste ha ett unikt paketnamn; därför väljer man konventionellt paketnamnet så att början är reverseringen av ett domännamn man kontrollerar, i vårt fall cse.chalmers.se. Tillägget tda547 identifierar programmet som utvecklat för denna kurs och slutligen identifierar suffixet mastermind unikt detta projekt. Katalogstrukturen följer då av standardregler för hur Java-paket placeras i ett filträd. Vi kan se vad som finns där:

    $ ls Mastermind/src/se/chalmers/cse/tda547/mastermind/
    Code.java
    Color.java
    ColorUtils.java
    ... resten av programmets klasser ...
    
  2. Projektkatalogen måste nu kompletteras:
    $ android update project -p Mastermind -t android-7 
    

    Programmet android hjälper till att administrera Android-projekt. Vi uppdaterar projektet i katalogen Mastermind (-p eller --path) för att generera kod för Android, API-nivå 7 (ofta kallad för Android 2.1) (-t eller --target). Ett antal ytterligare filer, som behövs men som vi bortser från här, skapas.

  3. Placera nu er modellklass i katalogen Mastermind/src/se/chalmers/cse/tda547/mastermind. Ni måste också lägga till en ny första rad i denna klass för att ange att klassen tillhör paketet:
    package se.chalmers.cse.tda547.mastermind;
    

    Notera att vi förväntar oss att er modellklass heter CleverEngine. Döp om eller ändra namn i skapandet av modellobjektet i Mastermind.java.

  4. Se till att ni befinner er i katalogen Mastermind högst upp i projektets filträd och gör
    $ ant debug
    ... mycket utskrifter ...
    BUILD SUCCESSFUL
    Total time: 3 seconds
    $
    

    I den nyskapade katalogen bin finns nu filen Mastermind-debug.apk. Suffixet .apk anger ett Android package; denna fil kan laddas ner till en telefon och installeras som en app. Suffixet debug anger att detta fortfarande är en utvecklingsversion. För publicering gör man i stället en release-version, men detta kräver digital signering på ett sätt som vi inte vill diskutera här.

    ant är ett verktyg som används för att bygga Java-applikationer; när de som här blir litet mer komplicerade är detta verktyg att föredra framför att själv köra javac.

    ant hämtar information om vad som behöver göras från filen build.xml, som skapades av android när projektet uppdaterades.

För utveckling av Android-applikationer används ofta Eclipse med en speciell plugin; för ovanstående korta lista av åtgärder finns dock ingen fördel med användning av Eclipse.