Java在手机平台上的Porting
这两天在跑一个比较简单的J2ME的Case,整个项目不会超过3k 行的代码,但还是做得我很辛苦,因为我完全不会Java。只是对C/C++比较熟悉,看那些语法基本没有问题,拿着入门的书一般看一般就开发起来。
随着项目进入后期,需要进行兼容性测试的时候,问题来了.
记得Java世界有这么一句话,“一次编译,到处运行”,但我发现,除了MIDP1.0的代码大部分机器都能安装(并非都能使用),2.0的内容在很多机器上支持得“千奇百怪”。于是乎仔细分析了手机平台上的JVM环境的构造。
以我这个case MIDP1.0的版本为例子吧,软件中用到的资源有:
字体,输入法,控件(菜单,文本框,列表框,图片,文字,输入框),声音,其他TAPI相关内容。
手机厂商为了使得Java里的界面风格要和自己手机的风格要一样,所以将很多控件接口接到了手机平台上,所以你可以看到字体,输入法,文本框,输入框,菜单都会和手机上其他地方是一样的。(测试的过程中发现一款MTK的机器,输入框没有做接口,为Java默认的界面,超丑)。
我们遇到的问题是:
1. 部分Java支持全屏显示,部分不支持,针对不支持全屏的需要多几套版本。找了几个手机平台,发现不支持全屏的原因是部分手机在刷新 电池,信号,时间的时候单独控制的,尤其是feature phone, 界面上的status bar 一直在刷新,当全屏遮盖的时候需要独立处理,比较麻烦。
2. 内存分配不一样。导致当java里空间耗用过大的时候,java没有办法运行。在Porting Java的时候一般会预先分配给java一块空间,这块空间是不可变化的,所以当运行时需要分配大量空间的程序就跑不起来。不过我朋友研究的动态分配技术也许可以解决这样的问题。
3. 部分协议支持不完善,java协议里可以支持TAPI来的消息,但很多手机包括一些中高端的都不支持,我知道的有SMS,MMS,vCalendar.... 。咨询过公司做Java Engine的同事,支持这些协议需要理出很多低级接口和Vendor一起测试,比较麻烦。很多技术普通的公司就没有办法处理了。
4. 各个知名厂商有自己独立的接口,这个是最头疼的,如果加上厂商的接口,就是“一次编译,到处都不能运行”。知名厂商也有苦衷,太通用了,谁都能模仿... FT。
总的感觉,J2ME的执行很大程序是依赖被Porting的嵌入式环境,为了J2ME的和谐环境,我们需要牺牲很多东西去适应。曾看过一个调查数据,从网络下的J2ME的程序在手机上成功安装 & 运行率不足60%。J2ME,感觉还有好多路要走。
Java在手机平台上的Porting相关推荐
- 2021-9-10 Unity Remote5, 发布到Android手机平台上的unity测试必备使用教程(亲身示范,真机测试)
Unity Remote5, 发布到手机平台上的unity测试必备使用教程(亲身示范,真机测试) Unity Remote5 简介 Unity Remote5 安装 电脑上要做的工作 安装Androi ...
- java 蓝牙_PC平台上JAVA蓝牙通信实现方法
什么是蓝牙 蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术,能在包括移动电话.PDA.无线耳机.笔记本电脑.相关外设等众多设备之间进行无线信息交换.利用"蓝牙"技术,能 ...
- 如何将cocos2d-x程序分别移植到ios,android,windowsphone三个手机平台上
作者:方格子 链接:https://www.zhihu.com/question/21505500/answer/22152464 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- [转]国际化: 理解Java平台上的Locale
From:http://jatula.javaeye.com/blog/183680 语言和地理环境对我们的文化产生重要影响.我们同他人之间的交流以及生活中的事件都发生在语言和地理环境所产生的一个系统 ...
- 国际化: 理解Java平台上的Locale
国际化: 理解Java平台上的Locale 关键词: 鲍尔默称 凭借Windows群集 打垮linux时间问题 语言和地理环境对我们的文化产生重要影响.我们同他人之间的交流以及生活中的事件都发生在语言 ...
- 国际化:理解Java平台上的Locale
语言和地理环境对我们的文化产生重要影响.我们同他人之间的交流及生活中的事件都发生在语言和地理环境所产生的一个系统里.由于语言和环境的不同,以至需要我们来制定一个适合的方式来达到向他人表述我们自己或我们 ...
- Leetcode平台上的Median of Two Sorted Arrays题目用Java快排实现
Leetcode平台上的Median of Two Sorted Arrays题目,大意就是找两个已排序数组的中位数.今天先用快排的方式实现一下,代码如下: There are two sorted ...
- 高通平台android开发总结 MSM平台上的AMSS
http://blog.csdn.net/mirkerson/article/details/7691029 MSM平台上的AMSS REX启动分析--基于Qualcomm平台 1.高通平台andro ...
- 【华为云技术分享】如何将90%的代码自动迁移到鲲鹏平台上
主讲人:华为云云享专家 张老师 大家好,今天要讲的主题是关于软件迁移,这是一个久远的话题,因为但凡牵扯到切换平台.CPU架构的变化,甚至一些语言版本的升级,都可能会面临到软件迁移的问题.今天我们就探 ...
最新文章
- 一篇文章学懂Shell脚本
- asp.net 漂亮搜索框_推荐4款影视搜索工具,十一假期让你看剧看到爽
- “疫”不容辞,数据中心的“逆行之道”
- PADS 9.3安装教程
- 少儿编程100讲轻松学python(三)-python如何重命名文件
- 看过这五条,再离职!
- CSShack,CSS hack
- Python+pandas+matplotlib控制不同曲线的属性
- C#获取字符串中某个字符出现的次数
- stm32 OV7670/摄像头模块颜色区域定位(腐蚀中心算法)
- tenacity 报错_Python Tenacity 实现重试机制
- 搞了三天终于成功跑起来GitHub上的vue-element-admin最新解决办法!(mac系统亲测有效)
- 淘宝taobao.com步3721后尘晋升新网骚
- vivos9更改控制中心样式(修改方法分享)
- Gradle学习之Android-DSL AppExtension篇
- 海盗分赃问题-----简化问题,分而治之
- CUDA CUBIN/PTX文件动态加载
- mysql以及DBeaver的使用
- centos7下安装mycat2
- c1科目三灯光全语言播报,科目三模拟灯光语音播报(完整版)