深入分析JAD和MANIFEST.MF文件
2010-05-18 21:40
369 查看
我们知道JAD(Java Application Descriptor)文件是一个外部(相对JAR文件)描述文件,而Manifest.mf是一个内部列表文件。他们对于AMS的运行都起着至关重要的作用。
虽然它们的命名或者说文件类型都比较让人费解,不过,实际上它们也不过是单纯的文本文件,形式上非常相似,都是:“属性名称:属性值”。
这些属性主要包括:
再分别看一个典型的Manifest.mf文件和JAD文件究竟是怎么定义:
“Manifest.mf”
MIDlet-1: CustomItem, customitemdemo.png, customitem.CustomItemDemo
MIDlet-10: Ticker, tickerdemo.png, ticker.TickerDemo
MIDlet-2: StringItem, stringitemdemo.png, stringitem.StringItemDemo
MIDlet-3: Gauge, gaugedemo.png, gauge.GaugeDemo
MIDlet-4: Alert, alertdemo.png, alert.AlertDemo
MIDlet-5: ChoiceGroup, choicegroup.png, choicegroup.ChoiceGroupDemo
MIDlet-6: List, listdemo.png, list.ListDemo
MIDlet-7: TextBox, textboxdemo.png, textbox.TextBoxDemo
MIDlet-8: TextField, textfielddemo.png, textfield.TextFieldDemo
MIDlet-9: DateField, datefielddemo.png, datefield.DateFieldDemo
MIDlet-Description: Basic UI elements functionality demo.
MIDlet-Name: UIDemo
MIDlet-Vendor: Sun Microsystems, Inc.
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
“UIDemo.jad”
MIDlet-1: CustomItem, customitemdemo.png, customitem.CustomItemDemo
MIDlet-10: Ticker, tickerdemo.png, ticker.TickerDemo
MIDlet-2: StringItem, stringitemdemo.png, stringitem.StringItemDemo
MIDlet-3: Gauge, gaugedemo.png, gauge.GaugeDemo
MIDlet-4: Alert, alertdemo.png, alert.AlertDemo
MIDlet-5: ChoiceGroup, choicegroup.png, choicegroup.ChoiceGroupDemo
MIDlet-6: List, listdemo.png, list.ListDemo
MIDlet-7: TextBox, textboxdemo.png, textbox.TextBoxDemo
MIDlet-8: TextField, textfielddemo.png, textfield.TextFieldDemo
MIDlet-9: DateField, datefielddemo.png, datefield.DateFieldDemo
MIDlet-Description: Basic UI elements functionality demo.
MIDlet-Jar-Size: 22798
MIDlet-Jar-URL: UIDemo.jar
MIDlet-Name: UIDemo
MIDlet-Vendor: Sun Microsystems, Inc.
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
置于每个属性对应的属性值应该怎么定义(如MIDlet-n,MIDlet-Version的属性值的格式),这里不做介绍,具体可以参考MIDP的相关说明。
根据MIDP的规定,代表MIDlet Suite的JAR文件内部要有一个列表文件,且文件名为Manifest.mf。
JAD文件虽然是可选的,但是也很有用武之地,特别是,在OTA模式下,在MIDlet Suite安装到移动设备之前,AMS首先会读取JAD文件的内容,分析MIDlet Suite是否与设备实现兼容,最典型的就是分析配置和简表的版本是否匹配。如果不兼容,那么AMS就会拒绝安装。这样也符合用户的需求。
同时,使用JAD文件的另一个优势是,可以自定义属性,比如说定义一个web服务的请求URL,当URL改变时,我们就不需要改变JAR的内部文件,来适应变更。
MIDlet-1: Query, Query.png, client.QMIDlet
……
queryURL: http://localhost:8080/QServlet/query.do
仔细观察上表,对于Manifest.mf文件和JAD文件来说三个属性是必须的:MIDlet-Name,MIDlet-Version和MIDlet-Vendor。三者属性值必须保持一致,否则AMS将不会下载和安装这个MIDlet Suite。而对于MIDlet-n,MicroEdition-Profile和MicroEdition-Configuration属性,实际上并不需要在JAD文件和Manifest.mf文件中重复定义。
另外,当用户安装MIDlet Suite的时候,AMS会鉴别正在安装的MIDlet Suite是被信任的(Trusted)还是非信任的(Untrusted)。根据MIDlet Suite类型的不同,AMS处理在这两个文件中被重复定义的属性也采取了不同的方法:
当为Trusted时:如果定义的属性在Manifest.mf和JAD文件中都出现,那么它们必须保持一致。
当为Untrusted时:如果定义的属性在Manifest.mf和JAD文件中都出现,那么MIDlet在运行时期所取得属性值则以JAD文件中的定义的为准。
属性定义知道了,那么怎么来获取它们的属性值呢?其实很简单,上面所提到的属性值,几乎所有都可以通过javax.microedition.mdilet.MIDlet.getAppProperty()这个方法来获取,唯独MicroEdition-Configuration和MicroEdition-Profile需要是通过java.lang.System.getProperty()来获取的。
最后还有一点值得指出的是:中文问题。把在Manifest.mf和JAD文件中出现的中文字符转换为Unicode的正则表达式可以有效防止乱码。
转换的方法是利用JDK所提供的native2ascii.exe工具。
CMD命令:
native2ascii 源文件.txt 目标文件.txt
转换前:MIDlet-1: 中文字典, DicMIDlet
转换后:MIDlet-1: /u4e2d/u6587/u5b57/u5178, DicMIDlet
这并不局限于JavaME,虽然稍微麻烦了一点,但这是一个比较通用和实用的方法。
原文:http://www.deepzhu.cn/2009/11/08/archives/57
虽然它们的命名或者说文件类型都比较让人费解,不过,实际上它们也不过是单纯的文本文件,形式上非常相似,都是:“属性名称:属性值”。
这些属性主要包括:
属性名称 | 属性说明 | Manifest.mf | JAD |
MIDlet-Name | MIDlet Suite的名称 | 必需 | 必需 |
MIDlet-Version | MIDlet Suite的版本号 | 必需 | 必需 |
MIDlet-Vendor | MIDlet Suite的作者 | 必需 | 必需 |
MIDlet-n | 属于该MIDlet Suite的每一个MIDlet都应独立定义一个 | 必需 | 必需 |
MicroEdition-Profile | MIDlet Suite所需简表版本 | 必需 | 必需 |
MicroEdition-Configuration | MIDlet Suite所需配置版本 | 必需 | 必需 |
MIDlet-Jar-URL | 对应JAR文件的下载地址 | - | 必需 |
MIDlet-Jar-Size | JAR文件大小,单位:字节 | - | 必需 |
MIDlet-Description | MIDlet Suite的描述 | 可选 | 可选 |
MIDlet-Icon | MIDlet Suite的图标路径 | 可选 | 可选 |
MIDlet-Info-URL | MIDlet Suite的信息路径 | 可选 | 可选 |
MIDlet-Data-Size | MIDlet Suite用于持久性存储所需的最小字节数 | 可选 | 可选 |
MIDlet-Permission(MIDP2.0) | MIDlet Suite需要访问的受限API的许可 | 可选 | 可选 |
MIDlet-Permissions-Opt(MIDP2.0) | 定义那些访问受限API非关键的许可 | 可选 | 可选 |
MIDlet-Push(MIDP2.0) | Push注册 | 可选 | 可选 |
MIDlet-Install-Notify(MIDP2.0) | 定义接收MIDlet Suite安装状态的URL | 可选 | 可选 |
MIDlet-Delete-Notify(MIDP2.0) | 定义接收MIDlet Suite删除报告的URL | 可选 | 可选 |
MIDlet-Delete-Confirm(MIDP2.0) | MIDlet Suite确认删除的提示信息 | 可选 | 可选 |
“Manifest.mf”
MIDlet-1: CustomItem, customitemdemo.png, customitem.CustomItemDemo
MIDlet-10: Ticker, tickerdemo.png, ticker.TickerDemo
MIDlet-2: StringItem, stringitemdemo.png, stringitem.StringItemDemo
MIDlet-3: Gauge, gaugedemo.png, gauge.GaugeDemo
MIDlet-4: Alert, alertdemo.png, alert.AlertDemo
MIDlet-5: ChoiceGroup, choicegroup.png, choicegroup.ChoiceGroupDemo
MIDlet-6: List, listdemo.png, list.ListDemo
MIDlet-7: TextBox, textboxdemo.png, textbox.TextBoxDemo
MIDlet-8: TextField, textfielddemo.png, textfield.TextFieldDemo
MIDlet-9: DateField, datefielddemo.png, datefield.DateFieldDemo
MIDlet-Description: Basic UI elements functionality demo.
MIDlet-Name: UIDemo
MIDlet-Vendor: Sun Microsystems, Inc.
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
“UIDemo.jad”
MIDlet-1: CustomItem, customitemdemo.png, customitem.CustomItemDemo
MIDlet-10: Ticker, tickerdemo.png, ticker.TickerDemo
MIDlet-2: StringItem, stringitemdemo.png, stringitem.StringItemDemo
MIDlet-3: Gauge, gaugedemo.png, gauge.GaugeDemo
MIDlet-4: Alert, alertdemo.png, alert.AlertDemo
MIDlet-5: ChoiceGroup, choicegroup.png, choicegroup.ChoiceGroupDemo
MIDlet-6: List, listdemo.png, list.ListDemo
MIDlet-7: TextBox, textboxdemo.png, textbox.TextBoxDemo
MIDlet-8: TextField, textfielddemo.png, textfield.TextFieldDemo
MIDlet-9: DateField, datefielddemo.png, datefield.DateFieldDemo
MIDlet-Description: Basic UI elements functionality demo.
MIDlet-Jar-Size: 22798
MIDlet-Jar-URL: UIDemo.jar
MIDlet-Name: UIDemo
MIDlet-Vendor: Sun Microsystems, Inc.
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
置于每个属性对应的属性值应该怎么定义(如MIDlet-n,MIDlet-Version的属性值的格式),这里不做介绍,具体可以参考MIDP的相关说明。
根据MIDP的规定,代表MIDlet Suite的JAR文件内部要有一个列表文件,且文件名为Manifest.mf。
JAD文件虽然是可选的,但是也很有用武之地,特别是,在OTA模式下,在MIDlet Suite安装到移动设备之前,AMS首先会读取JAD文件的内容,分析MIDlet Suite是否与设备实现兼容,最典型的就是分析配置和简表的版本是否匹配。如果不兼容,那么AMS就会拒绝安装。这样也符合用户的需求。
同时,使用JAD文件的另一个优势是,可以自定义属性,比如说定义一个web服务的请求URL,当URL改变时,我们就不需要改变JAR的内部文件,来适应变更。
MIDlet-1: Query, Query.png, client.QMIDlet
……
queryURL: http://localhost:8080/QServlet/query.do
仔细观察上表,对于Manifest.mf文件和JAD文件来说三个属性是必须的:MIDlet-Name,MIDlet-Version和MIDlet-Vendor。三者属性值必须保持一致,否则AMS将不会下载和安装这个MIDlet Suite。而对于MIDlet-n,MicroEdition-Profile和MicroEdition-Configuration属性,实际上并不需要在JAD文件和Manifest.mf文件中重复定义。
另外,当用户安装MIDlet Suite的时候,AMS会鉴别正在安装的MIDlet Suite是被信任的(Trusted)还是非信任的(Untrusted)。根据MIDlet Suite类型的不同,AMS处理在这两个文件中被重复定义的属性也采取了不同的方法:
当为Trusted时:如果定义的属性在Manifest.mf和JAD文件中都出现,那么它们必须保持一致。
当为Untrusted时:如果定义的属性在Manifest.mf和JAD文件中都出现,那么MIDlet在运行时期所取得属性值则以JAD文件中的定义的为准。
属性定义知道了,那么怎么来获取它们的属性值呢?其实很简单,上面所提到的属性值,几乎所有都可以通过javax.microedition.mdilet.MIDlet.getAppProperty()这个方法来获取,唯独MicroEdition-Configuration和MicroEdition-Profile需要是通过java.lang.System.getProperty()来获取的。
最后还有一点值得指出的是:中文问题。把在Manifest.mf和JAD文件中出现的中文字符转换为Unicode的正则表达式可以有效防止乱码。
转换的方法是利用JDK所提供的native2ascii.exe工具。
CMD命令:
native2ascii 源文件.txt 目标文件.txt
转换前:MIDlet-1: 中文字典, DicMIDlet
转换后:MIDlet-1: /u4e2d/u6587/u5b57/u5178, DicMIDlet
这并不局限于JavaME,虽然稍微麻烦了一点,但这是一个比较通用和实用的方法。
原文:http://www.deepzhu.cn/2009/11/08/archives/57
相关文章推荐
- SpringBoot-Loader源码分析系列1:启动&读取MANIFEST.MF文件
- 手机游戏之Jad文件及MANIFEST.MF文件
- Android APK 签名文件MANIFEST.MF、CERT.SF、CERT.RSA分析
- 深入分析Oracle数据库日志文件
- 解决Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)问题
- Eclipse导出Jar包 和 MANIFEST.MF文件
- 深入分析Oracle数据库日志文件
- 详解MANIFEST.MF文件
- JAR包中的MANIFEST.MF文件详解以及编写规范
- Linux 文件类型深入分析
- Android 开发之旅:深入分析布局文件&又是“Hello World!”
- 详解MANIFEST.MF文件
- 深入分析C++中执行多个exe文件方法的批处理代码介绍
- MANIFEST.MF清单文件格式要求
- 打包文件 MANIFEST.MF 功能详解
- MANIFEST.MF文件详解
- 深入分析java中webwork中的文件上传机制
- 学习:深入分析布局文件(HelloWorld)
- sdk合并报错:app:transformResourcesWithMergeJavaResForDedug,资源文件/META-INF/MANIFEST.MF重复
- MANIFEST.MF 文件内容详解