介绍MIDP的属性问题

作者:mingjava   文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=26

本文目的是说明MIDP中的属性问题,主要涉及到jad和MANIFEST.MF文件的一些概念。事实上很多人并不清楚这方面的细节。所以你应该仔细读读这篇文章.

    通常MIDP的应用程序是以.jar文件和.jad文件发布的。jar文件就是我们所说的jar包,jad文件的全名是java application descriptor。在jad文件中包含着Application Management Software用来管理MIDlets的生命周期的信息,当然也包括很多重要的属性。他们是成对出现的例如:MIDlet-Name:myjava。你可以通过调用getAppProperty("MIDlet-Name")来得到String类型的myjava,这是非常方便的,如果你想让你的MIDlet去联网那么你可以定义一个name为SERVER_URL,把它的值定义为http://yourip:port/myservlet,这样如果你想去连接其他地址的话只需要修改jad文件了,不需要重新编译。因此我们要清楚一点在jad文件里面放置一些MIDlet初始化需要的值是比较可取的。

      在jar包里面包括一个目录META-INFO里面有个文件是MANIFEST.MF。它是用来描述JAR文件的,也包含一些其它的信息,你可能发现了,在MANIFEST.MF和JAD文件中的一些值是相同的。那么这就存在着一个规则,AMS如何决定去读取哪个值呢?答案是这样的。

  1. 如果MIDlets的jar包是signed的,那么AMS要去察看它的数字签名,如果是有效的那么它会首先去读取MANIFEST.MF的内容,然后读取jad文件中相同的内容,如果匹配的话那么它会安装这个jar包,如果不匹配的话就会拒绝安装。如果他发现数字签名无效的话直接就会拒绝安装。
  2. 如果MDIlets的jar包是unsigned的话,那么AMS就把它认为是非信任的,他去读取jad文件的属性,如果发现没有的话它去读取MANIFEST的内容,也就是说如果jad和MANIFEST里面都有的属性AMS只会去读取jad中的。

      下面这个逻辑看上去是比较清楚的:
 given : String key // attribute name
 return : String value
 throws : NullPointerException if key is null

 if trusted
  String v0 = lookup key in manifest
  String v1 = lookup key in descriptor

  if ( v0 != null && v1 != null )
   // found in both; must be the same value
   assert( v0.compareTo( v1 ) == 0 );

  value = ( v1 != null )? v1 : v0;
 else // untrusted
  value = lookup key in descriptor

  if value == null
   value = lookup key in manifest

 return value

下面简单介绍一下MIDP2.0中定义的一些重要的参数,在MIDP2.0中定义了18个值。其中在MANIFEST.MF和jad中都必须定义的有六个,他们是:
MIDlet-Name
MIDlet-Version
MIDlet-Vendor
MicroEdition-Profile
MicroEdition-Configuration 
MIDlet-n 
    由于一个MIDlet suite里面可以有多个MIDlet的,因此你要说明他们比如MIDlet-1,MIDlet-2.....MIDlet-n,这一点非常的重要,在部署jar和jad文件到手机的时候一定要确保MIDlet-Name的正确,它的值是你的jar包的名字!否则不会安装成功的。还有两个值是jad文件中不许有的他们是MIDlet-Jar-URL ,
