jvm虚拟机android移植-接口篇


上一篇我们讲了如何下载phoneme虚拟机开源代码,如何配置编译脚本,编译测试验证基本功能。但是要让她在android上显示运行java小游戏我们还得费点劲。

好吧让我们一起来移植接口吧。

一、display接口

    由于该开源项目已经年代久远,没有针对android进行优化,你也知道google和oracle的关系,但是她对各个指令集还是支持很好的,而且她的代码各个模块功能也是分得明了的,我们着手display就从fb开始吧,因为这个在整个开源项目中支持是最好的哦。

1、分析fb_port.c 我们到midp/src/highlevelui/fb_port/fb/native目录下你就能看到这个文件了。

2、依葫芦画瓢,那我重新加入一个文件fb_port_android.c 来实现吧 

1)显示FrameBuffer 如何创建,由谁创建?(由java层创建bitmap通过jni转化实际的FrameBuffer指针然后传递给phoneme,这就就有了画的地方了)

2)如何刷新,正常刷新or旋转刷新(有用phoneme内部是已操作内存buffer为主,刷新的时候就需要拷贝buffer)

3)改变Framebuffer的大小

二、event接口

其实都是在fb_port.c中实现的,有keyboard和mouse事件,这个移植好了我们就能用键盘,鼠标或者遥控器操作了。在linux下是文件读写的方式取得按键值和鼠标的坐标的。android上我们就在java层模拟并创建BufferedOutputStream文件来实现从onKeyDown 事件中获取按键值并通过转换写入流中,phoneme底层通过读取这个流设备从而取得按键值并发送相应的event事件。鼠标事件的流程跟按键的流程是一致的。

这两件事件做好了我们基本就能看到显示输出,并操作她了。

三、media接口

如果你玩个游戏,没有声音,没有美妙的音乐,岂不是太郁闷了,所以我们得把media接口移植上,想想还是有些挑战有些难度的。

那我们就来挑战一下,纵观整个phoneme jvm虚拟机在以前的nokia手机上就有好多java小游戏,如贪吃蛇好经典的游戏不要对我说你没玩过,有点跑题了,其实我想说的是他们都是有声音的,而且phoneme本身就有这样的扩展包jsr135多媒体扩展包,这样的扩展包还有好多如蓝牙。下载一个jsr135扩展包,我们将里面的实现都弄到java层用android的MediaPlayer来实现。

大体上我们只要移植这三类接口就能满足基本的需求了。要添加这些也必须对jvm实现流程有一些了解,不让遇到每一个问题你都得花大量的时间去分析解决。

如果大家有什么想法或者疑问,请关注我们的公众号,及时沟通,这里有各种大牛帮你解决问题。

欢迎关注微信公众平台:程序员互动联盟(coder_online),一个开发人员的家,来诉说自己的故事

欢迎加入我们的QQ群:程序员互动联盟(254241126)

27225517_4bEO.jpg

你可能感兴趣的:(jvm虚拟机android移植-接口篇)