Nokia 6021 software bouwen

Sinds enige tijd is de Nokia 6021 de CSC standaard telefoon. Het vorige model (de meest robuuste Nokia ooit) wordt uitgefaseerd en vervangen door de 6021. Nou willen we natuurlijk allemaal een iPhone maar helaas, dat is even niet. Binnen MICC is de roep om eender welke smartphone soms hoorbaar. Waarom? Omdat we nu eenmaal graag software bouwen, en als het even kan ook voor onze telefoons. Het goede nieuws is dat het zeer wel mogelijk is om zelfgeschreven software te draaien op de Nokia 6021. Omdat dit toestel de CSC standaard van dit moment is, en wij een IT-bedrijf zijn, hierbij enkele handreikingen hoe je zelf software maakt voor de 6021. Software voor een 6021 bouw je in Java.

De spullenboel

Uitgangspunt voor een snelle start is een handige ontwikkelomgeving, een IDE. Na enig studeren en proberen kwam ik uit op Eclipse (“uiteraard” zullen sommigen zeggen). Alle andere vallen af omdat het een drama bleek platform SDK’s te configureren, compatibiliteitsproblemen, build problemen, etc. Probleem bij de selectie van een IDE is dat de SDK die wij moeten gaan gebruiken in feite verouderd is. Deze integreert alleen (en nogal buggy) met JBuilder (niet gratis en om de bugs heen configureren), volledig niet met Sun en NetBeans. Zeer kwalijk was dat Sun One ook nog eens onbegrijpelijke en erger nog, onterechte compilatiefouten gaf. Op de Nokia site wordt weliswaar NetBeans gepromoot maar gezien de versie van onze SDK hebben we daar weer niets aan want dat integreert niet met de S40 SDK. Eclipse dus. Het is open source dus downloaden op www.eclipse.org en installeren maar. De ervaringen hier beschreven zijn gebaseerd op versie 3.3.1.1. Om voor een Nokia 6021 software te bouwen moeten we een ander platform gebruiken dan het standaard Java platform dat op de meeste pc’s geinstalleerd is. Dat is de Java 2 Micro Edition, kortweg J2ME. Dat is te downloaden op www.java.com maar nu komt de keus voor Eclipse van pas: je kunt J2ME als een plugin installeren en on top of that kun je het vanuit Eclipse zelfs als een software upgrade binnenhalen. Lees echter eerst vooraf de installatie instructies op eclipseme.org hoe je dit moet doen. Als je de instructies volgt gaat de installatie volledig automatisch en hoef je zelfs achteraf niets te configureren. Alle andere manieren om J2ME erin te hangen, raad ik af. Die kosten tijd en ergernis. Nu je alles hebt om een stuk code voor een GSM te bouwen moet je nog iets verzinnen om de software op je GSM te krijgen. Hiervoor zijn weer vele mogelijkheden, mijn keus is gewoon de standaard spullen: De Nokia Application Installer die communiceert via bluetooth. De Application Installer is een onderdeel van de standaard versie van Nokia PC Suite. Kun je gratis downloaden op www.nokia.nl.

Dan hebben we als laatste nog een emulator nodig om de zelfgebouwde software te kunnen draaien in een runtime omgeving op de pc. De Series-40 emulator van Nokia benadert de 6010 voldoende. Deze emulator is onderdeel van de Series 40 Platform SDK. Die SDK ga je later nodig hebben vanwege de API’s dus downloaden en installeren. Je dient je hiervoor te registreren bij www.forum.nokia.com om download-rechten te krijgen. Let op: voor Nokia 6010 zoals wij die gebruiken heb je de Series 40 2nd edition SDK nodig. Latere edities kunnen tot compatibiliteitsproblemen leiden. De Series 40 is een apart platform dat in tegenstelling tot de latere 60 en 80 series niet op Symbian gebaseerd is. Vandaar dat die latere SDK’s dan ook niet geschikt zijn voor de 6021. En inderdaad, series 40 is eigenlijk een verouderd platform maar ja, het kent een installed base van meer dan 100 miljoen devices. De series 40 SDK bevat zoals gezegd een emulator waarmee je MIDlets kunt draaien en je hebt zo de beschikking over debugging en diagnostics tools. Je kunt ook telefoon events zoals inkomend gesprek, signaalverlies e.d. simuleren. Behalve de core MIDP’s (die je installeert met de J2ME plugin) bevat de SDK API’s en documentatie van de SDK gaan over de meer interessante toevoegingen aan J2ME, zoals Bluetooth, Wireless Messaging, crypto en natuurlijk allerhande media spullen.

