快速转化J2ME程序为Android程序
近年来伴着Iphone/Android智能手机的迅速崛起,几乎让NOKIA这个顽固守旧的保守分子陷入倒闭边缘。Iphone/Android丰富强大时尚的众多功能,不仅越来越多的消费者放弃NOKIA,也让曾伴随其多年的众多开发者伤纷纷离去。廉颇虽然老矣,但多年的发展积累已经让开发者为之开发了数以千万计的应用程序,如何迅速移植已有的J2me应用到Android让其发挥余力,便成了开发人员急于解决的问题,为了解决这个问题,鄙人花了不少的业余时间编写了J2MEBuilder这个中间件API库android_midp.jar,借助它你可以非常快速地将原J2ME应用转化为APK应用。android_midp.jar支持MIDP2.0、cldc1.0,WMA,jsr75等常用API库,目前不支持JSR184-3D、JSR82-蓝牙库。虽然本人努力尽心移植实现,但毕竟个人精力及时间有限,难免存在各种各样的bug及不完善的地方,诺使用过程中如发现BUG,请邮件:[email protected]。或MSN:[email protected]。技术QQ群:209335378。下面介绍下怎样使用这个工具包。
1使用Eclipse新建android工程如下图:
输入工程名:ExampleAndroidJ2me,并选择一个Aandroid SDK版本,1.5以上即可 【android_midp.jar是从1.5开始适配的,当如果你需要使用彩信功能需要1.6以上版本】
2 为工程添加android_midp类库
3编写第一个HelloWorld:
3.1新建HelloAndroidJ2me.java
3.2编写HelloAndroidJ2me.java代码如下
package example.learn; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Image; import javax.microedition.lcdui.Ticker; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class HelloAndroidJ2me extends MIDlet implementsCommandListener { private Command exitCommand; private Form form; private Image imgIcon = null; @Override protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } @Override protected void pauseApp() { } private void loadImage() { try { imgIcon = Image.createImage("/Duke12.png"); } catch (Exception e) { e.printStackTrace(); } } @Override protected void startApp() throws MIDletStateChangeException { loadImage(); Display display = Display.getDisplay(this); display.setCurrent(getForm()); } @Override public void commandAction(Command command, Displayable arg1) { if (command == exitCommand) { notifyDestroyed(); } } public Form getForm() { if (form == null) { form = new Form("HelloAndroidJ2me"); form.setTicker(new Ticker("hello myfriend")); form.append(imgIcon); form.append("这是一个Android平台上J2ME中间件,可以实现在Android/OPhone平台使用传统的J2ME方式编写应用,目前暂不支持蓝牙。support/MSN:[email protected]"); form.addCommand(getExitCommand()); form.setCommandListener(this); } return form; } private Command getExitCommand() { if (exitCommand == null) { exitCommand = new Command("exit", Command.EXIT, 0); } return exitCommand; } }
3.3添加资源文件:
如:Duke12.png到src目录下,注意是src目录不是res目录
3.4编写程序描述文件AndroidManifest.xml,其作用有点类似于j2me中MF文件
<?xml version="1.0"encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="example.learn" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> <activity android:name=".HelloAndroidJ2me"android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="3"/> </manifest>
3.5可选设置项:如果你的程序包中有多个MIDlet或者你需要从你MANIFEST.MF读取各种配置信息,你可以将J2ME中JAD描述文件或MANIFEST.MF文件拷贝到src目录下,并命名为jad.MF即可
3.6运行:
Eclipse:选择工程名—右键—>Run asàAndroid application
在Target选项中选择一个android模拟器即可
3.7运行结果如下:
3.7两个需要注意的地方受限源代码特别说明:
1鉴于平台的不通用性:需要注意下
不能使用: "".getClass().getResourceAsStream(resName)这一类【java.lang中】方法读取流文件
你可以使用自定义类的this.getClass().getResourceAsStream(resName),或直接使用类库中封装的MIDlet.getResourceAsStream
2建议:在开发过程建议不要在MIDlet构造方法中写启动UI类的方法,你可以把它放到startApp()方法中
附注:
1Android开发环境配置简要文档:
通过http://developer.android.com开发网下载最新的SDK 如
android-sdk_r06-windows.zip,解压android-sdk_r06-windows.zip找到
SDK Setup.exe
1通过SDK Setup自动安装
1.1打开SDK Setup.exe
一般直接安装会提示网络连接失败,这个时候-->1.2
1.2首先选择Setting选项:
勾选Force https:// sources to be fetched using http:// 这项,然后选择Save& Apply这项
1.3 接下来我们再次回到Installed Package中,单击UpdateAll按钮后会显示Choose Packages to Install对话框,我们选择目前最新的SDK Platform android 2.0.1 这项,然后选择Accept同意许可,最后单击Install Accepted按钮,
2测试案例说明:
随本文档的发布,同时附注了一个测试案例,本测试案例来自原SUN公司提供WTK2.5中附带的DEMO,测试案例中包含了工程文件,你只需要导入到你的Eclipse中即可,希望本案例对学习者有所帮助
3后续开发:
本人目前正开发一个J2meToAndroidTool工具,目标是致力于实现直接将j2me目标jar包程序直接转化为Android/ophone上APK程序,目前已经可以将一些未混淆的程序编译成APK程序。有兴趣的请联系:MSN:[email protected]
E-Mail:[email protected]
由于本博客不能上传附件,如需要使用请到OPHONSDN论坛下载地址:http://www.ophonesdn.com/forum/thread-6367-1-1.html
Anychen
2011-7-3
QQ 群:209335378
20121023:更新至1.18 版本
-修复触摸事件不会响应弹起事件BUG
-修改RecordStore.getNumRecords()返回BUG
--增加RecordListener监听
--移除banner广告形式,SDK不再绑定AdView广告
--Canvas对象提供获取画布父容器布局接口:
public final FrameLayout getMainCanvasLayout()