MIDlet-Jar-Size 其中应该注意的是MIDlet-Jar-URL,如果你要是通过OTA下载的话,那么你不许让他指向你jar包的绝对地址,例如http://myip:port/app/myapp.jar

      关于一个MIDlet suite里面有多个MIDlet的情况我写了个简单的代码测试了一下,如果还有疑问的话你可以运行一下下面的程序:
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MIDlet1 extends MIDlet
{

    private Display display;
    
   
    protected void startApp() throws MIDletStateChangeException
    {
        
        display = Display.getDisplay(this);
        display.setCurrent(new Form("1"));
    }

     protected void pauseApp()
    {
    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
    }

}
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MIDlet2 extends MIDlet
{

    private Display display;
    
  
    protected void startApp() throws MIDletStateChangeException
    {
        display = Display.getDisplay(this);
        display.setCurrent(new Form("2"));
    }

   
    protected void pauseApp()
    {
       

    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
         }

}
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MIDlet3 extends MIDlet
{

    private Display display;
    
   
    protected void startApp() throws MIDletStateChangeException
    {
        display = Display.getDisplay(this);
        display.setCurrent(new Form("3"));
    }

  
    protected void pauseApp()
    {
    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
    }

}
JAD文件的内容如下:
MIDlet-3: MIDlet3,,MIDlet3
MIDlet-2: MIDlet1,,MIDlet1
MIDlet-1: MIDlet2,,MIDlet2
MIDlet-Jar-URL: MIDlets.jar
MicroEdition-Configuration: CLDC-1.0
MIDlet-Version: 1.0.0
MIDlet-Name: MIDlets
MIDlet-Vendor: Midlet Suite Vendor
MicroEdition-Profile: MIDP-1.0
    把上面的三个.java文件打包成MIDlets.jar文件,然后双击.jad文件。程序就可以运行起来了,我在wtk2.1下运行没有任何问题!
 

J2ME MIDP 2.0 无线设备编程的一些源码JAVA源码 J2ME MIDP 2.0 无线设备编程的一些源码,像是一本书中的实例,都比较简单,基础性东西,新手可能会喜欢,附有少量游戏代码,截图上有具体的内容。 J2ME MIDP 2.0 无线设备编程的一些源码 (3 folders, 2 files, 1.38 KB, 639.35 KB in total.)          apps (8 folders, 2 files, 1.38 KB, 620.90 KB in total.)             Chap4 (7 folders, 2 files, 1.38 KB, 27.33 KB in total.)                bin (0 folders, 6 files, 8.00 KB, 8.00 KB in total.)       Chap4.html 131 bytes       Chap4.jad 282 bytes       Chap4.jar 5.98 KB              MANIFEST.MF 234 bytes             classes (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                    lib (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                    res (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                    src (0 folders, 5 files, 11.02 KB, 11.02 KB in total.)       CmdDemo.java 2.92 KB       CmdDemo2.java 5.01 KB       HelloWorld.java 1.70 KB                    tmpclasses (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                   tmplib (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                     Chap5 (7 folders, 2 files, 1.38 KB, 58.02 KB in total.)                bin (0 folders, 8 files, 18.75 KB, 18.75 KB in total.)       Chap5.html 131 bytes       Chap5.jad 348 bytes       Chap5.jar 15.53 KB       e2p5068.ini 1.03 KB       java.log 51 bytes              MANIFEST.MF 299 bytes             classes (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                    lib (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                    res (1 folders, 2 files, 1.38 KB, 7.05 KB in total.)                  pic (0 folders, 4 files, 5.67 KB, 5.67 KB in total.)         logo.png 0.99 KB                  wyy_logo.png 3.30 KB               src (0 folders, 6 files, 25.29 KB, 25.29 KB in total.)       animateMID.java 4.86 KB       Chap5GraMID.java 14.09 KB       fullScreenMID.java 2.01 KB       keyHandleMID.java 2.94 KB                    tmpclasses (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                   tmplib (0 folders, 2 files, 1.38 KB, 1.38 KB in total.)                     Chap6 (7 folders, 2 files, 1.38 KB, 153.39 KB in total.)                bin (0 folders, 11 files, 62.12 KB, 62.12 KB in total.)       Chap6.jad 823 bytes       Chap6.jar 49.48 KB       e2p5068.ini 1.03 KB       e2p5078.ini 796 bytes       e2p5083.ini 3.20 KB       e2p5138.ini 4.26 KB       e2prom.ini 429 bytes       java.log 0 bytes              MANIFEST.MF 774 bytes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值