Aan de slag

We gaan dus een MIDlet bouwen. Een MIDlet is een Mobile Information Device toolkit. Een Java programma dat draait in de J2ME virtual machine, meestal een gsm. Zoals gebruikelijk bij Java wordt een MIDlet gedistribueerd als een .jar die classes en een manifest bevatten. De ontwikkeltools genereren met de .jar ook altijd een .jad (application descriptor). Deze .jad is nou net voor onze Nokia 6021 niet nodig, maar wel voor de emulator. Het uiteindelijke proces van een project starten, coderen, bouwen en packagen is een weg vol met valkuilen. Niets is wat het lijkt. Als je in Eclipse een nieuw project start moet je geen nieuw java project starten maar een nieuwe “other” en dan een midlet suite kiezen. Dat geldt ook voor de sourcefiles. Binnen het midlet suite project kies je dan weer een nieuwe “other” midlet. Dit is de enige manier om de manifest file met de juiste parameters te laten genereren. De meest gemaakte fout is dat je de individuele classfiles niet als midlet initieert maar als java source (zoals gebruikelijk). Dit leidt tot het afwezig zijn van de MIDlet-x parameter in het manifest en die wordt door de gsm gebruikt voor entrypoint informatie. Het ontdekken van het probleem ligt niet heel erg voor de hand omdat de main class er namelijk zoals gebruikelijk wel in staat. Da’s dus even anders en kan wat tijd kosten om achter te komen. Alles gelukt en geverifieerd: tijd om te testen en dus een package maken. Ook hier geldt dat als je de normale weg bewandelt dit niet werkt omdat er toch een .jar e.d. wordt gegenereerd. Dus lijkt het te werken maar doet het niet.Overigens kun je voor deployment ook niet volstaan met een export maar moet je een package maken via een J2ME optie die enigszins verstopt zit in een right mouse click die een J2ME optie kent mbt. tot het project. Ook hier geldt dat als je de normale weg bewandelt dit niet werkt omdat er toch een .jar e.d. wordt gegenereerd. Dus lijkt het te werken maar doet het niet.

Hello World!

Ervan uitgaand dat je volgens bovenstaande richtlijnen een J2ME project en een J2ME midlet hebt aangemaakt kun je voor het onvermijdelijke “Hello World”-voorbeeld de volgende code pasten in de java source file:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HelloWorld extends MIDlet {
  private Display myDisplay;
  private HelloCanvas myCanvas;

  public void startApp() throws MIDletStateChangeException {
      myDisplay = Display.getDisplay( this );
      myCanvas = new HelloCanvas();
      myDisplay.setCurrent( myCanvas );
    }

protected void pauseApp() {
	// inherited van MIDlet	
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
	// inherited van MIDlet
	
}
  }
  class HelloCanvas extends Canvas {

    public void paint( Graphics g ) {
      g.setColor( 0x0FFFFFF );      			//wit
      g.fillRect( 0, 0, getWidth(), getHeight() );   //is eigenlijk 128x128
      g.setColor( 0 );      				//zwart
      g.drawString("Hello World, hij doet het", 0, 0, Graphics.TOP | Graphics.LEFT );
    }
  }

Zoals je ziet (aan de geïmporteerde packages) is voor dit voorbeeld de S40 SDK overigens niet per se nodig. Dan is het een kwestie van een deployment package maken, dat is “create package” via de eerderbeschreven obscure weg en klaar is kees! Bij een juiste installatie van de WTK toolkit (via installatie van de series 40 platform SDK) is de .jad nu dubbelklikbaar door een associatie met emulatorw.exe en start de emulator op met de zojuist gebouwde MIDlet. Negeer de NCF foutmelding, deze doet voor de hier gebouwde functionaliteit niet ter zake. De MIDlet kan ook met de emulator gestart worden vanuit de Run optie in eclipse. Hiervoor moet je mbv. de run dialog eerst je emulator settings aan je project koppelen. Dit is niet dynamisch waardoor het mij een paar keer overkomen is dat ik een ander MIDlet zat te testen dan waarvan ik de source onderhanden had. Onbekendheid met de tool zullen we maar zeggen. Deployen op de gsm is nu slechts een kwestie van de .jar met behulp van de Application Installer in de Nokia Suite installeren. Hello World!  

Disclaimer

Dit programma wordt ter beschikking gesteld voor educatieve doeleinden. Ik aanvaard geen enkele aansprakelijkheid voor (rechts-)gevolgen ontstaan door het gebruik of misbruik dat onverhoopt mocht voortvloeien uit het gebruik van deze software.