Mobiltelefonapplikationer med J2ME: Lektion 2

Idag: J2ME och MIDP
  • Vad är J2ME?
  • Vad är en konfiguration?
  • Vad är en profil?
  • Vad är ett tilläggs-API?
  • Vad betyder fragmentering i det här sammanhanget?

Klicka på startknappen i den lilla mediaspelaren ovan för att lyssna på lektionen. (Man kan behöva vänta en stund på att ljudfilen laddas ner.) Om mediaspelaren 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 19 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: W800i, en mobiltelefon med Java-stöd

Samma bild som i lektion 1. Ingen pekskärm, men knappar och en liten styrspak.

W800i, en mobiltelefon med Java-stöd, från 2005

Bild 2: Välj spelet QuadraPop

Val av spel

Bild 3: Java-logon

När telefonens JVM (den virtuella Java-maskinen) startar, visas Java-logon.

Java-logon som visas när Java-maskinen startar

Bild 4: QuadraPop

Själva spelet QuadraPop.

Java-spelet QuadraPop i full gång

Bild 5: Repetition av Java

Java kompileras inte till körbar kod för någon viss processor eller något visst operativsystem, utan Java kompileras till kod, bytekod, för en "virtuell maskin" (JVM, Java Virtual Machine). Den virtuella maskinen finns för många olika operativsystem och många olika datorer.

En enda version av källkoden, och ett enda körbart program. (Operativsystem och datortyp spelar inte längre så stor roll.)

En bild som visar idén med Java b

Bild 6: Olika Java-editioner

Tre olika "Java-spår": Dessutom skiljer man på:

J2SE, J2EE och J2ME

Ett tillägg hösten 2006 (inte med på ljudspåret):

Sun (som är företaget som gör Java) har slutat att prata om "Java 2" och "Java 2 Platform", utan säger numera bara "Java" och "Java Platform". Därför heter det inte längre Java 2 Platform, Micro Edition (J2ME), utan bara Java Platform, Micro Edition (Java ME). Det märks till exempel på att de flyttat sin J2ME-webbplats från http://java.sun.com/j2me/ till http://java.sun.com/javame/.

Tänk i fortsättningen på att när det står "Java 2" i kursen, så heter det numera bara "Java".

Däremot är förkortningen "J2ME" så inarbetad att man ofta fortfarande använder den, trots att det alltså egentligen heter "Java ME".

Bild 7: "Konfigurationer" och "profiler" i J2ME

J2ME är samlingsnamnet för olika Java-byggklossar gjorda för maskiner med begränsad kapacitet. En J2ME-implementation består av en konfiguration, en eller flera profiler samt tilläggs-API:er.

(API: Application Programming Interface, tillämpningsprogrammeringsgränssnitt - klasser, metoder mm som ett tillämpningsprogram kan använda sig av för att komma åt till exempel operativsystemets olika funktioner.)

Figur 1-1 på s 2 i den gamla kursboken Beginning J2ME. Konfigurationer:

Profiler: Konfigurationer och profiler

"Bild" 8: Konfigurationer

Om konfigurationer:
  • Bestämmer vilken JVM som används samt ett antal grundläggande API:er
  • Bestämmer oftast minsta tillgängliga mängden minne (både ROM och RAM)
  • Det finns för tillfället två konfigurationer, CDC och CLDC
CDC = Connected Device Configuration CLDC = Connected Limited Device Configuration

"Bild" 9: Profiler

Om profiler:
  • Bestämmer en ganska stor samling av API:er som är nödvändiga för att utveckla program
  • Det finns en massa olika profiler. Några kan kombineras och andra inte.
  • På mobiltelefoner är MIDP, Mobile Information Device Profile, den vanligaste
  • MIDP finns i två varianter, 1.0 och 2.0. 3.0 är på gång.

"Bild" 10: Tilläggs-API:er

  • Eftersom inte alla telefoner har alla funktioner ligger saker som exempelvis Bluetooth i ett tilläggs-API istället för i profilen eller konfigurationen
  • Alla tilläggs-API:er finns beskrivna på http://jcp.org/en/jsr/all
  • Exempel: JSR 82, Java APIs for Bluetooth
  • JSR står för Java Specification Request, och är namnet på de dokument som används för att beskriva föreslagna, och antagna, tillägg till den grundläggande Java-plattformen.

