找回密码
 注册
搜索
查看: 1460|回复: 16

[讨论] J2me api 移植到OPhone,经验谈

[复制链接]
发表于 2009-9-8 11:56:37 | 显示全部楼层 |阅读模式
中国拥有世界最庞大的电信客户群,仅移动用户就达4亿,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有了很大的不同,同时m3到m5 SDK上也有更大改变的趋势,导致了移植时出现很多需要自己去实现相关类,使最终程序的运行效率可能会受影响,真机没有出现的情况下通过开发板可以适当的 测试出性能损失。这一点需要花费很长时间去学习,也是未来我们着重需要讲解的。
  2)数据存储
  这方面就显示出Android平台比Sun Java强大的地方了,Android平台附带了一个SQLite数据库,和Sun J2ME中的Record Management System (RMS)相比在功能上有了很大的提升,同时在性能上也会有不俗的表现,在过去开发J2ME软件时一直都采取的是如果数据比较简单使用自定义的二进制格式 或XML代替。
  3)网络数据
  这部分Android平台的做法是import Sun中的I/O读写库InputStream这样的类,同时网络相关的仍然采用Sun的URLConnection类进行操作,基本上没有变化,移植时注意下设备的栈空间简单的调整下就可以了。
  4)媒体播放
这部分在Android系统上就有了大幅的改变,官方推荐使用MediaPlayer播放类,该类支持mp3、mid、wav、mp4等常规媒体格式的播放,相比J2ME中提供的就灵活强大的多。
下面我们一步一步实现J2ME API在Ophone 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来实现,这时候就需要移植人员,自己来实现一些相关的类,这也是移植过程中需要我们去努力克服的困难。
发表于 2009-9-11 19:41:00 | 显示全部楼层
我觉得应该加精。代码先投了。
点评回复

使用道具 举报

发表于 2009-9-13 16:21:39 | 显示全部楼层
[em10][em10][em10][em10][em10],我觉得要扣分!
点评回复

使用道具 举报

发表于 2009-9-14 19:04:05 | 显示全部楼层
ophone官网刚刚空降一个送手机的活动。好多人都有,就没我。
点评回复

使用道具 举报

发表于 2009-9-17 16:24:19 | 显示全部楼层
是在办送手机活动。不过我没参加,嘿嘿ie简单的了解了一下ophone,ophonesdn网站上面介绍得这么细,应有尽有,无论是入门文章,还是深入研究都有很丰富的帖子,
点评回复

使用道具 举报

发表于 2009-9-20 14:26:34 | 显示全部楼层
是在办送手机活动。不过我没参加,嘿嘿ie简单的了解了一下ophone,ophonesdn网站上面介绍得这么细,应有尽有,无论是入门文章,还是深入研究都有很丰富的帖子,
点评回复

使用道具 举报

发表于 2009-9-24 18:46:47 | 显示全部楼层
是在办活动送手机啊,了解了一点,蛮不错,内容很丰富
点评回复

使用道具 举报

发表于 2009-9-26 11:31:21 | 显示全部楼层
都说是开放、开源。到底有多开放,到底有多开源?
点评回复

使用道具 举报

发表于 2009-9-30 09:56:37 | 显示全部楼层
要说现在最开源的还是AD和OphoneOS,ophoneOS的开源策略更教适用于中国。除了3:7分成之外,中国移动现在还设立奖励机制,鼓励更多的人加入。
当然我也被这个奖励机制给击倒了。我原先做AD.AD还是在国外比较好卖。当然毕竟是国外的,提现对银联卡支持的还是不到位。不爽。不爽。很不爽。
ophoneOS的面试,似乎让我看到了AD的影子,但是从我这两天的观察去看,我总结了:OphoneOS更适合国人去开发。[em03]
点评回复

使用道具 举报

发表于 2009-10-6 16:30:56 | 显示全部楼层
OMS毕竟后台是中国移动。肯定将大力推广。[em08][em07][em06][em05]
点评回复

使用道具 举报

发表于 2009-10-8 12:53:53 | 显示全部楼层

J2me api 移植到OPhone,经验谈

作为程序员我们无从选择平台,但作为决策人,我们必须去选择平台。OMS貌似最近很火。
点评回复

使用道具 举报

发表于 2009-10-12 10:53:46 | 显示全部楼层
这是趋势,关注。[em04]
点评回复

使用道具 举报

 楼主| 发表于 2009-10-13 10:37:18 | 显示全部楼层
ophone讲座都听了没?谁听了,? [em08]
点评回复

使用道具 举报

发表于 2009-10-16 13:53:32 | 显示全部楼层
美国最大的运营商Verizon不也紧跟着中国移动的脚步,跟ANDROID结亲了?[em06]
点评回复

使用道具 举报

发表于 2009-10-19 16:42:43 | 显示全部楼层
美国最大的运营商Verizon不也紧跟着中国移动的脚步,跟ANDROID结亲了?[em04]
点评回复

使用道具 举报

发表于 2009-10-22 13:41:32 | 显示全部楼层
辛苦。还不错,这个对于新手具有一定的帮主,移动市场的趋势流行化,让我们更加关注移植方面的技术问题。[em01]
点评回复

使用道具 举报

 楼主| 发表于 2009-10-24 21:00:25 | 显示全部楼层
感谢。应对于我目前的一个问题,略有帮助。[em06]
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 11:38 , Processed in 0.049819 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表