personal java 程序设计 - pudn.comread.pudn.com/downloads4/ebook/15014/pjava_3_sc.pdf ·...
TRANSCRIPT
1
Personal Java 程序设计(三) - Symbian OS Java 程序设计入门
by 王森
Sun Microsystems 教育训练中心 [email protected]
引言 您想用 Java 来设计手机与 PDA 的应用程序,可是嫌 J2ME MIDP 功能太
少,无法让您尽情发挥吗? 笔者建议您试试 Personal Java。Personal 可以让
您设计的 Java 程序得以在以 Windows CE 与 Symbian OS 为操作系统的机器
上执行,包括市面上已经可以买到的 PocketPC、Nokia 9210c、SonyEricsson P800 都是 Personal Java 可以发挥的范围。
前言 本文将教导如何开发 Symbian 应用程序,Crystal 版的部份,我们采用
Nokia 9210 SDK(中文版/英文版),Quartz(Symbian OS 7.0 之后又称为 UIQ)的部分,则采用 SonyEricsson P800 SDK。 本文将专注于基本开发流程与环境设定的探讨,比较深入的程序开发则留待
后面文章。
Symbian OS Crystal 版 SDK 的下载
在撰写本文时,唯一一台使用 Symbian OS Crystal 版的手机只有 Nokia 9210(台湾的型号为 Nokia 9210c,已上市)。 图: Nokia 9210c
请注意: 本文中出现之 Java 程序代码,已在 Java 2 SDK 1.4.x 完成测试。所使用的
Ant 版本为最新的 1.5 版。本文所有操作皆在 Windows 2000 Professional与 XP Professional 中文版操作系统上经过测试。如果您使用的是 Windows其它版本,我们无法保证会有相同的结果,但基本上应该没有什么太大问题。
2
所以要下载 Symbian OS Crystal 版的 SDK,就须到 Forum Nokia 下载。请开
启浏览器,连接至 Forum Nokia 官方网站(http://www.forum.nokia.com/): 图: Forum Nokia 官方网站
请先注册成为 Forum Nokia 的会员(免费),并使用屏幕右上角的功能进行
登入。然后选择”Tools and SDKs”以进入工具下载区。 图: Forum Nokia 官方开发工具下载区
3
图: Symbian OS Crystal SDK v6.x 官方开发工具下载网页
4
请注意,Nokia 9210 SDK 有支持繁体中文的版本。
Symbian OS Quartz 版 SDK 的下载
在撰写本文时,唯一一台使用 Symbian OS Quartz 版的手机只有 Sony Ericsson P800/P802。 图: Sony Ericsson P800
5
请至 Symbian 官方网站(http://www.symbian.com/): 图: Symbian 官方网站
6
选择上方的”Developer”以进入程序开发者专属网页。 图: Symbian 程序开发者专属网页
7
选择中间的”UIQ Java SDK for Symbian”以进入 UIQ Java SDK 下载网页。 图: UIQ Java SDK 下载网页
8
请移到此网页最下方,选择下载 Symbian OS Quartz SDK v6.x。
9
图: Symbian OS Quartz SDK v6.x 下载前注册网页
10
请填妥所需要的数据,在”Which SDKs dos you require?”处选择 Quartz v6.x C++ and Java,最后按下”Submit Form”即可。接着会出现画面: 图: Symbian OS Quartz SDK 下载注册确认网页
11
系统会将您的 ID 与密码寄到您指定的 e-mail 信箱中。如果您收到了,请点选网
页最底下的”here”(http://www3.symbian.com/dl-sdk.nsf)进行下载工作。 图: 下载 Symbian OS Quartz SDK 前的登录画面
图: 下载 Symbian OS Quartz SDK 下载网页
12
点选”SDK: Quartz(C++ and Java) v6.1”的连结,就可进行最后的下载工作。
SonyEricsson P800 SDK 的下载
请到 http://www.sonyericsson.com/spg.jsp?template=frameset_dev_zone 或 http://www.ericsson.com/mobilityworld/sub/open/technologies/epoc/
13
tools/7_uiq 进行下载。
准备事项 Symbian OS 相关 SDK 需要 JDK 与 Perl 的辅助,请在安装 Symbian OS相关 SDK 之前,确认您的计算机上已安装了 JDK 与 ActivePerl。 Tips 仿真器可以帮我们模拟画面,TCP/IP 或 RS232 连结,可以并无法帮我们完全
模拟手机上的情形,例如 DTMF 拨号控制等。 由于 Personal Java 支持 JNI,如果您有用到 JNI,那么必须额外安装 C++版的 SDK
安装 Nokia 9210 SDK 安装时,由于我们已经安装了ActivePerl与新版的JDK,所以请反勾选Java Install。
14
底下我们假设 SDK 安装于 D:\Symbian\6.0\NokiaJava 目录之中,而 SDK 的
共享档案(C++ SDK 与 Java SDK 共享)则安装在 D:\Symbian\6.0\Shared 目
录底下。
完成安装之后,重新开机即可。
安装 SonyEricsson P800 SDK
15
底下我们皆假设 SonyEricsson P800 SDK 安装在 d:\Symbian\UIQ_70 幕
路底下:
安装时,由于我们已经安装了 ActivePerl 与新版的 JDK,所以安装程序会
自动帮我们侦测。
请选择安装 UIQ Personal Java SDK、Document、、UIQ MIDP SDK 以及
Example projects 即可。
16
完成安装之后,不需重新开机就可以直接进行开发
Nokia 9210 SDK 开发环境 安装完成之后,Nokia 9210 SDK 会自动帮我们加入一个名为 EPOCROOT的环境变量。
17
另外,开始菜单之中会加入一些功能选项,分别在「开始菜单| Programs」
与「开始菜单| 程序集 | Symbian 6.0 SDKs」底下。 Tips 如果您安装的是 Nokia 9210 SDK(中文版/英文版),您会发现在「开始菜单| 程序集 | Symbian 6.0 SDKs | Development tools」之下的工具联结都是有错
的,这些工具的连结其实在「开始菜单| Programs」也有一个。如果您希望
连结是正确的,请修改如下: 底下以 AIF Builder 为例,原本的联结是: “D:\Symbian\6.0\Shared\ splash.exe "aifbuilder\aifbuilder.jar" 请改成 D:\Symbian\6.0\Shared\EPOC32\Tools\splash.exe "aifbuilder\aifbuilder.jar" 即可。
SonyEricsson P800 SDK 开发环境 SonyEricsson P800 SDK 不会在开始菜单之中安装任何选项。 您会发现在<SDK 安装目录>\Documentation 之下的 AppletFrame.html
用到 Applet,而且用过 HTMLConverter 转换,导致非得 JDK 1.3.1_01 的 JRE才能执行。为了解决此问题,请将 AppletFrame.html 的内容改成
AppletFrame.html
18
<HTML>
<HEAD>
<TITLE>Help Example</TITLE>
</HEAD>
<applet code="com.symbian.sdk.docplugintool.CDocPlugInTool.class"
archive="docplugintool.jar, support/lucene.jar, support/xerces.jar,
support/HTMLParser.jar, support/ShellExec.jar"
width=170 height=150>
</BODY>
</HTML> 即可。这是因为 JDK 1.4.x 之后的 JRE 已经不需要 HTMLConverter 就能执行
Applet。
Nokia 9210 SDK 重要目录 Symbian OS Crystal 仿真器放置在 除错版 <SDK 安装目录>\Epoc32\Release\wins\udeb\Epoc.exe 发行版 <SDK 安装目录>\Epoc32\Release\wins\urel\Epoc.exe Personal Java 仿真器放置在 除错版 <SDK 安装目录>\Epoc32\Release\wins\udeb\pjava_g.exe 发行版 <SDK 安装目录>\Epoc32\Release\wins\urel\pjava.exe Tips 如果您安装的是 Nokia 9210 中文版 SDK,则只能看到除错版的仿真器和
Personal Java 仿真器。 仿真器执行画面:
另外,<SDK 安装目录>\erj 在仿真器之中被模拟成 J:磁盘驱动器,以方便测试,
19
<SDK 安装目录>\erj\lib 放置了 Personal Java 在执行时期所需要的设定和核
心函式库(font.properties、classes.zip 等)。<SDK 安装目录>\erj\ext 则放置
了 Personal Java在执行时期所需要的扩充函式库(cawt.jar、javaphone.jar)。在开发时期,我们的程序都要放置在<SDK 安装目录>\erj 底下,才能进行测试,
否则仿真器将无法定位到我们所写的 Java 程序。 Tips 实机上并没有,cawt.jar 这个函式库,您可以到 Nokia 网站
http://www.forum.nokia.com/javaforum/main/1,35452,1_0_30_20,00.html 下载 cawtjar.sis,或者到 <SDK 安装目录>\erj\utilities\awt 底下找到 cawt.jar,将他复制到实机上的
Communicator\System\Java\ext 目录底下。 另外,<SDK 安装目录>\erj\tools 底下还有两个工具,分别是 AViewer 和Redirect,将他们安装在实机中可以帮助我们程序的开发。
SonyEricsson P800 SDK 重要目录 Symbian OS UIQ 仿真器放置在 除错版 <SDK 安装目录>\epoc32\release\winscw\udeb\Epoc.exe 发行版 <SDK 安装目录>\epoc32\release\winscw\urel\Epoc.exe Personal Java 仿真器放置在 除错版 <SDK 安装目录>\epoc32\release\winscw\udeb\pjava_g.exe 发行版 <SDK 安装目录>\epoc32\release\winscw\urel\pjava.exe <SDK 安装目录>\epoc32\java\lib 放置了 Personal Java 在执行时期所需要
的设定和核心函式库(font.properties、classes.zip 等)。 <SDK安装目录>\epoc32\java\ext则放置了Personal Java在执行时期所需
要的扩充函式库(qawt.jar、util.jar、javaphone.jar)。
20
Tips 注意,qawt.jar 与 util.jar 预设并没有放置在 <SDK 安装目录>\epoc32\java\ext 底下,请到 <SDK 安装目录>\epoc32\etj\Ext 目录下,将这两个档案复制到 <SDK 安装目录>\epoc32\java\ext 底下 在使用 UIQ SDK 之前,请先设定 _epoc_drive_j 环境变量,使他映像到<SDK安装目录>\epoc32\java\,
在开发时期,我们的程序都要放置 _epoc_drive_j 环境变量所对应的目录底
下,才能进行测试,否则仿真器将无法定位到我们所写的 Java 程序。 Tips 实机上并没有,qawt.jar 与 util.jar 这两个函式库, <SDK 安装目录>\erj\utilities\Awt\arm 底下找到 QAWT.sis <SDK 安装目录>\erj\utilities\util\arm 底下找到 QUtil.sis 将他们安装在实机中。
Nokia 9210 SDK 开发入门 我们将以前面章节的范例做基础,修改 build.properties 与 build.xml 如下:
build.properties #此文件用来设定一些常用属性
#专案名称
name=crystalapp
#合成后 JAR 的檔名
jar=${name}.jar
#原始文件所在路径
src.dir=src
#资源文件所在路径
res.dir=res
21
#建构产物置放位置
build.dir=build
#编译后类别文件的放置位置
build.dir.classes=${build.dir}/classes
#JAR 的最终放置位置
build.dir.bin=${build.dir}/bin
#未经过混淆的 JAR 檔名
build.dir.bin.jarunobfus=${build.dir.bin}/${name}-unobfus.jar
#经过混淆的 JAR 檔名
build.dir.bin.jar=${build.dir.bin}/${jar}
#Symbian SDK 所在路径
symbian.home=d:/Symbian/6.0/NokiaJava
#Symbian 相关 Java Library
symbian.home.erj=${symbian.home}/erj
symbian.lib.core=${symbian.home}/erj/lib/classes.zip
symbian.lib.cawt=${symbian.home}/erj/ext/cawt.jar
symbian.lib.javaphone=${symbian.home}/erj/ext/javaphone.jar
#Symbian 仿真器
symbian.emu.dbg=${symbian.home}/Epoc32/Release/wins/udeb/Epoc.exe
symbian.emu.rel=${symbian.home}/Epoc32/Release/wins/urel/Epoc.exe
symbian.pjava.dbg=${symbian.home}/Epoc32/Release/wins/udeb/pjava_g.exe
symbian.pjava.rel=${symbian.home}/Epoc32/Release/wins/urel/pjava.exe
#混淆器与控制档
obfuscator.lib=retroguard.jar
obfuscator.script=script.rgs
build.xml
<?xml version="1.0" encoding="Big5"?>
<project name="Symbian Crystal 入门" default="all" basedir=".">
<!-- 引入位于 build.properties 之中的常用属性 -->
<property file="build.properties"/>
<target name="prepare" description="准备工作">
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.dir.classes}"/>
22
</target>
<target name="cleandir" description="清除目录">
<delete dir="${build.dir}"/>
</target>
<target name="compile" description="编译原始码" depends="prepare">
<javac debug="off"
bootclasspath="${symbian.lib.core}"
classpath="${symbian.lib.cawt};${symbian.lib.javaphone}"
srcdir="${src.dir}"
destdir="${build.dir.classes}"
target="1.1"
/>
</target>
<target name="package" description="包装成 JAR 檔" depends="compile">
<mkdir dir="${build.dir.bin}"/>
<jar basedir="${build.dir.classes}"
jarfile="${build.dir.bin.jarunobfus}"
manifest="MANIFEST.MF">
<fileset dir="${res.dir}"/>
</jar>
</target>
<target name="obfuscate" description="使用混淆器" depends="package">
<java fork="yes" classname="RetroGuard"
classpath="${obfuscator.lib};${symbian.lib.core};${symbian.lib.cawt};
${symbian.lib.javaphone}">
<arg line="${build.dir.bin.jarunobfus}"/>
<arg line="${build.dir.bin.jar}"/>
<arg line="${obfuscator.script}"/>
</java>
</target>
<target name="all" description="完成所有程序" depends="cleandir,obfuscate" />
<target name="runemudbg">
<exec executable="${symbian.emu.dbg}"/>
</target>
<target name="runemurel">
<echo message="注意,使用 Nokia 9210 SDK 中文版请勿使用此 target"/>
23
<exec executable="${symbian.emu.rel}"/>
</target>
<target name="runpjavadbg_class">
<exec executable="${symbian.pjava.dbg}">
<arg line="-cd j:\m5\build\classes Main"/>
</exec>
</target>
<target name="runpjavadbg_jar">
<exec executable="${symbian.pjava.dbg}">
<arg line="-cp j:\m5\build\bin\${jar} Main"/>
</exec>
</target>
<target name="runpjavarel_class">
<echo message="注意,使用 Nokia 9210 SDK 中文版请勿使用此 target"/>
<exec executable="${symbian.pjava.rel}">
<arg line="-cd j:\m5\build\classes Main"/>
</exec>
</target>
<target name="runpjavarel_jar">
<echo message="注意,使用 Nokia 9210 SDK 中文版请勿使用此 target"/>
<exec executable="${symbian.pjava.rel}">
<arg line="-cp j:\m5\build\bin\${jar} Main"/>
</exec>
</target>
</project>
最后,由于 Nokia 9210c 本身自型设定的问题,导致 Java 程序无法显示
中文,为了解决此问题,我们必须自行在程序之中设定字型,请修改 Main.java如下:
Main.java import java.awt.*;
public class Main
{
public static void main(String args[])
24
{
Frame f = new Frame("窗口") ;
f.setFont(new Font("monospaced", Font.PLAIN, 10));
f.setSize(200,200) ;
f.addWindowListener(new MyAdapter()) ;
Button btn = new Button("按下我") ;
btn.addActionListener(new MyHandler()) ;
f.add(btn) ;
f.show() ;
}
}
请输入 ant 或 ant all 完成 Java 程序的制作流程。 要执行我们所制作的程序,有两种方法,第一种是直接启动仿真器,然后再
进到 J:磁盘驱动器之中,直接选取 Main.class 即可执行,请使用 ant runemudbg 或 ant runemurel 启动仿真器。 第二种方法必须藉助 Personal Java 仿真器,我们可以给定类别文件所在
目录或是一个 JAR 文件作为输入,再给定主类别的名称。请使用 ant runpjavadbg_class、ant runpjavadbg_jar、ant runpjavarel_class 或 ant runpjavarel_jar 来启动 Personal Java 仿真器。 Tips 如果我们使用 Personal Java 仿真器来执行我们的程序,仿真器启动之后我们
无法看到我们的程序,这是因为我们的程序被其它程序盖掉了,请同时按下
Ctrl+Alt+Shift+K,即可关闭其它程序,关掉几个程序之后就能看到我们的程序。 程序执行画面如下:
当我们按下按钮之后,仿真器就会自动关闭。
25
SonyEricsson P800 SDK 开发入门 我们将以前面章节的范例做基础,修改 build.properties 与 build.xml 如下:
build.properties #此文件用来设定一些常用属性
#专案名称
name=uiqapp
#合成后 JAR 的檔名
jar=${name}.jar
#原始文件所在路径
src.dir=src
#资源文件所在路径
res.dir=res
#建构产物置放位置
build.dir=build
#编译后类别文件的放置位置
build.dir.classes=${build.dir}/classes
#JAR 的最终放置位置
build.dir.bin=${build.dir}/bin
#未经过混淆的 JAR 檔名
build.dir.bin.jarunobfus=${build.dir.bin}/${name}-unobfus.jar
#经过混淆的 JAR 檔名
build.dir.bin.jar=${build.dir.bin}/${jar}
#Symbian SDK 所在路径
symbian.home=d:/Symbian/UIQ_70
#Symbian 相关 Java Library
symbian.home.erj=${symbian.home}/epoc32/Java
symbian.lib.core=${symbian.home}/epoc32/Java/lib/classes.zip
symbian.lib.qawt=${symbian.home}/epoc32/Java/ext/qawt.jar
symbian.lib.util=${symbian.home}/epoc32/Java/ext/util.jar
symbian.lib.javaphone=${symbian.home}/epoc32/Java/ext/javaphone.jar
#Symbian 仿真器
symbian.emu.dbg=${symbian.home}/epoc32/release/winscw/udeb/EPOC.exe
26
symbian.emu.rel=${symbian.home}/epoc32/release/winscw/urel/EPOC.exe
symbian.pjava.dbg=${symbian.home}/epoc32/release/winscw/udeb/pjava_g.exe
symbian.pjava.rel=${symbian.home}/epoc32/release/winscw/urel/pjava.exe
#混淆器与控制档
obfuscator.lib=retroguard.jar
obfuscator.script=script.rgs
build.xml
<?xml version="1.0" encoding="Big5"?>
<project name="Symbian UIQ 入门" default="all" basedir=".">
<!-- 引入位于 build.properties 之中的常用属性 -->
<property file="build.properties"/>
<target name="prepare" description="准备工作">
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.dir.classes}"/>
</target>
<target name="cleandir" description="清除目录">
<delete dir="${build.dir}"/>
</target>
<target name="compile" description="编译原始码" depends="prepare">
<javac debug="off"
bootclasspath="${symbian.lib.core}"
classpath="${symbian.lib.qawt};${symbian.lib.util};${symbian.lib.javaphone}"
srcdir="${src.dir}"
destdir="${build.dir.classes}"
target="1.1"
/>
</target>
<target name="package" description="包装成 JAR 檔" depends="compile">
<mkdir dir="${build.dir.bin}"/>
<jar basedir="${build.dir.classes}"
jarfile="${build.dir.bin.jarunobfus}"
manifest="MANIFEST.MF">
<fileset dir="${res.dir}"/>
27
</jar>
</target>
<target name="obfuscate" description="使用混淆器" depends="package">
<java fork="yes" classname="RetroGuard"
classpath="${obfuscator.lib};${symbian.lib.core};${symbian.lib.qawt};
${symbian.lib.util};${symbian.lib.javaphone}">
<arg line="${build.dir.bin.jarunobfus}"/>
<arg line="${build.dir.bin.jar}"/>
<arg line="${obfuscator.script}"/>
</java>
</target>
<target name="all" description="完成所有程序" depends="cleandir,obfuscate" />
<target name="runemudbg">
<exec executable="${symbian.emu.dbg}"/>
</target>
<target name="runemurel">
<exec executable="${symbian.emu.rel}"/>
</target>
<target name="runpjavadbg_class">
<exec executable="${symbian.pjava.dbg}">
<arg line="-cd j:\uiq\build\classes Main"/>
</exec>
</target>
<target name="runpjavadbg_jar">
<exec executable="${symbian.pjava.dbg}">
<arg line="-cp j:\uiq\build\bin\${jar} Main"/>
</exec>
</target>
<target name="runpjavarel_class">
<exec executable="${symbian.pjava.rel}">
<arg line="-cd j:\uiq\build\classes Main"/>
</exec>
</target>
<target name="runpjavarel_jar">
<exec executable="${symbian.pjava.rel}">
28
<arg line="-cp j:\uiq\build\bin\${jar} Main"/>
</exec>
</target>
</project>
最后,由于 P800 SDK 并非中文版,所以 Java 程序无法显示中文,请修改
Main.java 为英文版如下: Main.java
import java.awt.*;
public class Main
{
public static void main(String args[])
{
Frame f = new Frame("Test Window") ;
f.setSize(200,200) ;
f.addWindowListener(new MyAdapter()) ;
Button btn = new Button("Click Me") ;
btn.addActionListener(new MyHandler()) ;
f.add(btn) ;
f.show() ;
}
}
请输入 ant 或 ant all 完成 Java 程序的制作流程。 要执行我们所制作的程序,只有一种方法,就是藉助 Personal Java 仿真
器,我们可以给定类别文件所在目录或是一个 JAR 文件作为输入,再给定主类
别的名称。请使用 ant runpjavadbg_class、ant runpjavadbg_jar、ant runpjavarel_class 或 ant runpjavarel_jar 来启动 Personal Java 仿真器。 Tips 如果我们使用 Personal Java 仿真器来执行我们的程序,仿真器启动之后我们
无法看到我们的程序,这是因为我们的程序被其它程序盖掉了,请同时按下
Ctrl+Alt+Shift+K,即可关闭其它程序,关掉几个程序之后就能看到我们的程序。 在 UIQ SDK 中,如果我们使用除错版的仿真器,我们还可以使用
Ctrl+Alt+Shift+T 启动工作变换器(TaskList),选择我们的应用程序来执行:
29
选择 Main,然后点选 Go to file 即可。 程序执行画面如下:
当我们按下按钮之后,仿真器就会自动关闭。
30
结语 本文以Nokia 9210c与 SonyEricsson P800做例子,分别介绍 Symbian OS Crystal 版与 Quartz(UIQ)版 Java 程序的开发。下一次,笔者将为各位介绍更
进阶的 Symbian OS Java 程序设计,咱们下次见。