服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

开发过程中生成midlet套件漫谈


  一、midlet suite
  
  虽然把midlet封装进 java档案文件(jar)并不一定必要,但这是发布 j2me/midp应用程序最常见的方法。midlet套件是一个midlet中所有的文件以及作为 midlet一部分的必需的资源的集合。midlet套件由以下几部分组成:
  
  1、附在jar文件中的 java类文件,
  
  2、描述 jar文件内容的清单文件(manifest.mf)
  
  3、附在 jar文件中的资源(如图象)和java应用程序描述符文件(jad)
  
  4、应用程序管理器
  
  应用程序管理器是一个移动设备上的软件程序,这个应用程序与具体的设备有关,并且由设备的生产商实现。它负责安装、运行以及从设备上删除 midlet,而提供错误处理支持。这个应用程序管理器同时还提供一个可选界面,允许用户启动、终止以及删除 midlet。
  
  二、jar文件
  
  一个商品化的、封装过应用程序通常由许多文件构成。除了 java类以外,其他文件诸如图像和应用程序数据即通常所说的资源,也可能是这个程序包的一部分。你把所有这些信息捆绑进一个整体,就称为 jar文件。
  
  除了类和资源文件,一个 jar文件还包括描述 jar内容的清单文件。清单文件名为 manifest.mf,储存在 jar文件本身中,下面这张表中列出定义在这个清单文件中的所有可用的属性。
  
  表 1
  
  属性            用途
  midlet-name midlet程序包的名称。例如“game pack”midlet-version midlet的版本号
  midlet-vendor midlet的创建者或提供商
  midlet-icon 应用程序管理器把这个图标与 midlet-name相关联,这是一个图形文件,以 png图象格式储存。
  midlet-description 描述 midlet的文本midlet-info-url 可能提供更多midlet和/或供应商信息的 url
  注意:下面的“midlet-x”属性可以使用多次来声明jar文件中的多个midlet。
  其中x为midlet的编号。
  “midlet-x”属性包括三段信息: midlet名称, 用于这个 midlet的图标(可选), 应用程序管理器将调用来加载这个 midlet的类名。
  在我们的“ game pack”例子中,有两个条目: midlet-1: kof, /images/kof.png, kof.kofmidlet midlet-2: golf, /images/golf.png, golfmidletmidlet-jar-url jar文件的 urlmidlet-jar-size jar文件的大小
  midlet-data-size 持久数据存储必需的最小字节数
  microedition-profile midlet需要哪一种 j2me简表
  microedition-configuration midlet需要哪一种 j2me配置
  
  这些属性并不是全部都需要,可是,没有下面列出的这六个,应用程序管理器就会拒绝加载这个 jar。
  
  midlet-name
  midlet-version
  midlet-vendor
  midlet-
  microedition-profile
  microedition-configuration
  
  这里有一个简单的清单文件的例子:
  midlet-name: kof2001
  midlet-version: 1.0
  midlet-vendor: neorage corporation inc.
  midlet-1: kof, /images/kof.png, kof.kofmidlet
  microedition-profile: midp-1.0
  microedition-configuration: cldc-1.0
  
  三、java应用程序描述器文件(jad)
  
  虽然没有必要,你仍然可以在 jar文件中包含一个 jad文件,就像清单文件一样,这个文件也包含 midlet的信息。创建一个 jad文件是基于两个原因。
  
  1、向应用程序管理器提供信息,说明 jar文件的内容,使用这些信息,就可以判断一个 midlet是否适合运行在这个设备上。例如,通过查看属性 midlet-data-size,应用程序管理器可以确定 midlet是否需要比设备可以提供的更多的内存。
  
  2、提供一种方法,可以把参数传送到 midlet而不必更改 jar文件,在本文的后半段我们将看一个这样的例子。
  
  jad文件使用表 1中相同的属性。如果你需要创建你自己的属性,也可以办得到,只要使用不以 midlet为开头的属性名就可以了,下面的 showproperties.jad文件就是自定义属性的例子。和清单文件一样,有某些属性必须被定义,如果这些属性不可用的话,应用程序管理器将不加载这个 midlet,它们是:
  
  midlet-name
  midlet-version
  midlet-vendor
  midlet-
  midlet-jar-url
  midlet-jar-size
  
  midlet-name、midlet-version和midlet-vendor的值必须与 jar中的清单文件中相同的属性的值一致。可能看出,如果在这两个文件有什么不同的话,申请管理器不也会加载这个 jar。
  
  除了这些属性以外,如果两个文件中的另外名称相同的属性,但是属性值不相同的,将优先采取应用程序描述器文件 ( jad )属性。
  
  midp 1.0规范没有规定 midlet-n属性是 jad文件的必需属性。可是,没有这个属性,就没有办法在设备模拟器中预览 midlet。在两个文件中包含这个属性没有问题,并且事实上,那么做可以更清楚看出这些文件是怎样关联的。因此,出于完整性考虑,这里的所有离子都将在jad文件中包含midlet-n属性。因此,出于完整性考虑,这里的全部例子都将在 jad文件中包含 midlet-n属性。
  
  下面是一个非常简单的例子:
  
  midlet-name: note pad
  midlet-version: 1.0
  midlet-vendor: abc workgroup.
  midlet-jar-url: http://www.abcworkgroup.com/midlets/notepad.jar
  midlet-jar-size: 26248
  midlet-1: notepad, /images/notepad.png, notepad.main
  
  四、从midlet中访问 jar/jad属性
  
  一个midlet程序可以访问所有的定义在清单文件(在jar文件中)和jad文件的属性。返回属性信息的方法及所在的完整的程序包名是 javax.microedition.midlet.midlet.getappproperty(string name)
  
  下面是一个例子,从jar/jad文件中读出并打印属性值。
  
  showproperties.jar中的 manifest.mf文件的内容如下:
  midlet-name: show properties
  midletmidlet-version: 1.0.1midlet-vendor: abc workgroup.midlet-1: showprops, , showpropertiesmicroedition-profile: midp-1.0microedition-configuration: cldc-1.0midlet-description: a simple property list examplemidlet-data-size: 1500
  
  showproperties.jad的内容:
  midlet-name: show properties midletmidlet-version: 1.0.1midlet-vendor: abc workgroup.midlet-jar-url: file://showproperties.jarmidlet-jar-size: 1132midlet-1: showprops, , showpropertiesjadfile-version: 1.5midlet-data-size: 500
  
  showproperties.java的源程序:
  import javax.microedition.midlet.*;
  public class showproperties extends midlet{ public void startapp() throws midletstatechangeexception{
  system.out.println("vendor: " + getappproperty("midlet-vendor"));
  system.out.println("description: " + getappproperty("midlet-description"));
  system.out.println("jadfile version: " + getappproperty("jadfile-version"));
  system.out.println("midlet-data-size: " + getappproperty("midlet-data-size"));
  };
  public void pauseapp(){ };
  public void destroyapp(boolean unconditional){ };
  }
  
  下面这些是一些比较重要的地方:
  
  manifest.mf文件作为 jar文件 showproperties.jar的一部分储存的。
  
  jad文件showproperties.jad使用midlet-jar-url: file://showproperties.jar 引用showproperties.jar。
  
  当你浏览这个 jad文件的时候,它使用上面那个命令找出相关联的 jar文件并读取清单文件的内容。
  
  属性midlet-name、midlet-version和midlet-vendor 既在 jar中的清单文件中又在 jad文件中,这些属性的值都必须完全相同。
  
  midlet-description属性来自清单文件,是可选的。
  
  jadfile version属性不在表 1中,因此它是一个自定义属性。因为 jad文件内的属性可从midlet访问,所以你可以不用改变 jar文件而添加属性到 jad中。
  
  属性 midlet-data-size在清单文件和 jad文件中都有,就像前面指出的那样,当两个文件中有完全相同的属性时, jad文件中的属性将使用。切记这不适用于midlet-name、midlet-version和midlet-vendor。

扫描关注微信公众号