"Bild" 11: Fragmentering

  • "Write once, run anywhere" stämde inte för skrivbordsdator-Java, och är inte 100% sant på mobiltelefoner heller p.g.a. buggar i tillverkarnas implementationer. Vissa tillverkare kan ha en speciell bugg i många av sina enheter. Exempelvis hade Nokia problem med alignment när man renderade bilder (dvs ritade upp på skärmen) en gång i tiden.
  • Eftersom MIDP inte stödjer alla funktioner i en telefon och det tar tid att få igenom en JSR . Det händer det ofta att tillverkare lägger in egna packages för att ge tillgång till enhetsspecifika funktioner.

"Bild" 12 (nyinsatt): MIDP version 1.0 och 2.0

Kan man göra ett spel som QuadraPop med det som står i boken, eller behöver man mer API:er och kanske verktyg?

Spel som QuadraPop kan man göra helt och hållet med MIDP 2.0, som tas upp i boken, eftersom MIDP 2.0 har stöd för fullskärm och ett nytt multimediabibliotek för att spela upp ljud och musik. I MIDP 1.0 fanns varken stöd för ljud eller fullskärm, så varje tillverkare hade egna metoder för att åstadkomma det som saknades. Därför blev man tvungen att använda tillverkarspecifika API:er. Vill man sikta in sig på den stora marknaden som fortfarande använder MIDP 1.0, främst om man gör spel, får man läsa på saker som inte står i boken.

"Bild" 13 (nyinsatt): MSA

MSA betyder Mobile Service Architecture, och är inte något gränssnitt, utan en specifikation av vilka gränssnitt som ska finnas i telefonens Java-miljö. En MSA-telefon ska innehålla CLDC 1.1 och MIDP 2.0, samt ett antal olika API:er, till exempel JSR 184 för 3D-grafik. En del API:er är "villkorligt obligatoriska", till exempel Bluetooth-API:et JSR 82. Om telefonen har Bluetooth, ska API:et finnas med, men om telefonen inte har någon Bluetooth-hårdvara, behöver API:et inte vara med.

Om man är intresserad av detaljerna i MSA kan man läsa mer i kapitel 1 i den nya kursboken Kicking Butt with MIDP and MSA, eller i MSA-specen, som även den är en JSR, och heter JSR 248.

Läsanvisningar

Den här lektionen motsvaras av kapitel 1, både i den nya kursboken Kicking Butt with MIDP and MSA, och i den gamla Beginning J2ME. Läs kapitlet översiktligt som bakgrund. När man hållit på ett tag med Java ME kan man kanske gå tillbaka och läsa kapitlet noggrannare, men sitt inte från början och plugga in förkortningar och nummer på JSR:er.

Några frågor som kan användas som instuderingsfrågor:

  1. Vad är J2ME?
  2. Vad är en konfiguration?
  3. Vad bestäms av konfigurationen?
  4. Vilka konfigurationer finns det? Beskriv dem kort!
  5. Vad är en profil?
  6. Vad bestäms av profilen?
  7. Vilka profiler finns det? Beskriv dem kort!
  8. Vad menas med en stack?
  9. Vad är en JSR?
  10. Vilka fördelar är det man får med MIDP, jämfört med att till exempel programmera i C++ mot ett särskilt API för varje mobiltelefonmodell eller tillverkare? (Ledtrådar: portabilitet, säkerhet)
  11. Vad innebär, i MIDP-sammanhanget, en denial-of-service-attack?
  12. Nämn några tillverkare av mobiltelefoner som stöder MIDP.
  13. Vad gör man för att motverka fragmentering?
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

Det finns inga programmeringsövningar till den här lektionen.

Föregående lektion | Lektionslista | Nästa lektion


Thomas Padron-McCarthy (Thomas.Padron-McCarthy@oru.se), 30 maj 2008

Den här lektionen är utvecklad av Thomas Padron-McCarthy i samarbete med Magnus Runesson