• 1. JavaME入门 1
  • 2. 课程目标了解JavaME平台体系 熟悉JavaME开发平台的搭建 理解MIDlet应用程序的运行机制 掌握开发、打包部署MIDlet应用的步骤2
  • 3. Java ME简介-1Java平台版本回顾 JavaSE:Java平台标准版(Java Platform,Standard Edition)。 JavaEE:Java平台企业版(Java Platform, Enterprise Edition)。 JavaME:Java平台微型版(Java Platform,Micro Edition)。3
  • 4. Java ME简介-2JavaME的设计目标 手持设备 个性化、可移动的 通常使用电池供电 体积和功耗都有限制 固定设备 固定使用,体积没有太大限制 通常有持续电源供电 计算能力也相对充裕4
  • 5. JavaME的体系结构-1 虚拟机 针对设备本地操作系统定制的Java虚拟机实现,支持特定的配置层 配置(Configuration)层 JavaME将各种不同的小型嵌入式设备,将一些共性提取出来形成适合于某个范畴中设备可用的规范,称为“配置(Configuration)” JavaME目前定义了两种配置:受限连接设备(Conntected Limited Device Configuration)和连接设备(Connected Device Configuration),简称CDC和CLDC。Java ME简介-35
  • 6. Java ME简介-4JavaME的体系结构-2 简表(Profile)层 每一种简表都提供了为特定设备进行开发的API的最小集合。6
  • 7. Java ME简介-5虚拟机(Virtual Machine) 连接设备(CDC) CVM 受限连接设备(CLDC) KVM K代表Kilo,即KVM所需的内存容量使用KB来衡量的 KVM的特点 模块化的设计 实现小巧紧凑 灵活性强7
  • 8. Java ME简介-6配置(Configuration) 配置是针对某种特定设备所制定的规范,定义了具有相似硬件功能(例如电源、存储空间和网络连接等等)的设备可以运行的Java平台 内容 规定所支持的Java编程语言特征 规定了所支持的Java虚拟机的特征 规定所支持的基本Java类库及其API与JavaSE如此相似!?8
  • 9. 完美运行Java ME简介-7问题: 如何让开发的Mobile Office在同一类型的各种设备上运行? 屏幕大小:360 × 640屏幕大小:240 × 3209
  • 10. Java ME简介-8简表(Profile) 简表为开发某种特定类型设备的应用程序提供了一套完整的工具,是对“配置”的补充与完善 简表的实现是Java API的一个集合,例如某些简表提供了定义用户界面、输入机制和数据持久化的Java类。10
  • 11. Java ME简介-9基于CLDC的简表 MIDP(Mobile Information Device Profile,移动信息设备简表) 是JavaME领域中使用最广泛的简表,它主要针对手机和其他双向移动通信设备设计,该简表在CLDC的基础上添加了网络连接、用户UI以及本地存储的能力。 PDAP(PDA Profile,PDA简表) PDA简表与MIDP类似,但比起移动电话,PDA具有更好的显示界面和更大的内存空间。 11
  • 12. Java ME简介-10基于CDC的简表 FP(Foundation Profile,基础简表) 基础简表对CDC进行了扩展,它包含几乎所有Java 2 1.3版本的核心库。 PBPP(Personal Basis and Personal Profile,个人基本简表与个人简表) 个人基本简表为基础简表加入了一个轻量级的GUI框架,即增加了基本的用户交互功能。而个人简表则扩展了个人基本简表,使之支持更复杂的用户界面交互。 12
  • 13. Java ME简介-11MIDP MIDP定义了针对移动信息处理设备开发的API 为了便于开发,MIDP提供了基于MIDlet应用程序框架 为了实现特定的功能,MIDP在CLDC类库的基础上又增加了一些新的类库13
  • 14. Java ME简介-12可选包(Optional Packages) 提供了额外的、通用的功能 并不属于单独的配置或简表 并未定义一个完整的运行时环境,它们依靠特定的配置和简表的支持 常用可选包 WMA(Wireless Messaging API) BTAPI(Java APIs for Bluetooth) MMAPI(Mobile Media API)14
  • 15. WTK-1搭建开发环境-1 WTK 是Sun Java Wireless Toolkit的简称,Sun公司推出的一组用于创建 Java 应用程序的工具 包含以下内容: 类函数库:为方便开发人员使用,WTK中已经包含了CLDC类函数库和MIDP类函数库,因此可以顺利编译MIDP应用程序。 帮助文件:包括WTK的使用手册和用户自定义手册。 范例程序:一些可以直接运行的示例程序,开发人员可以通过阅读这些示例程序学习MIDP应用开发。 开发工具:包括编译、打包和监视工具。15
  • 16. WTK-2搭建开发环境-2 WTK安装目录结构文件(夹)说明index.htmlWTK帮助文档首页 appsWTK自带的示例程序 bin包含了开发工具的可执行文件 docsWTK的所有帮助文件j2mewtk_templateWTK工作目录模板sessions用来存储性能监控信息的目录 Lib包含了CLDC和MIDP函数库 wtklib包含了主程序外观和设备模拟器的属性文件 16
  • 17. Eclipse Pulsar搭建开发环境-3 Eclipse Pulsar(脉冲星) 集成了JavaME开发插件的Eclipse,为移动开发者提供的工具集成平台 必须把Eclipse与开发工具包关联在一起,才能编译、运行JavaME应用17
  • 18. 创建MIDP应用-1创建MIDP应用程序(MIDlet)-1 MIDlet是什么? 一个MID(移动信息设备)简表应用程序 如何运行? 由应用程序管理软件(AMS)控制MIDlet的创建、启动和暂停 如何创建? 继承javax.microedition.midlet.MIDlet,实现其中的抽象方法18
  • 19. 创建MIDP应用-2在Pulsar中演示创建MIDlet应用程序19
  • 20. 创建MIDP应用-3创建MIDP应用-2//Eclipse自动生成的代码 public class MyFirstMIDlet extends MIDlet { public MyFirstMIDlet() { // TODO Auto-generated constructor stub } protected void startApp() throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } }实现父类的三个抽象方法: startApp pauseApp destroyApp20
  • 21. 创建MIDP应用-4创建MIDP应用-3 startApp方法:执行后MIDlet将进入活动状态。如果在执行该方法的过程中抛出了运行时错误,则MIDlet将立刻被销毁。 pauseApp方法:该方法执行后,MIDlet将进入暂停状态。处在暂停状态下的MIDlet必须释放共享资源。 destroyApp方法:该方法可以被活动或暂停状态下的MIDlet调用。执行该方法意味着MIDlet即将终止并进入销毁状态。21
  • 22. 创建MIDP应用-5创建MIDP应用-4: destroyApp方法 布尔型的参数的含义: true:MIDlet必须释放所有资源,然后无条件进入销毁状态 false:如果MIDlet不想被销毁,它可以抛出MIDletStateChangeException后继续执行 protected void destroyApp(boolean arg0) throws MIDletStateChangeException { //释放资源,保存持久化状态 }22
  • 23. MIDlet的生命周期创建MIDP应用-5: MIDlet的生命周期 除此之外,notifyPaused、requestResume和notifyDestory方法可以用于请求状态的转换 23
  • 24. 运行MIDP应用-1开发过程中,可以在开发工具包提供的运行环境中运行MIDP应用,该环境用于模仿真实的目标设备,称为仿真器或模拟机 WTK工具包中内置了4个设备仿真器: DefaultColorPhone DefaultGrayPhone MediaControlSkin QwertyDevice 24
  • 25. 运行MIDP应用-2两种运行方法: 可以在IDE的环境下直接运行仿真器 通过WTK提供的运行管理器执行 仿真器按键与计算机按键的对应关系 特殊键计算机键盘按键左软键F1右软键F2电源键Esc选择键Enter25
  • 26. 运行MIDP应用-3演示运行MIDlet应用程序26
  • 27. 调试MIDP应用-1调试MIDP应用: 使用Pulsar调试JavaME应用程序的步骤 设置断点 以Debug的方式运行MIDlet 使用调试工具执行中断调试27
  • 28. 调试MIDP应用-2在Pulsar中演示调试MIDlet应用程序28
  • 29. 打包MIDP应用-1使用Pulsar对MIDlet进行打包29
  • 30. 打包MIDP应用-2jad文件 Java应用描述文件(Java Application Descriptor) jad文件的作用 向应用程序管理器提供MIDlet套件的信息 设置参数配置,由MIDlet在运行时读取。30
  • 31. 打包MIDP应用-3在Pulsar中演示打包MIDlet应用程序31
  • 32. 混淆MIDP应用-1混淆:是把程序代码转换成一种功能上等价,但难于阅读和理解的行为。 混淆的目的:为了保护源代码,例如防止class文件被反向编译后读取其中的源程序。 32
  • 33. 混淆MIDP应用-2混淆代码的方式: 替换代码中的各种元素 重写代码中的部分逻辑 打乱代码的格式 常用的混淆工具有两款: ProGuard:http://proguard.sourceforge.net RetroGuard:http://www.retrologic.com 33
  • 34. 混淆MIDP应用-3在Pulsar中演示混淆MIDlet应用程序34
  • 35. 部署MIDP应用-1MIDlet套件的安装方式主要有两种: 通过数据线将MIDlet从计算机传输至目标设备,然后运行应用程序管理器安装MIDlet套件 通过OTA方式 35
  • 36. 部署MIDP应用-2OTA OTA是“Over The Air”的缩写,意思是“空中下载” 允许手机用户通过无线网络从服务器上动态下载、更新和删除应用程序,是一种低成本的应用部署方法。 分为三个步骤 应用发现 jad校验 下载执行36
  • 37. 工作任务3-11.搭建JavaME开发平台 2.创建HelloMe示例应用程序 3.学习MIDlet应用的开发、打包部署过程。 37
  • 38. 工作任务3-2系统要求-硬件: 100MB可用的硬盘空间 128MB系统RAM 800MHz Pentium III CPU 系统要求-软件: Microsoft Windows XP Java2 SDK 1.5.0以上版本38
  • 39. 相关实践7-11.安装Sun WTK(无线通信工具包,Wireless Tool Kit)2.5.2版 WTK的目录结构39
  • 40. 相关实践7-22.安装配置JavaME开发IDE:Eclipse Pulsar 40
  • 41. 相关实践7-33.创建MIDlet Project项目 41
  • 42. //HelloMeMIDlet类是第一个JavaME应用 public class HelloMeMIDlet extends MIDlet { //无参构造 public HelloMeMIDlet() {} /*** 重写与MIDlet生命周期相关的方法 ↓ */ //startApp方法(再次)启动MIDlet应用程序时被调用 protected void startApp() throws MIDletStateChangeException { } //pauseApp方法在暂停MIDlet应用程序时被调用 protected void pauseApp() { } //destroyApp方法在终止MIDlet应用程序前被调用 protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } /** 重写与MIDlet生命周期相关的方法 ↑ */ }相关实践7-44.编写一个MIDlet程序,运行后在控制台输出“Hello Me”提示信息 MIDlet生命周期42
  • 43. 相关实践7-5MIDlet应用程序的执行过程-1: 在构造方法中添加代码 在startApp方法中添加下面代码 public HelloMeMIDlet() { System.out.println("HelloMeMeMIDlet构造方法执行..."); }protected void startApp() throws MIDletStateChangeException { System.out.println(“startApp方法(再次)执行,MIDlet应用程序已启动..."); System.out.println("Hello Me!"); }43
  • 44. 相关实践7-6MIDlet应用程序的执行过程-2: 在pauseApp方法中添加代码 在destoryApp方法中添加下面代码 protected void pauseApp() { System.out.println("pauseApp方法执行,MIDlet应用程序马上暂停!"); }protected void destroyApp(boolean arg0) throws MIDletStateChangeException { System.out.println("destoryApp方法执行,MIDlet应用程序即将销毁!"); }44
  • 45. 相关实践7-75.运行MIDlet应用程序 45
  • 46. 总结-1了解JavaME平台体系 虚拟机(KVM) 配置(Configuration) 简表(Profile) 熟悉JavaME开发平台的搭建 WTK Eclipse46
  • 47. 总结-2理解MIDlet应用程序的运行机制 MIDlet的生命周期 startApp pauseApp destroyApp 掌握开发、打包部署MIDlet应用的步骤47