【专业领域】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)

原文发表时间:2015-04-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

使用Burpsuite代理和pypcap抓包进行抢红包的尝试

起因 年底各厂陆续举办年会,年会期间自然少不了红包,只不过我厂年底搞了个APP专门进行抢红包,国际惯例,手快有,手慢无。于是萌生了利用脚本尝试抢红包的想法。 A...

2027
来自专栏黑白安全

简述URL并分别说明各部分含义

转自:http://blog.csdn.net/dzhj11/article/details/9194999

1112
来自专栏企鹅号快讯

Python爬取网站的一些小技巧

1.最基本的抓站 2.使用代理服务器 这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等。 3.需要登录的情况 登录的情况比较麻烦我把问...

2015
来自专栏PPV课数据科学社区

【重磅】33款可用来抓数据的开源爬虫软件工具

要玩大数据,没有数据怎么玩?这里推荐一些33款开源爬虫软件给大家。 爬虫,即网络爬虫,是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很...

3554
来自专栏不会写文章的程序员不是好厨师

日志那些事儿——谈谈需要日志输出的client jar应该如何设计

上篇文章提到了应该如何设计需要输出日志的client jar,大概有三个比较重要的点。

703
来自专栏GreenLeaves

Web性能优化之雅虎军规

相信互联网已经越来越成为人们生活中不可或缺的一部分。Ajax,flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实 现的功能。 比如Go...

17710
来自专栏杨建荣的学习笔记

orabbix结合python发送图形报表(二) (r6笔记第38天)

在之前的博文中分享过通过结合python来发送图形报表邮件的例子。 http://blog.itpub.net/23718752/viewspace-177...

3308
来自专栏QQ音乐前端团队专栏

Vue打包优化之code spliting

如果我们对所有的代码进行合理的拆分,将首屏和非首屏的代码进行剥离,将业务代码和基础库代码进行拆分,在需要某段代码的时候再加载它,下次若再需要用则从缓存中读取.....

37810
来自专栏安富莱嵌入式技术分享

【分享】【原创开源应用第4期】给ili9488,RA8875类显示屏的emWin底层增加DMA加速方案

说明: 1、emWin底层中最重要的一个优化就是16bpp绘制,特此为其增加DMA加速,已经支持RA8875和ili9488。 2、使用中务必将emWin任务设...

452
来自专栏zaking's

真正“搞”懂http协议01—背景故事

1043

扫描关注云+社区