本文目的是說明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
把它的值定義//yourip:port/myservlet
這樣如果你想去連接其他地址的話只需要修改jad文件了
不需要重新編譯
因此我們要清楚一點在jad文件裡面放置一些MIDlet初始化需要的值是比較可取的
在jar包裡面包括一個目錄META
INFO裡面有個文件是MANIFEST
MF
它是用來描述JAR文件的
也包含一些其它的信息
你可能發現了
在MANIFEST
MF和JAD文件中的一些值是相同的
那麼這就存在著一個規則
AMS如何決定去讀取哪個值呢?答案是這樣的
如果MIDlets的jar包是signed的
那麼AMS要去察看它的數字簽名
如果是有效的那麼它會首先去讀取MANIFEST
MF的內容
然後讀取jad文件中相同的內容
如果匹配的話那麼它會安裝這個jar包
如果不匹配的話就會拒絕安裝
如果他發現數字簽名無效的話直接就會拒絕安裝
如果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 v
= lookup key in manifest
String v
= lookup key in descriptor
if ( v
!= null && v
!= null )
// found in both; must be the same value
assert( pareTo( v
) ==
);
value = ( v
!= null )? v
: v
;
else // untrusted
value = lookup key in descriptor
if value == null
value = lookup key in manifest
return value
下面簡單介紹一下MIDP
中定義的一些重要的參數
在MIDP
中定義了
個值
其中在MANIFEST
MF和jad中都必須定義的有六個
他們是
MIDlet
Name
MIDlet
Version
MIDlet
Vendor
MicroEdition
Profile
MicroEdition
Configuration
MIDlet
n
由於一個MIDlet suite裡面可以有多個MIDlet的
因此你要說明他們比如MIDlet
MIDlet
MIDlet
n
這一點非常的重要
在部署jar和jad文件到手機的時候一定要確保MIDlet
Name的正確
它的值是你的jar包的名字!否則不會安裝成功的
還有兩個值是jad文件中不許有的他們是MIDlet
Jar
URL
MIDlet
Jar
Size 其中應該注意的是MIDlet
Jar
URL
如果你要是通過OTA下載的話
那麼你不許讓他指向你jar包的絕對地址
例如
關於一個MIDlet suite裡面有多個MIDlet的情況我寫了個簡單的代碼測試了一下
如果還有疑問的話你可以運行一下下面的程序
import javax
microedition
lcdui
Display;
import javax
microedition
lcdui
Form;
import javax
microedition
midlet
MIDlet;
import javax
microedition
midlet
MIDletStateChangeException;
/*
* Created on
*
* TODO To change the template for this generated file go to
* Window
Preferences
Java
Code Style
Code Templates
*/
/**
* @author E
C
*
* TODO To change the template for this generated type comment go to
* Window
Preferences
Java
Code Style
Code Templates
*/
public class MIDlet
extends MIDlet
{
private Display display;
/* (non
Javadoc)
* @see javax
microedition
midlet
MIDlet#startApp()
*/
protected void startApp() throws MIDletStateChangeException
{
// TODO Auto
generated method stub
display = Display
getDisplay(this);
display
setCurrent(new Form(
));
}
/* (non
Javadoc)
* @see javax
microedition
midlet
MIDlet#pauseApp()
*/
protected void pauseApp()
{
// TODO Auto
generated method stub
}
/* (non
Javadoc)
* @see javax
microedition
midlet
MIDlet#destroyApp(boolean)
*/
protected void destroyApp(boolean arg
) throws MIDletStateChangeException
{
// TODO Auto
generated method stub
}
}
import javax
microedition
lcdui
Display;
import javax
microedition
lcdui
Form;
import javax
microedition
midlet
MIDlet;
import javax
microedition
midlet
MIDletStateChangeException;
/*
* Created on
*
* TODO To change the template for this generated file go to
* Window
Preferences
Java
Code Style
Code Templates
*/
/**
* @author E
C
*
* TODO To change the template for this generated type comment go to
* Window
Preferences
Java
Code Style
Code Templates
*/
public class MIDlet
extends MIDlet
{
private Display display;
/* (non
Javadoc)
* @see javax
microedition
midlet
MIDlet#startApp()
*/
protected void startApp() throws MIDletStateChangeException
{
// TODO Auto
generated method stub
display = Display
getDisplay(this);
display
setCurrent(new Form(
));
}
/* (non
Javadoc)
* @see javax
microedition
midlet
MIDlet#pauseApp()
*/
protected void pauseApp()
{
// TODO Auto
generated method stub
}
/* (non
Javadoc)
* @see javax
microedition
midlet
MIDlet#destroyApp(boolean)
*/
protected void destroyApp(boolean arg
) throws MIDletStateChangeException
{
// TODO Auto
generated method stub
}
}
import javax
microedition
lcdui
Display;
import javax
microedition
lcdui
Form;
import javax
microedition
midlet
MIDlet;
import javax
microedition
midlet
MIDletStateChangeException;
/*
* Created on
*
* TODO To change the template for this generated file go to
* Window
Preferences
Java
Code Style
Code Templates
*/
/**
* @author E
C
*
* TODO To change the template for this generated type comment go to
* Window
Preferences
Java
Code Style
Code Templates
*/
public class MIDlet
extends MIDlet
{
private Display display;
/* (non
Javadoc)
* @see javax
microedition
midlet
MIDlet#startApp()
*/
protected void startApp() throws MIDletStateChangeException
{
// TODO Auto
generated method stub
display = Display
getDisplay(this);
display
setCurrent(new Form(
));
}
/* (non
Javadoc)
* @see javax
microedition
midlet
MIDlet#pauseApp()
*/
protected void pauseApp()
{
// TODO Auto
generated method stub
}
/* (non
Javadoc)
* @see javax
microedition
midlet
MIDlet#destroyApp(boolean)
*/
protected void destroyApp(boolean arg
) throws MIDletStateChangeException
{
// TODO Auto
generated method stub
}
}
JAD文件的內容如下
MIDlet
: MIDlet
MIDlet
MIDlet
: MIDlet
MIDlet
MIDlet
: MIDlet
MIDlet
MIDlet
Jar
URL:
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19259.html