问题描述
中国拥有世界最庞大的电信客户群,仅移动用户就达4亿,3G在中国有最大的市场做后盾,无论现在的市场发展如何的困难,3G费用的降低是大势所趋,不久的将来,必然形成巨大的3G浪潮,3G手机会如雨后春笋一般,充满祖国大地,如今各大移动通信运营商和移动终端开发商都看到广大的前景,在为3G做最后的准备。最近作为中国移动业务最大的运营商中国移动公司推出了自己的开发平台:OPhoneOS系统。OPhoneOS采用linux2.6内核,兼容Android应用。OPhone是中国移动在这次3G浪潮来临前打造的主力航空母舰,与中移动无线业务平台的对接,OPhone将承载大量3G业务应用。大量的软件开发企业将会把新的阵地放到移动平台上来,软件如:手机电视、炒股、网游,企业应用MIS,移动办公,都将会是移动设备发展的热点,这样也就需要大量的开发人员,由于手机开发人员稀少,收入比一般pc开发人员会更高。由于现在中国移动的大力推广,如果企业和创业者依托mmarket也会有不错的前景,OPhone作为中国移动大力推广的战略平台潜力巨大。Android移植除了硬件外最重要的是Java平台之间的移植,目前市面上JavaVM主要使用的是Sun公司的JavaMicroEdition。而GoogleAndroid平台采用的是自己开发的Dalvik。如何从过去J2ME移植到谷歌手机平台呢?虽然是不同的开发环境,但是所要实现的功能都是相近的,因此从功能的角度可以很好的理解OPHONEOS平台和J2ME平台之间的联系和区别。总结一下,可以发现从以下四个方面可以很好的理解两个平台之间移植。如果代码框架写得好,逻辑部分基本不需要怎么变化,只需要把和平台相关的接口转换一下就可以了。 1)用户界面 这一点是J2ME移植到Dalvik上最麻烦的地方,Android的图形类和SunJaveME有了很大的不同,同时m3到m5SDK上也有更大改变的趋势,导致了移植时出现很多需要自己去实现相关类,使最终程序的运行效率可能会受影响,真机没有出现的情况下通过开发板可以适当的测试出性能损失。这一点需要花费很长时间去学习,也是未来我们着重需要讲解的。 2)数据存储 这方面就显示出Android平台比SunJava强大的地方了,Android平台附带了一个SQLite数据库,和SunJ2ME中的RecordManagementSystem(RMS)相比在功能上有了很大的提升,同时在性能上也会有不俗的表现,在过去开发J2ME软件时一直都采取的是如果数据比较简单使用自定义的二进制格式或XML代替。 3)网络数据 这部分Android平台的做法是importSun中的I/O读写库InputStream这样的类,同时网络相关的仍然采用Sun的URLConnection类进行操作,基本上没有变化,移植时注意下设备的栈空间简单的调整下就可以了。 4)媒体播放这部分在Android系统上就有了大幅的改变,官方推荐使用MediaPlayer播放类,该类支持mp3、mid、wav、mp4等常规媒体格式的播放,相比J2ME中提供的就灵活强大的多。下面我们一步一步实现J2MEAPI在OPHONEOS上的移植。1、入口程序MIDlet学过J2ME的开发人员都知道J2ME有一个主体类MIDlet类,它是程序管理接口,调用startApp(),进入应用程序。同样,在OPHONEOS平台中同样有一个主体类Activity,调用onCreate(savedInstanceState)进入某个交互界面。下面我们将通过继承Activity模拟实现J2ME中的MIDlet类和方法。publicabstractclassMIDletextendsActivity{publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);startApp();}publicabstractvoiddestroyApp(booleanunconditional);publicStringgetAppProperty(Stringkey){returnnull;}publicabstractvoidstartApp();publicvoidnotifyDestroyed(){}publicvoidnotifyPaused(){}publicvoidpauseApp(){}publicvoidplatformRequest(StringURL){}publicvoidresumeRequest(){}}2、Canvas同样在J2ME中画板Canvas类与OPhoneOS中的View类相似。publicabstractclassCanvasextendsDisplayable{publicCanvas(MIDletcontext){super(context);}Graphicsg=newGraphics();publicvoidonDraw(android.graphics.Canvascanvas){g.bind(canvas);paint(g);}intgetGameAction(intkeyCode){return0;}intgetKeyCode(intgameAction){return0;}StringgetKeyName(intkeyCode){return"key";}booleanhasPointerEvents(){returntrue;}booleanhasPointerMotionEvents(){returntrue;}booleanhasRepeatEvents(){returntrue;}protectedvoidhideNotify(){}booleanisDoubleBuffered(){returntrue;}protectedvoidkeyPressed(intkeyCode){}protectedvoidkeyReleased(intkeyCode){}protectedvoidkeyRepeated(intkeyCode){}protectedabstractvoidpaint(Graphicsg);protectedvoidpointerDragged(intx,inty){}protectedvoidpointerPressed(intx,inty){}protectedvoidpointerReleased(intx,inty){}voidrepaint(){}voidrepaint(intx,inty,intwidth,intheight){}voidserviceRepaints(){}voidsetFullScreenMode(booleanmode){}protectedvoidshowNotify(){}protectedvoidsizeChanged(intw,inth){}}3、GraphicsJ2ME中的Graphics类和OPhoneOS中的paint类相似。在移植中,要用OPhoneOS类库实现J2ME中的Graphics类,我们在实现的过程中可以对Graphics对象进行修饰,通过整合OPHONEOS中Canvas并调类库中的Paint类和Color类的方法来实现。比如:GraphicspublicclassGraphics{publicfinalstaticintVCENTER=0;publicfinalstaticintTOP=1;publicfinalstaticintSOLID=2;publicfinalstaticintRIGHT=3;publicfinalstaticintLEFT=4;publicfinalstaticintHCENTER=5;publicfinalstaticintDOTTED=6;publicfinalstaticintBOTTOM=7;publicfinalstaticintBASELINE=8;Canvasdist;privatefinalPaintpaint=newPaint();publicvoidbind(Canvascanvas){dist=canvas;}publicvoidsetColor(interaseColour){}publicvoiddrawImage(Imageimg,intx,inty,intanchor){dist.drawBitmap(img.getTp(),x,y,paint);}}}上面是我们重新定义的Graphics类,在其方法的实现上,我们调用了OPHONEOS的一些具体实现方法,从而用OPHONEOS类库实现了J2ME的框架,做到了两个平台之间很好的移植。从上面几个例子可以看出两个平台的框架具有很多相似性,这就为两个平台之间的移植创造了条件。同时我们也会看到,两个平台之间存在一定的差异性,一些在J2ME中的类和方法无法通过直接继承或者调用OPhoneOS来实现,这时候就需要移植人员,自己来实现一些相关的类,这也是移植过程中需要我们去努力克服的困难。相关教程参考http://www.oms-sdn.com/?id=logo网站
解决方案
解决方案二:
移植api后,发现能够进行javame程序的2次开发并且能够增加ohpone的特有功能,在其他javame的运行环境中是能实现吗?我看很悬~~~~~~
解决方案三:
有些问题我不明白,都说J2ME的程序能移植到Ophone上?但是Ophone是基于什么的?这些都好像很复杂啊?
解决方案四:
一大堆的这个,"publicvoidbind(Canvascanvas){dist=canvas;}publicvoidsetColor(interaseColour){}publicvoiddrawImage(Imageimg,intx,inty,intanchor){dist.drawBitmap(img.getTp(),x,y,paint);}Bind方法是做什么用的?,看不懂。"
解决方案五:
该回复于2009-09-11 13:40:16被版主删除
解决方案六:
,楼主可以多说一下这方面的知识,了解到,可以先移植低级UI和相关的IO操作类,实现部分常用的高级UI,可以满足大部分运行软件的移植。
解决方案七:
哎不该不读书啊现在好了想了解下什么也看不懂
解决方案八:
这个和读书一点关系也没有只要你努力了现在开始一样能学会的
解决方案九:
连接错了吧,直接跳转到是ophonesdn.com.LZ是这么?
解决方案十:
学习一下啊
解决方案十一:
要想挣钱多,就去做。没什么累不累的。
解决方案十二:
Iphone也正式宣布走入中国。说是苹果监督联通销售,能卖多少,怎么抗衡水货泛滥的情况。看看再说吧。
解决方案十三:
呵呵,既然说到两phone之战,个人认为联通干不过移动。移动太有钱了。
解决方案十四:
我现在用天翼,实话说上网很差,或许我应该再等等3G网络覆盖。另外两款不知道,因为我住在机场附近,所以3G当ADSL用。但是话说回来API转OPHONE上,作为新事物,也只有慧眼识俊的人去抢先登陆。这也就是第一个吃螃蟹的人。吃肉还是被夹自己知道。
解决方案十五:
移动是有钱,国内的手机市场它就占了2/3,人家家底厚,转行当发行商也是可以理解。
解决方案:
有钱就是爷。世界真理。
解决方案:
dingadinga
解决方案:
UP
解决方案:
移动的用户多多啊,比联通多多啦
解决方案:
移动移植,快速介入,寻找,查询,验证,交换,中断。
解决方案:
学习中!
解决方案:
学习了
解决方案:
恩,学习学习
解决方案:
顶一下~~~~~~~~~~~~~~
解决方案:
顶一下
解决方案:
up!dsadas
解决方案:
学习!谢谢楼主!
解决方案:
盯
解决方案:
啊,还可以这样吗?
解决方案:
好啊~~~
解决方案:
谢谢楼主啊
解决方案:
太感谢了
解决方案:
好东西啊thinks
解决方案:
恩还不错啊!!!!!!
解决方案:
恩还不错啊!!!!!!
解决方案:
1又一个平台,平台统一对开发人员最好
解决方案:
顶一下
解决方案:
好东西顶你!
解决方案:
哈哈,是这个样的。有道理有道理、
解决方案:
好东西好东西
解决方案:
同上同上~
解决方案:高手
解决方案:
顶下,不做移动的客户,就做移动的主。。。
解决方案:
非常感谢楼主。
解决方案:
有钱未必就是爷,他有可能是妞。
解决方案:
顶!
解决方案:
ding!
解决方案:
拜读了,顶
解决方案:
顶
解决方案:
是有期待也有无奈啊!只要有耐心,多一个平台其实就是多一个把代码改改就拿去骗钱的机会。不过话说最近耐心好被磨得太多了啊,还是憧憬刚学软件那会“一次编码,任意平台运行”的梦想啊!
解决方案:
CGK