【专业领域】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 条评论
登录 后参与评论

相关文章

来自专栏数据和云

高危防范:巧用触发器,实现DDL监控

在数据运维过程中,常常因为DBA的疏忽而使数据安全面临威胁,有些威胁来自数据库外部,如rm操作,而有些威胁则来自数据库内部,如Truncate操作.因此对于数据...

2724
来自专栏数据和云

青铜到王者,看看你的MySQL数据库是什么段位,如何提升?

作者 | 张甦, 数据库领域的专家和知名人士、图书《MySQL王者晋级之路》作者,51CTO 专家博主。近10年互联网线上处理及培训经验,专注于 MySQL 数...

1274
来自专栏Android 开发者

Android P 应用兼容常见错误及建议

1.6K2
来自专栏Python

一、爬虫基本原理

一 爬虫是什么 ? #1、什么是互联网? 互联网是由网络设备(网线,路由器,交换机,防火墙等等)和一台台计算机连接而成,像一张网一样。 #2、互联网建...

21610
来自专栏微信公众号:Java团长

为什么分布式一定要有Redis?

考虑到绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知...

591
来自专栏IT大咖说

漫谈Android组件化及Web化

内容来源:2018 年 04 月 14 日,高级Android工程师陈家伟在“2018互联网开发者大会”进行《漫谈Android组件化及Web化》演讲分享。IT...

1185
来自专栏SDNLAB

DLUX组件扩展下篇-实践

作者: M.S-Group.皮皮熊,M.S-Group组织主要成员之一,数通行业老兵,精通传统数通网络技术,SDN/NFV新技术的狂热拥护者!

844
来自专栏更流畅、简洁的软件开发方式

【自然框架】之通用权限的Demo(一):角色的添加和修改

      非常抱歉,我是一个靠激情来工作的人,有心情做什么多快,没心情的时候什么都不爱做。最近很烦,所以速度也很慢。原本打算周一拿出来Demo的,结果延迟了现...

2499
来自专栏大魏分享(微信公众号:david-share)

API的计量与限速 | 将一个Web API纳入API管理 |API Management学习第二篇

在本文中,我们将针对:API Management学习第一篇中编写的Restful API,进行纳管。

1005
来自专栏安恒信息

干货分享 | GoAhead服务器 远程命令执行漏洞(CVE-2017-17562) 分析报告

安全通告 1 GoAhead Web Server是为嵌入式实时操作系统(RTOS)量身定制的开源Web服务器。很多国际一线大厂商,包括IBM、HP、Oracl...

27112

扫码关注云+社区