快速转化J2ME程序为Android程序

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

 

你可能感兴趣的:(eclipse,android,command,application,Nokia,j2me)