快速转化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()

更多相关文章

  1. Android运行时ART加载OAT文件的过程分析
  2. 批量处理ios破解后的资源文件为android所用
  3. Android中的R.java文件你知多少
  4. Android手机端使用Zipalign优化apk应用程序
  5. 如何给你的Android 安装文件(APK)瘦身(一)

随机推荐

  1. Windows环境下Android(安卓)NDK环境搭建
  2. Android开发——布局详解(上)
  3. [Android] Web Console: Uncaught TypeEr
  4. Android(安卓)实现自定义的卫星式菜单(弧
  5. android与PC,C#与Java 利用protobuf 进行
  6. Android模拟器RAM修改方法 - 尤其是3.0
  7. Android(安卓)SDK Manager无法显示可供下
  8. 安装Android的Eclipse插件ADT遇到错误“r
  9. Android中添加Admob广告
  10. Android(安卓)手机震动调用