Klicka på startknappen i den lilla mediespelaren ovan för att lyssna på lektionen. (Man kan behöva vänta en stund på att ljudfilen laddas ner.) Om mediespelaren inte syns, eller om det inte fungerar av något annat skäl, kan man klicka här för att ladda ner mp3-filen (ca 20 minuter, ca 9 megabyte). Beroende på hur webbläsaren är konfigurerad kan det kräva ett separat mp3-spelarprogram av något slag. Tänk på att lektionerna ger en översikt och introduktion. Du måste läsa i kursboken och arbeta med övningarna för att tillgodogöra dig kursen! "Bild" 1: Vad är en MIDlet? Java-programmen i J2ME (Java 2 Mobile Edition) kallas MIDlet:ar. (Jämför: applet, servlet.) MID = Mobile Information Device MIDP = Mobile Information Device Profile Bild 2: Att kompilera och köra ett vanligt Java-program Hur man kompilerar och kör ett vanligt Java-program i J2SE (Java 2 Standard Edition). Det kan vara en Java-applikation (dvs ett fristående program) eller en applet. När Java-maskinen ska köra ett Java-program, börjar den med att verifiera att den kompilerade koden inte bryter mot reglerna. Bild 3: Att kompilera och köra en MIDlet Att bygga en MIDlet är lite mer komplicerat. Det har tillkommit två steg: Förverifiering (engelska: preverifying, preverification). Förverifiering gör "halva" verifieringen, så den stackars lilla mobiltelefonen (eller tvättmaskinen) slipper göra hela det jobbet. Paketering (engelska: packaging), så att paketet sen kan distribueras till mobiltelefoner. "Bild" 4: Steg 1 i utvecklingsprocessen - Källkoden Att skriva källkod för J2ME är precis som all annan Java-programmering. Varje fil innehåller en klass vars namn är identiskt med filnamnet, inklusive stor och liten bokstav. "Bild" 5: Steg 2 i utvecklingsprocessen - Kompileringen "Korskompilering" = vi kompilerar för en annan miljö än på datorn med kompilatorn! Java-kompilatorn (javac.exe) kräver parametern -bootclasspath för att ange var klassbiblioteken i kör-miljön (dvs MIDP) finns, till exempel java.lang-paketet. WTK (eller en IDE) sköter dock detta automatiskt. "Bild" 6: Steg 3 i utvecklingsprocessen - För-verifiering (pre-verification) Verifierar att .class-filerna är korrekt uppbyggda och inte innehåller några konstigheter. WTK (eller en IDE) sköter detta automatiskt. "Bild" 7: Steg 4 i utvecklingsprocessen - Paketering Lägger ihop alla klassfiler och resursfiler i en fil med filändelsen .jar. En jar-fil är egentligen bara en zip-fil och kan packas upp med exempelvis WinZIP eller WinRAR. En jar-fil innehåller ett manifest (svenska: märkrulla, förteckning över lasten på ett fartyg) som beskriver innehållet i jar-filen. En jar-fil kan också vara åtföljd av en jad-fil, som innehåller ungefär samma innehåll som manifestet i jar-filen. En jad-fil behövs om man t. ex. vill installera program via GPRS, men använder man t.ex. Nokias PC-suite behövs inte jad-filen. "Bild" 8: Steg 5 i utvecklingsprocessen - Körning En MIDlet kan man köra antingen på en telefon eller i en emulator på datorn. En emulator är ett program som emulerar, alltså låtsas vara, någonting annat. I vårat fall emulerar vår emulator olika typer av telefoner. Det man ser på datorskärmen ska likna det man får se på skärmen på telefonen. En emulator behöver, till skillnad från en simulator, inte fungera exakt som hårdvaran den emulerar, därför är det viktigt att man provar sitt program på en riktig telefon med jämna mellanrum. Det är dessutom skillnad mellan olika telefontillverkares implementationer av JVM:en och MIDP-api:et så prova på så många olika telefoner som möjligt. En kommentar från Magnus Runesson, som arbetar med J2ME och är med under kursutvecklingen: Du nämnde att det inte finns så många emulatorer att prova med. Jag vet inte exakt hur det ligger till med det men om man t.ex. laddar hem en SDK från Nokia för exempelvis 7710'an eller vilken telefon som helst så får man med en speciell emulator för just den enheten, komplett med en ny bild för telefonen som emulatorn ska representera. Jag skulle tro att det är i gurnden samma emulator som följer med WTK men den har skeppats med en speciell jar-fil för lite enhetsspecifika grejer, t.ex. Nokias egna API:er. Så om man inte är riktigt nöjd med det som följer med WTK'n kan man ladda hem en unik WTK från telefontillverkarens hemsida, så kanske man har tur och får en ny emulator och lite nya dokument osv. Tänkte att det kunde vara bra att veta. "Bild" 9: Program som vi ska installera J2SE SDK En generell Java-SDK (Software Development Kit). Återanvänd samma som användes i grundkursen i Java, eller installera en nyare version. Innehåller bland annat JRE (Java Runtime Environment) och en kompilator. Sun Java Wireless Toolkit 2.3 Program som behövs för att förverifiera, paketera samt testa MIDlet:ar. Kursboken beskriver version 2.2. Version 2.3 finns för tillfället bara som beta, och bara för Windows. Fungerar likadant, men innehåller några lite nyare tekniker. Valfri texteditor Det går bra med vilken editor som helst som du känner dig bekväm med, exempelvis TextPad som ni använde i förra kursen. "Bild" 10: Installation av J2E SDK Om ni har kvar J2SE-SDK:n från förra kursen kan ni hoppa över detta steg. Annars kan ni hämta SDK:n från http://java.sun.com/j2se/1.5.0/download.jsp och installera som vanligt. Man bör komma ihåg vilken katalog som man väljer att installera SDK:n i. Eventuellt kan man även behöva ange sökvägen när man sen installera Sun Java Wireless Toolkit, så kom ihåg den. Mer utförliga installationsanvisningar finns att läsa på http://java.sun.com/j2se/1.5.0/install-windows.html. Ett tillägg hösten 2006 (inte med på ljudspåret): Det har kommit senare versioner efter J2SE 1.5.0, och dessutom har Sun slutat prata om "Java 2" och säger nu bara "Java". Därför kallas "J2SE" nu för "Java SE". Dessutom säger man inte längre "SDK" (Software Development Kit) utan "JDK" (Java Development Kit). Länken ovan, http://java.sun.com/j2se/1.5.0/download.jsp, kommer att omdirigeras till en webbsida med rubriken Java SE Downloads. När jag tittar just nu är en lämplig JDK att ladda ner JDK 5.0 Update 8 (utan NetBeans och utan Java EE). Bild 11: Installation av Sun Java Wireless Toolkit Hämta från http://java.sun.com/products/sjwtoolkit/download-2_3.html och följ anvisningarna under installationen. Installationsprogrammet kommer att behöva ha sökvägen till en J2SE SDK, och kommer göra ett försök att hitta den själv men den kan eventuellt behöva hjälp på traven. Här lyckades installationsprogrammet hitta en J2SE SDK, som synes. Notera att installationen måste ha katalogen till en J2SE SDK, inte JRE (J2SE Runtime Environment). Om man bara ger sökvägen till en JRE kan man bara provköra MIDletar, inte utveckla dem. Ett tillägg hösten 2006 (inte med på ljudspåret): Man kan fortfarande ladda ner och använda WTK 2.3, men det har kommit en nyare version, WTK 2.5 (fortfarande en beta-version, och bara för Windows). Jag har ännu inte provkört alla exempel, men 2.5 verkar fungera som 2.3. Exemplen i fortsättningen är gjorda med 2.3, men 2.5 ser ungefär likadan ut, så om ni vill (och törs) får ni gärna använda den. Bild 12: Installationen, igen Förra bilden är från en installation på en svensk Windows XP. Bara för att visa att det fungerar på en engelsk Windows 2000 också: Bild 13: Installationen av Sun Java Wireless Toolkit fortsätter Installationsprogrammet kommer sedan att fråga efter den katalog där WTK ska installeras. Kom ihåg denna katalog, för där kommer alla projekt att finnas! Bild 14: Brandväggen i Windows XP Om du använder Windows XP. och har aktiverat den inbyggda brandväggen, kommer du att få en fråga när WTK startas för första gången, nämligen om du vill fortsätta att blockera programmet. Vi litar på Sun och tillåter deras grejer koppla upp sig mot nätet om det skulle behövas. "Bild" 15: Installation av någon texteditor Vi ska skriva programmen i en vanlig texteditor. Använd vilken som helst, i värsta fall Notepad. Annars kan man ladda ner Textpad från http://www.textpad.com/download/. Installationsprocessen är inte så klurig så den klarar ni nog utan assistans. Bild 16: Att starta WTK Starta WTK. Själva programmet heter KToolbar. Bild 17: WTK-fönstret WTK-fönstret: Några knappar och ett fönster för informations- och felmeddelanden. Man kan skapa projekt. Bild 18: Att skapa ett projekt i WTK Man får ange namn på projektet och MIDlet-klassen. Bild 19: Projektinställningar i WTK Notera att man kan lägga till API:er. Bild 20: Projektets källkodskatalog Om man installerat WTK i till exempel C:\WTK23, och ens projekt heter till exempel Tompa-Test-1, så hamnar projektets källkodsfiler i katalogen C:\WTK23\apps\Tompa-Test-1\src. På ett Linux-system blir det (till exempel) /usr/local/java/installation/WTK2.2/apps/Tompa-Test-1/src. Bild 21: Texteditor och källkod Skriv in källkoden med en vanlig texteditor. Här använder jag WordPad. Källkoden finns i boken, men ladda hellre ner den från bokens webbplats, som finns på http://www.apress.com/. (Direktlänk http://www.apress.com/ApressCorporate/supplement/1/426/1590594797-2644.zip, men såna har en tendens att ändras ibland.) Vi ska studera detaljerna i hur man skriver en MIDlet-klass senare. Bild 22: Kompilera och kör Klicka på Build för att bygga projektet. Klicka på Run för att köra. Kompilering, för-verifiering och paketering görs automatiskt. Bild 23: Emulatorn En av flera emulatorer: DefaultColorPhone. Bild 24: En annan emulator Det finns flera olika emulatorer att välja mellan, för att efterlikna olika typer av mobiltelefoner. Här är en annan, QwertyDevice: "Bild" 25: Obfuscation Engelska obfuscate = svenska fördunkla, göra obegripligt En class-fil innehåller inte bara själva koden utan även fullständiga klass-, variabel- och metodnamn i klartext. Dessa kan man förvränga och minimera med hjälp av "obfuscation". Varför? Jo: Det blir svårare för en utomstående att komma åt koden i dina klasser Den kompilerade koden blir betydligt mindre vilket betyder att även MIDlet:ens jar-fil blir mindre Ett bekymmer med att förvränga sina namn är när man har en klass eller metod som måste behålla sitt ursprungliga namn. Ett exempel är notifyIncomingMessage, en metod i din kod som anropas av JVM:en när programmet tar emot ett SMS. När ett SMS anländer till din telefon kommer JVM:en leta i sin lista över metoder efter den som heter notifyIncomingMessage, men eftersom obfuscatorn har bytt namn på metoden till t. ex. a, så kan inte JVM:en hitta rätt och programmet visar ett felmeddelande. Andra metoder som fungerar likadant är startApp och destroyApp men eftersom de är så vanliga så förvrängs inte de som standard. Bild 26: WTK 2.2 på Linux WTK 2.3 finns än så länge bara som en beta-version för Windows. WTK 2.2 fungerar dock på Linux. (Men Sun har klantat sig lite med hur installationen sker. Installera som användaren!) Bild 27: Emulatorn i WTK 2.2 på Linux Jargoneer-applikationen från boken fungerar bra i WTK 2.2: Läsanvisningar Den här lektionen motsvaras av kapitel 2, Building MIDlets, i kursboken. Avsnitten Tour of MIDP Features och Using Ant kan hoppas över. Det är själva provkörandet av MIDlet:en, så man kommer igång med utvecklingsmiljön, som är det viktiga här, men det finns också några frågor som kan användas som instuderingsfrågor: Vad är en referensimplementation? Det finns en referensimplementation från Sun av MIDP. Varför använder vi inte den i den här kursen? I boken står om Suns J2ME Wireless Toolkit. I version 2.3 har de ändrat lite på namnet. Vad heter det nu? Måste man använda detta toolkit från Sun (eller referensimplementation), eller finns det fler alternativ? Nämn några! Jargoneer-exemplets källkod finns på sidan 13-15 i kursboken. Titta lite på Jargoneer-klassens konstruktor, och försök räkna ut vad den gör. Vad innebär förverifiering eller preverifiering, och varför har man infört detta krångel? Vilka säkerhetsrisker finns med preverifiering? Vad är en "mjuk knapp" (engelska: soft button)? När ska obfuskeringen ske: Före eller efter kompileringen? Före eller efter för-verifieringen? Innan eller efter att MIDlet:en skickas till telefonen? (Svaren på dessa tre frågor är egentligen ganska självklara. Förklara varför de är självklara!) Om du vill skriva svar på instuderingsfrågorna, räcker det för de flesta frågorna med en eller några få meningar. Programmeringsövningar Ladda hem den angivna programvaran från Sun. Installera enligt instruktionerna. Gå sen igenom kapitlet och provkör Jargoneer-exemplet. Källkoden till Jargoneer kan laddas hem från webben. Föregående lektion | Lektionslista | Nästa lektion Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se), 22 augusti 2006 Den här lektionen är utvecklad av Thomas Padron-McCarthy i samarbete med Magnus Runesson
Klicka på startknappen i den lilla mediespelaren ovan för att lyssna på lektionen. (Man kan behöva vänta en stund på att ljudfilen laddas ner.) Om mediespelaren inte syns, eller om det inte fungerar av något annat skäl, kan man klicka här för att ladda ner mp3-filen (ca 20 minuter, ca 9 megabyte). Beroende på hur webbläsaren är konfigurerad kan det kräva ett separat mp3-spelarprogram av något slag.
När Java-maskinen ska köra ett Java-program, börjar den med att verifiera att den kompilerade koden inte bryter mot reglerna.
Java-kompilatorn (javac.exe) kräver parametern -bootclasspath för att ange var klassbiblioteken i kör-miljön (dvs MIDP) finns, till exempel java.lang-paketet.
WTK (eller en IDE) sköter dock detta automatiskt.
WTK (eller en IDE) sköter detta automatiskt.
En jar-fil innehåller ett manifest (svenska: märkrulla, förteckning över lasten på ett fartyg) som beskriver innehållet i jar-filen.
En jar-fil kan också vara åtföljd av en jad-fil, som innehåller ungefär samma innehåll som manifestet i jar-filen. En jad-fil behövs om man t. ex. vill installera program via GPRS, men använder man t.ex. Nokias PC-suite behövs inte jad-filen.
En emulator behöver, till skillnad från en simulator, inte fungera exakt som hårdvaran den emulerar, därför är det viktigt att man provar sitt program på en riktig telefon med jämna mellanrum.
Det är dessutom skillnad mellan olika telefontillverkares implementationer av JVM:en och MIDP-api:et så prova på så många olika telefoner som möjligt.
En kommentar från Magnus Runesson, som arbetar med J2ME och är med under kursutvecklingen:
Man bör komma ihåg vilken katalog som man väljer att installera SDK:n i. Eventuellt kan man även behöva ange sökvägen när man sen installera Sun Java Wireless Toolkit, så kom ihåg den. Mer utförliga installationsanvisningar finns att läsa på http://java.sun.com/j2se/1.5.0/install-windows.html.
Det har kommit senare versioner efter J2SE 1.5.0, och dessutom har Sun slutat prata om "Java 2" och säger nu bara "Java". Därför kallas "J2SE" nu för "Java SE". Dessutom säger man inte längre "SDK" (Software Development Kit) utan "JDK" (Java Development Kit).
Länken ovan, http://java.sun.com/j2se/1.5.0/download.jsp, kommer att omdirigeras till en webbsida med rubriken Java SE Downloads. När jag tittar just nu är en lämplig JDK att ladda ner JDK 5.0 Update 8 (utan NetBeans och utan Java EE).
Här lyckades installationsprogrammet hitta en J2SE SDK, som synes.
Notera att installationen måste ha katalogen till en J2SE SDK, inte JRE (J2SE Runtime Environment). Om man bara ger sökvägen till en JRE kan man bara provköra MIDletar, inte utveckla dem.
Man kan fortfarande ladda ner och använda WTK 2.3, men det har kommit en nyare version, WTK 2.5 (fortfarande en beta-version, och bara för Windows). Jag har ännu inte provkört alla exempel, men 2.5 verkar fungera som 2.3. Exemplen i fortsättningen är gjorda med 2.3, men 2.5 ser ungefär likadan ut, så om ni vill (och törs) får ni gärna använda den.
Kom ihåg denna katalog, för där kommer alla projekt att finnas!
Vi litar på Sun och tillåter deras grejer koppla upp sig mot nätet om det skulle behövas.
Annars kan man ladda ner Textpad från http://www.textpad.com/download/. Installationsprocessen är inte så klurig så den klarar ni nog utan assistans.
På ett Linux-system blir det (till exempel) /usr/local/java/installation/WTK2.2/apps/Tompa-Test-1/src.
Källkoden finns i boken, men ladda hellre ner den från bokens webbplats, som finns på http://www.apress.com/. (Direktlänk http://www.apress.com/ApressCorporate/supplement/1/426/1590594797-2644.zip, men såna har en tendens att ändras ibland.)
Vi ska studera detaljerna i hur man skriver en MIDlet-klass senare.
Kompilering, för-verifiering och paketering görs automatiskt.
Ett bekymmer med att förvränga sina namn är när man har en klass eller metod som måste behålla sitt ursprungliga namn. Ett exempel är notifyIncomingMessage, en metod i din kod som anropas av JVM:en när programmet tar emot ett SMS. När ett SMS anländer till din telefon kommer JVM:en leta i sin lista över metoder efter den som heter notifyIncomingMessage, men eftersom obfuscatorn har bytt namn på metoden till t. ex. a, så kan inte JVM:en hitta rätt och programmet visar ett felmeddelande. Andra metoder som fungerar likadant är startApp och destroyApp men eftersom de är så vanliga så förvrängs inte de som standard.
Det är själva provkörandet av MIDlet:en, så man kommer igång med utvecklingsmiljön, som är det viktiga här, men det finns också några frågor som kan användas som instuderingsfrågor:
Föregående lektion | Lektionslista | Nästa lektion