您的位置:首页 > 移动开发 > Android开发

快速转化J2ME程序为Android程序

2011-07-03 22:41 411 查看
快速转化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,请邮件:chenjianming368@sina.com。或MSN:chenjianming368@yahoo.com.cn。技术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:chenjianming368@yahoo.com.cn");
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:chenjianming368@yahoo.com.cn
E-Mail:chenjianming368@sina.com
由于本博客不能上传附件,如需要使用请到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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: