WTK a J2ME

Nedávno jsem dostal zadání nového úkolu: předělat androidí aplikaci pro Simphony na platformu Java MicroEdition (J2ME). Nejříve jsem se trochu zděsil, protože v J2ME jsem programoval v době, kdy ještě chytré telefony nebyly tak populární a Symbian OS byl na vrcholu slávy, a věděl jsem, jaké to je utrpení ve srovnání s programováním např. pro Android.

Pustil jsem se do toho a zpětně musím říct, že to zas taková hrůza není. Ano, člověk si musí vystačit s Java 1.3, kde chybí spousta chytrých věcí. Musí se spokojit s emulátorem, který je spíše pro info, než pro korektní testování nové funkcionality. V mém případě deploy do reálného zařízení trvá asi 2 minuty, protože je třeba připojit telefon k počítači, zkopírovat build do telefonu, pak odpojit telefon, spustit v menu aplikaci, počkat na její instalaci, spustit, potvrdit všechna oprávnění (občas je třeba ještě smazat předchozí instalaci aplikace). A pokud se chci podívat do logu, přichází další zdržení v podobě připojení telefonu a zobrazení logovacího souboru. Real-time logy s připojeným zařízením se mi nepodařilo zprovoznit.

Přes to všechno mě potěšila podpora Netbeans pro jednotkové testy. Používám knihovnu JMUnit for CLDC10. Ta funguje tak, že vytvořím TestSuite, do kterého přidám všechny TestCase. V nich se mi volá metoda void test(int number), díky které si mohu pěkně rozčlenit všechny testy a spouštět je postupně.

Pokud by někdo chtěl začít programovat v J2ME, popíšu zde postup instalace prostředí a zdrojový kód jednoduchého příkladu.

Instalace prostředí

Nejdříve je třeba stáhnout si od Oracle Java Wireless Toolkit. Ten je k nalezení na adrese http://www.oracle.com/technetwork/java/download-135801.html. Pro stažení je třeba bezplatná registrace. Pak si stáhněte Netbeans (já mam 7.4) z adresy https://netbeans.org/downloads/. Budete potřebovat balíček All, kde se nachází Java ME. Osobně v Netbeans nevyvíjím, použil jsem ho pouze k inicializaci projektu. Poslední věcí je instalace Oracle Java pro 32-bitové platformy. Tady odkážu na svůj předchozí článek Instalace Oracle Java. Postup je stejný, jen si stáhnete balíčky Javy i586 a změníte ve skriptu všechny x64 na i586. Pokud nepůjde 32bitová Java spustit (ověříte např. příkazem /usr/local/java/i586/jre1.7.0_71/bin/java -version), bude potřeba nainstalovat balíček ia32-libs, nebo balíčky lib32z1 lib32ncurses5 lib32bz2-1.0, které ho nahrazují v novějších systémech).

Nyní zkuste spustit ve WTK soubor WTK2.5.2/bin/ktoolbar. V systému mohou chybět některé 32-bitové knihovny, je třeba je všechny doinstalovat. Pokud konzole píše něco takového:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/local/java/i586/jdk1.7.0_51/jre/lib/i386/xawt/libmawt.so: libXtst.so.6: sdílený objektový soubor nelze otevřít: Adresář nebo soubor neexistuje

Prostě nainstalujte potřebnou knihovnu:

$ sudo apt-get install libxtst6:i386

U mě bylo třeba instalovat toto:

$ sudo apt-get install libstdc++6:i386 libxi6:i386 libxtst6:i386 libxrender1:i386 libxt6:i386

Pokud by Vám nefungovaly zvuky, emulátor o tom dává vědět pomocí hlášky o chybějícím /dev/dsp. Stačí nainstalovat balíčky osspd a osspd-pulseaudio a zvuky by měly při dalším spuštění emulátoru fungovat.

Vytvoření J2ME projektu

V Netbeans vytvořte nový Java ME projekt (MobileApplication) a nějak si ho pojmenujte. V dalším okně zvolte Emulator Platform WTK, které jste instalovali v předchozí kapitole. Jako zařízení ponechejte DefaultColorPhone a zvolte konfiguraci a profil zařízení (klidně ponechejte CLDC-1.1 a MIDP-2.1). Měl by se vytvořit první MIDlet (to je soubor, který obsahuje metody startApp, pauseApp a destroApp a spouští se jako první). Měl by vypadat takto:

package hello;

import javax.microedition.midlet.*;

public class Midlet extends MIDlet {

    public void startApp() {
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
}

Pokud ho nyní spustíte, spustí se Ant skript, který spustí emulátor a dá na výběr náš MIDlet. Když ho v emulátoru spustíme, nic se (zatím) nestane. Zkusíme přidat nějaké grafické prvky. Celý příklad najdete ke stažení zde: HelloWorldJ2ME.

V nastavení projektu je několik zajímavých věcí. V kategorii Platform můžete měnit např. emulátor, ve kterém se bude MIDlet spouštět. Zajímavější je kategorie Application Descriptor, kde se nastavuje manifest. V záložce MIDlets lze přidávat další MIDlety (a to i jednotkové testovací). Záložka API Permissions zase obsahuje všechna práva, která aplikace bude mít. Může to být třeba komunikace přes internet nebo čtení NFC tagů.

Nakonec bych rád zmínil knihovny, se kterými mám zkušenost a které by se mohly hodit:

  • Microlog – logger, který umí logovat jak do souboru, tak na standardní výstup
  • Perst – databáze (něco jako ORM), kterou je možné zašifrovat
  • lwuit – knihovna s grafickými komponenty, nabízí jich více než standardní lcdui

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *