J2ME如何移植到ophone

中国拥有世界最庞大的电信客户群,仅移动用户就达7 亿,3G 在中国有最大的市场做后盾,无论现在的市场发 展如何的困难,3G 费用的降低是大势所趋,不久的将来,必然形成巨大的3G 浪潮,3G 手机会如雨后春笋一般,充满祖国大地,如 今各大移动通信运营商和移动终端开发商都看到广大的前景,在为3G 做最后的准备。最近作为中国移动 业务最大的运营商中国移动公司推出了自己的开发平台:OPhone OS 系统。OPhone OS 采用linux2.6 内核,兼容Android 应用。
OPhone
是中国移动在这次3G 浪潮来临 前打造的主力航空母舰,与中移动无线业务平台的对接,OPhone 将承载大量3G 业务应用。大量的软件开发企业将会把新的阵地放到移动平台上来,软件如: 手机电视、炒股、网游,企业应用MIS ,移动办公,都 将会是移动设备发展的热点,这样也就需要大量的开发人员,由于手机开发人员稀少,收入比一般pc 开 发人员会更高。由于现在中国移动的大力推广,如果企业和创业者依托mmarket 也会有不错的前 景,OPhone 作为中国移动大力推广的战略平台潜力巨大。


      Android
移 植除了硬件外最重要的是Java 平台之间的移植,目前市面上Java VM 主要使用的是Sun 公司的Java Micro Edition 。而Google Android 平台采用的是自己开发 的Dalvik 。如何从过去J2ME 移植到 谷歌手机平台呢?

     
虽然是不同的开发环境,但是所要实现的功能都是相近的,因此从功能的角度可以很好的理解OPHONE OS 平台和J2ME 平台之间的联系和区别。总结一下,可以发现从以下四个方面可以 很好的理解两个平台之间移植。

     
如果代码框架写得好,逻辑部分基本不需要怎么变化,只需要把和平台相关的接口转换一下就可以了。

  1) 用户界面

  这一点是J2ME 移植到Dalvik 上最麻烦的地方,Android 的图形类和Sun Jave ME 有了很大的不同,同时m3m5 SDK 上也有更大改变的趋势,导致了移植时出现很多需要自己去实现相关类,使最终程序的运行效率可能会 受影响,真机没有出现的情况下通过开发板可以适当的测试出性能损失。这一点需要花费很长时间去学习,也是未来我们着重需要讲解的。

  2) 数据存储

  这方面就显示出Android 平台比Sun Java 强大的地方了,Android 平台附 带了一个SQLite 数据库,和Sun J2ME 中 的Record Management System (RMS) 相比在功能上有了很大的提升,同 时在性能上也会有不俗的表现,在过去开发J2ME 软件时一直都采取的是如果数据比较简单使用自定义 的二进制格式 或XML 代替。

  3) 网络数 据

   这部分Android 平台的做法是import Sun 中 的I/O 读写库InputStream 这样 的类,同时网络相关的仍然采用SunURLConnection 类 进行操作,基本上没有变化,移植时注意下设备的栈空间简单的调整下就可以了。

  4) 媒体播 放

这 部分在Android 系统上就有了大幅的改变,官方推荐使用MediaPlayer 播 放类,该类支持mp3midwavmp4 等常规媒体格式的播放,相比J2ME 中提供的就灵活强大的多。

下面我们一步一步实现J2ME APIOPHONE OS 上的移植。

1
、 入口程序
MIDlet
学过J2ME 的开发人员都知道J2ME 有一个主体类MIDlet 类,它是程序管理接口,调用startApp() , 进入应用程序。

同 样,在OPHONE OS 平台中同样有一个主体类Activity , 调用onCreate(savedInstanceState) 进入某个交互界面。

下面我们将通过继承Activity 模拟实现J2ME 中的MIDlet 类和方法。

public abstract  class MIDlet extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startApp();
}
public abstract void destroyApp(boolean unconditional);
public String getAppProperty(String key) {
return null;
}

public abstract void startApp();
public void notifyDestroyed() {
}
public void notifyPaused() {
}
public void pauseApp() {
}
public void platformRequest(String URL) {
}
public void resumeRequest() {
}
}
2
Canvas
同样在J2ME 中画板Canvas 类与OPhone OS 中的View 类相似。

public abstract class Canvas extends Displayable {

public Canvas(MIDlet context) {
super(context);
}
Graphics g = new Graphics();
public void onDraw(android.graphics.Canvas canvas) {
g.bind(canvas);
paint(g);
}
int getGameAction(int keyCode) {
return 0;
}
int getKeyCode(int gameAction) {
return 0;
}
String getKeyName(int keyCode) {
return "key";
}
boolean hasPointerEvents() {
return true;
}
boolean hasPointerMotionEvents() {
return true;
}
boolean hasRepeatEvents() {
return true;
}
protected void hideNotify() {
}
boolean isDoubleBuffered() {
return true;
}
protected void keyPressed(int keyCode) {
}
protected void keyReleased(int keyCode) {
}
protected void keyRepeated(int keyCode) {
}
protected abstract void paint(Graphics g);
protected void pointerDragged(int x, int y) {
}
protected void pointerPressed(int x, int y) {
}
protected void pointerReleased(int x, int y) {
}
void repaint() {
}
void repaint(int x, int y, int width, int height) {
}
void serviceRepaints() {
}
void setFullScreenMode(boolean mode) {
}
protected void showNotify() {
}
protected void sizeChanged(int w, int h) {
}
}
3
Graphics

J2ME
中 的Graphics 类和OPhone OS 中 的paint 类相似。在移植中,要用OPhone OS 类 库实现J2ME 中的Graphics 类,我 们在实现的过程中可以对Graphics 对象进行修饰,通过整合OPHONE OS Canvas 并调类库中的Paint 类和Color 类的方法来实现。比如:

Graphics
public class Graphics {
public final static int VCENTER = 0;
public final static int TOP = 1;
public final static int SOLID = 2;
public final static int RIGHT = 3;
public final static int LEFT = 4;
public final static int HCENTER = 5;
public final static int DOTTED = 6;
public final static int BOTTOM = 7;
public final static int BASELINE = 8;
Canvas dist;
private final Paint paint = new Paint();

public void bind(Canvas canvas) {
dist = canvas;
}

public void setColor(int eraseColour) {

}

public void drawImage(Image img, int x, int y, int anchor) {
dist.drawBitmap(img.getTp(), x, y, paint);
}
}}
上面是我们重新定义的Graphics 类, 在其方法的实现上,我们调用了OPHONE OS 的一些具体实现方法,从而用OPHONE OS 类库实现了J2ME 的框架,做到了两 个平台之间很好的移植。

从 上面几个例子可以看出两个平台的框架具有很多相似性,这就为两个平台之间的移植创造了条件。同时我们也会看到,两个平台之间存在一定的差异性,一些在J2ME 中的类和方法无法通过直接继承或者调用OPhone OS 来 实现,这时候就需要移植人员,自己来实现一些相关的类,这也是移植过程中需要我们去努力克服的困难。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值