现在的位置: 首页 > 综合 > 正文

CLDC1.1+MIDP2.0的编译问题

2013年10月09日 ⁄ 综合 ⁄ 共 2141字 ⁄ 字号 评论关闭

 经过实验,包括windows和linux平台,cldc1.1可以和MIDP2.0编译通过 ,只是需要对MIDP2.0作一些修改,CLDC1.1没有做过修改 ,编译的MIDP可执行文件只做了一个简单的测试(运行附带的pushpuzzle游戏)

步骤如下

一 修改java部分代码,主要是两部分
    1 所有用到com.sun.cldc.io.GeneralBase.iowait()的地方一律用
com.sun.cldc.io.Waiter.waitForIO()代替,并修改import 。
    2 对于com.sun.cldc.io.j2me.datagram.DatagramObject类 ,因为他继承自cldc1.0.4 中的com.sun.cldc.io.GeneralBase,所以要么在cldc1.1代码中加上 com.sun.cldc.io.GeneralBase类,要么实现 com.sun.cldc.io.j2me.datagram.DatagramObject中Datagram的方法。

       我选择了把 GeneralBase类中的代码复制到DatagramObject的方式,又另行实现了四个关于关于float和double的方法,实现方式参考了 java.lang.DataInputStream和java.lang.DataOutputStream

二 修改C代码

    1 修改midp2.0fcs/src/share/native/kvm目录下的midpEvents.c中个的以下三个函数
        void Java_com_sun_midp_lcdui_Events_open(void);
        void Java_com_sun_midp_lcdui_Events_readInt(void);
        void Java_com_sun_midp_lcdui_Events_readUTF(void);

        其中的函数调用参照j2me_cldc/kvm/VmCommon/src中的events.c中的实现,具体修改如下
        void Java_com_sun_midp_lcdui_Events_open(void) {
           //放空
        }

        void Java_com_sun_midp_lcdui_Events_readInt(void) {
            JVM_EventsReadInt();
        }

        void Java_com_sun_midp_lcdui_Events_readUTF(void) {
            JVM_EventsReadUTF();
        }
        这么作是否正确目前没有经过详细测试。不能保证一定对。
   
    2 宏
        a: midp2.0fcs/src/${platform}/nativemidpmachine_md.h中加入#include <setjmp.h>
        b: midp2.0fcs/src/share/native/kvm/midpServices.c中的75行改为 THROW(status)
        c: midp2.0fcs/src/solaris/native/machine_md.h 中的 SLEEP_UNTIL  宏定义改为  SLEEP_FOR
    

    3 关于预验证器的问题,如果出现段错误的错误提示,可以尝试将j2me_cldc/tools/preverifier/src/convert_md.c文件中的  int utf2native(const char* from, char* to, int buflen) 函数的

        memcpy(to, from, buflen);
    改为
        int i=0;
        while(from[i++]!='/0');
        memcpy(to, from, i);

三 修改makefile

    1 midp2.0fcs/build/share/makefiles目录下的Defs.gmk文件中加入fp相关C文件名称,fp_math.c以及resource.c

    2 midp2.0fcs/build/share/makefiles/kvm目录下的VM.gmk文件中的vpath中附加上cldc1.1中fp的源码目录名称 即 vpath %.c $(KVM_DIR)/kvm/VmExtra/src/fp

四 编译,和CLDC1.0.4+MIDP2.0一样,在windows和Linux都试过,是可行的。

    windows环境 windows2000+cygwin+cl+link+jdk1.3

    linux环境     ubuntu6.06+gcc3.4+jdk1.4.2

    在windows上编译的MIDP.exe测试了PushPuzzle游戏,一切正常。

    在linux下面编译的MIDP可执行文件在执行是时出现一些问题,首先是MIDlet加载后看不到MIDlet列表,等待一会直接按soft2可以进入游戏 ,这时使用鼠标控制游戏时速度有些慢 ,使用键盘控制则正常,具体原因目前还不清楚。
    

   
 
 

抱歉!评论已关闭.