Součástí platformy J2ME je i Wireless Toolkit, který obsahuje sadu nástrojů pro vývoj J2ME aplikací. Jedním z nich je i KToolbar, který můžeme považovat za jednoduché vývojové prostředí, umožňující překlad zdrojových kódu a vytvoření výsledné aplikace (JAR a JAD). Nevýhodou je, že nemáme kontrolu nad vlastní procesem překladu (Build) a nemůžeme jej nijak ovlivnit. Jedním z možných řešení je využití nástroje Apache Ant.

Co je to ANT?

ANT, neboli Another Neat Tool, byl původně vytvořen pro překlad projektu Tomcat a je nedílnou součástí projektu Jakarta Apache. Je celý vytvořen v Javě a tím je plně přenositelný – vlastní buildovací soubory jsou založeny na XML formátu. V současnosti je nejrozšířenějším buildovacím nástrojem především u Java vývojářů a těší se také podpoře vývojových prostředí, jako například IntelliJ IDEA, Eclipse, SUN ONE Studio, JEdit a jiných. Více informací o Antu můžete nalézt na http://ant.apache.org.

Struktura buildovacího skriptu

Celý build skript můžeme rozdělit na několik částí. Každá část je uzavřena párovým elementem target a představuje jednotlivý buildovací krok. Abychom si zjednodušili práci, ukážeme si knihovnu, která rozšiřuje schopnosti Antu o podporu J2ME. Můžete ji nalézt na adrese http://sourceforge.net/projects/antenna/.

Použitím knihovny Antenna můžeme jednoduše projekt přeložit, preverifikovat, zabalit, obfuskovat a spouštět. Kromě toho máme k dispozici velice jednoduchý preprocesor, který je znám především Céčkařům. Jednotlivé kroky, které bude náš build skript obsahovat, jsou:

  • Clear – vymazání pomocných adresářů.
  • Init – inicializace projektu před překladem.
  • Compile – kompilace zdrojových souborů.
  • Preverify – proces preverifikace.
  • Build – vytvoření výsledných souborů JAR a JAD.
  • Run – spuštění aplikace v emulátoru.

Jak již bylo napsáno, skript má strukturu XML souboru. Jednotlivé kroky skriptu jsou uzavřeny párovým elementem project. V první kroku si nadefinujeme tyto důležité proměnné:

  • project.name – název projektu
  • main.class – hlavní třída projektu
  • wtk.home – domovský adresář WTK
  • wtk.midapi – cesta ke knihovnám midp (standardní API, Nokia API, Siemens API…)

Základní struktura build skriptu:

<?xml version=“1.0″ ?>
<project name=“Hello“ default=“build“ basedir=“.“>
<!– Define some useful properties –>
<property name=“project.name“
          value=“Hello“/>
<property name=“main.class“
          value=“Hello“/>
<property name=“wtk.home“
          value=“c:\Development\wtk104″/>
<property name=“wtk.midpapi“
          value=“${wtk.home}\lib\midpapi.zip“/>
   <– Here will be placed next tasks –>
</project>

V dalším kroku si nadefinuje pomocné tásky, které vytvoří výsledný soubor JAR a JAD:

<!– Define external Antenna tasks –>
<taskdef name=“wtkjad“
         classname=“de.pleumann.antenna.WtkJad“/>
<taskdef name=“wtkpackage“
         classname=“de.pleumann.antenna.WtkPackage“/>

Nyní si nadefinujeme jednotlivé tásky našeho build skriptu.

Clear

Tásk clear slouží pro odstranění dočasných adresářů, které vzniknou při procesu překladu. Jsou to adresáře:

  • classes – obsahuje přeložené zdrojové soubory projektu
  • preverified – zde jsou uloženy preverifikované soubory z adresáře classes
  • build – zde bude uložen výsledný soubor JAR a JAD

<!– Clear project directories –>
target name=“clear“>
   <delete failonerror=“false“ dir=“classes“/>
   <delete failonerror=“false“ dir=“preverified“/>
   <delete failonerror=“false“ dir=“build“/>
</target>

Init

Tásk init slouží jen pro získání časové známky. Pro výsledný překlad není důležitý.

<!– Make initialization –>
<target name=“init“>
   <tstamp/>
</target>

Compile

Tásk compile přeloží soubory z adresáře src a uloží je do adresáře classes. Nastavením proměnné bootclasspath můžete ovlivnit, které knihovny API budou pro překlad použity.

<!– Perform compile source files –>
<target name=“compile“ depends=“init“>
   <mkdir dir=“classes“/>
   <javac destdir=“classes“ srcdir=“src“
          bootclasspath=“${wtk.midpapi}“ target=“1.1″/>
</target>

Preverify

Po kroku compile následuje tásk preverify, jenž provede preverifikaci přeložených zdrojových souborů z adresáře classes a uloží je do adresáře preverified.

<!– Run preverification task –>
<target name=“preverify“ depends=“compile“>
   <mkdir dir=“preverified“/>
   <exec executable=“${wtk.home}\bin\preverify“>
      <arg line=“-classpath ${wtk.midpapi}“/>
      <arg line=“-d preverified“/>
      <arg line=“classes“/>
   </exec>
</target>

Build

Nyní přišel čas, abychom využili pomocné tásky, kterými vytvoříme výsledné soubory JAR a JAD. Tásk wtkpackage vezme všechny soubory z adresářů preverified a res a vytvoří z nich výsledný soubor JAR. U tásku wtkjad jsou pro nás velice důležité parametry, kterými můžeme ovlivnit výsledný obsah souboru JAD.

<!– Make JAR package and JAD descriptor –>
<target name=“build“ depends=“preverify“ >
   <mkdir dir=“build“/>
   <wtkjad jadfile=“build\${project.name}.jad“
           jarfile=“build\${project.name}.jar“
           name=“${project.name}“
           vendor=“Tester“
           version=“1.0.0″>
      <midlet name=“${project.name}“ class=“${main.class}“/>
   </wtkjad>
   <wtkpackage jarfile=“build\hello.jar“
               jadfile=“build\hello.jad“>
      <fileset dir=“preverified“/>
      <fileset dir=“res“/>
   </wtkpackage>
</target>

Run

Posledním táskem našeho build skriptu je tásk run, který spustí J2ME aplikaci v defaultně nastaveném emulátoru.

<!– Run application –>
<target name=“run“>
   <exec executable=“${wtk.home}/bin/emulator.exe“>
      <arg line=“-Xdescriptor:build\${project.name}.jad“/>
   </exec>
</target>

Shrnutí

Vytvořit buildovací skript pomocí Antu není nic složitého a navíc získáte úplnou kontrolu nad překladem projektu. Velkou výhodou Antu je jeho otevřenost a možnost vytvořit si své vlastní tásky. Vzorový build skript můžete dále rozšířit o další tásky, jako je zahrnutí externích knihoven do výsledné aplikace, obfuskování nebo vytvoření více verzí jedné aplikace.

Odkazy, zdroje

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět