`

深入分析JAD和 MANIFEST.MF文件

阅读更多

 

前面的分析 中,我们可以知道JAD(Java Application Descriptor)文件是一个外 部 (相对JAR文件)描述文件,而Manifest.mf是一个内部 列表文件。他们对于AMS的运 行都起着至关重要的作用。

虽然它们的命名或者说文件类型都比较让人费解,不过,实际上它们也不过是单纯的文本文件 ,形式上非常相似,都 是:“属性名称:属性值 ”。

这些属性主要包括:

属性名称

属性说明

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文件和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-ConfigurationMicroEdition-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

 

 

 

转载:http://www.deepzhu.cn/2009/11/08/archives/57

分享到:
评论

相关推荐

    最好用的反编译工具jad-gui

    对于.jar文件,jad-GUI会解析其MANIFEST.MF文件,展示出包含的所有类,并以类的包结构呈现。 总的来说,jad-GUI是一款强大的Java反编译工具,它的易用性、高效性和跨平台特性使其在开发者中广受欢迎。无论是为了...

    javaee_src.zip

    在JavaEE的开发中,源代码组织通常会遵循一定的目录结构,例如"META-INF"目录是一个标准的Java存档(JAR)文件组成部分,它包含关于包的信息,如MANIFEST.MF文件,用于指定JAR的主要属性,包括版本信息、依赖库等。...

    jxl.jar原版、修改后的jxl.jar解决web dynpro中乱码问题

    一个jar文件由多个.class文件、资源文件(如图片、配置文件等)和一个MANIFEST.MF文件组成,其中MANIFEST.MF文件包含有关jar的基本信息,如主类名等。 2. **jar包操作**:Java提供了一些工具来创建、修改和查看jar...

    java class jar 文件查看器.7z

    JAR文件通常用于减少网络传输的数据量,实现代码的压缩,并可以包含一个清单文件(MANIFEST.MF),用于指定类路径、版本信息等。 **查看Java Class和JAR文件**: 为了查看Class文件或JAR文件的内容,我们需要使用...

    class、jar文件编译器

    `jar`文件通常包含一个`MANIFEST.MF`文件,用于存储关于jar的基本信息,如版本和主类等。使用`jar`命令或者第三方工具,如Apache Ant或Maven,可以创建和管理`jar`文件。 对于开发者来说,有时需要查看或反编译`...

    upload jar包.zip

    要深入理解它,需要查看源代码、清单文件和其他相关文档,或者通过反编译工具(如jad)来探索其内部结构。在实际使用中,需确保满足所有运行需求,包括正确的环境配置、依赖管理、安全性和性能优化。

    javajar源码-java-reading-jar-source:阅读javajar包源码内容

    除此之外,JAR文件还可以包含资源配置文件、图片、字体等其他资源,以及MANIFEST.MF文件,这个文件记录了关于JAR的基本信息,如版本、主类等。 要阅读JAR包中的源码,我们需要以下步骤: 1. **解压JAR文件**:可以...

    JAR反编译软件(classTojava)

    JAR文件通常包含类文件、图像、声音或其他支持文件,以及一个清单文件(MANIFEST.MF)来描述JAR的内容。 2. **为何需要反编译?** Java的.class文件是字节码,它不是人类可读的源代码。当我们需要查看没有源代码的...

    手机闹钟程序 附源码

    4. **源码分析**:压缩包中的"Alarm2.jad"和"Alarm2.jar"是J2ME应用程序的打包文件,jad文件包含了应用程序的元数据,而jar文件则包含了编译后的类文件。"MANIFEST.MF"是JAR文件的清单,包含了应用的主类和版本信息...

    Super Artillery-开源

    《Super Artillery》是一款经典游戏,最初在Apple II平台上发布,展现了早期电子游戏的魅力...通过分析和修改源代码,开发者可以深入理解游戏开发背后的逻辑,同时也可以为开源社区做出贡献,推动游戏技术的持续发展。

Global site tag (gtag.js) - Google Analytics