`

J2ME 机型开发bug收集

    博客分类:
  • j2me
阅读更多

 

转载 http://www.j2megame.org/index.php/content/view/2331/125.html

Author Author: 一滴蔚蓝色 | Date Date: 2010-08-31 | View Count View: 293 | Section & Category 开发技术 - 程序设计 | Digg Digg: 0

 

 

n7610系列

手机屏幕:176*204

大量使用2.0的翻转方法很容易死机(最好用诺基亚自带的翻转方法);

 

-------------------------------------------------

n78(n73 系列)

据我们老板的推测,打包的时候要注意NAME的奇偶个数。(偶数个字符有时候安装不了)

 

 

MOTO C 系列
常见机型: C650
手机屏幕 128*128
游戏 屏幕: 128*116
非全屏屏幕: 128*100
JAVA
联网: CMWAP 需要代理
字体大小: 17*17 ,一行约 7 中文 字,内置一种字体,任何字体选项均为默认字体
MIDP
2.0
CLDC
1.0
JAVA
单个容量限制:标准 100K (实际无限制,小于手机本身内存
JAVA
堆栈容量: 800K
特别 1 :支持 MOTO FUNLIGHT API
特别 2 :支持 MOTO 3D API
特别 3 :开启摄像头、内部文件 访问权限等需要授权
特别 4 C650 机型: setMediaTime 该机型不支持, playerUpdate 传过来的 player 是副本,所以应该用
equal
而不是 ==

--------------------------------------------------------------------------------
MOTO C550/C370/E380
系列
手机屏幕: 96*65
游戏屏幕: 96*64
非全屏屏幕: 96*64
JAVA
联网: CMWAP 需要代理
字体大小:不明,可参考 MOTO C
MIDP
1.0
CLDC
1.0
JAVA
单个容量限制: 100K 标准(实际不明)
JAVA
堆栈容量: 512K
特别 1 :支持 MOTO GAME API ,可实现相当于 MIDP2.0 功能
--------------------------------------------------------------------------------
MOTO E398
V600 系列
手机屏幕: 176*220
游戏屏幕: 176*204
非全屏屏幕: 176*182
JAVA
联网: CMWAP 需要代理
字体大小: 17*17 一行约 10 个中文字,内置一种字体,任何字体选项均为默认字体。
MIDP
2.0
CLDC
1.0
JAVA
单个容量限制:无限制,小于手机本身内存
JAVA
堆栈容量: 800K
特别 1 E398 支持 MOTO FUNLIGHT API
特别 2 :支持 MOTO 3D API
特别 3 :开启摄像头、内部文件访问权限等需要授权
特别 4 V300 系列,键值正好与 E398 互为相反数,可以归为同一个版本,取键值的判断 其绝对值。
--------------------------------------------------------------------------------
MOTO C975/C980/V980
系列
手机屏幕: 176*220
游戏屏幕: 176*204
非全屏屏幕: 176*182
JAVA
联网: CMWAP 需要代理
字体大小:内置三种字体
MIDP
2.0
CLDC
1.1
JAVA
单个容量限制:无限制,小于手机本身内存
JAVA
堆栈容量: 1.5M
特别 1 :支持标准 3D API
特别 2 :支持蓝牙
--------------------------------------------------------------------------------
MOTO E680
系列
手机屏幕: 240*320
游戏屏幕: 240*320
JAVA
联网: CMWAP 需要代理、直联
字体大小:内置三种字体
MIDP
2.0
CLDC
1.1
JAVA
单个容量限制:无限制,小于手机本身内存
JAVA
堆栈容量: 1.5M (预想)
特别 1 :支持标准 3D API
特别 2 :支持蓝牙
特别 3 E680 5 个空格占一个字符 宽度
特别 4 E680 加载代码 是分段加载,尽量避免写超长的方法,否则可能会有延迟。
--------------------------------------------------------------------------------
NOKIA S40 V1
手机屏幕: 128*128
游戏屏幕: 128*128 FullCanvas
非全屏屏幕: 128*???
JAVA
联网: CMWAP 直接联
字体大小:三种字体大小,最小字体 12*12 ,一行约 10 个中文字
MIDP
1.0
CLDC
1.0
JAVA
单个容量限制: 64KB
JAVA
堆栈容量:不明
特别 1 :按键会有延迟,中断后原线程 还会在后台继续运行 直到调用 repaint ,内存开销不当会死机
----------------------------------------------------------------------------------
NOKIA S40 V2
手机屏幕: 128*128
游戏屏幕: 128*128 FullCanvas setfullscreenmode(ture)
非全屏屏幕: 128*???
JAVA
联网: CMWAP 直接联
字体大小:三种字体大小,最小字体 12*12 ,一行约 10 个中文字
MIDP
2.0
CLDC
1.0
JAVA
单个容量限制: 110~128KB 不等
JAVA
堆栈容量:不明
-------------------------------------------------------------------------------------
NOKIA 6230i
手机屏幕: 128*128
游戏屏幕: 208*208 (这里指分辨率)
JAVA
联网: CMWAP 直接联
字体大小:不明,可参考 S40
MIDP
2.0
CLDC
1.0
JAVA
单个容量限制:不明
JAVA
堆栈容量:不明
--------------------------------------------------------------------------------------
NOKIA S60 MIDP1.0
手机屏幕: 176*208
游戏屏幕: 176*208 FullCanvas
非全屏屏幕: 176*144
JAVA
联网: CMWAP 直接联
字体大小:不明,一行可显示约 12-13 个中文字
MIDP
1.0 (但是可增加多媒体播放 API
CLDC
1.0
JAVA
单个容量限制:不明
JAVA
堆栈容量:不明
特别 1 3650 机型: setClip drawRegion 搭配不能正确设置 裁减框。
特别 2 3650 机型:频繁 I/O 操作会死机,应尽量在游戏初始化时将数据 一次读入。
特别 3 N-Gage 机型:在背景缓冲上 setClip drawRegion 搭配完全不能设置裁减框声音播放有问题,建
特别 4 N-Gage 机型:声音播放有问题,建议在 I/O 操作等跟系统 底层有关调用之后再播放声音

---------------------------------------------------------------------------------------
NOKIA S60 MIDP2.0
手机屏幕: 176*208
游戏屏幕: 176*208 FullCanvas setfullscreenmode(ture)
非全屏屏幕: 176*144
JAVA
联网: CMWAP 直接联
字体大小:不明,一行可显示约 12-13 个中文字
MIDP
2.0
CLDC
1.0
JAVA
单个容量限制:不明
JAVA
堆栈容量:不明
特别 1 6600 机型:调用 readFully 不能按指定字节数读取, readByte 代替。
特别 2 6600 机型: setClip drawRegion 搭配在欧版 6600 上不能正确设置裁减框,导致绘图错误
特别 3 7610 机型: drawRegion 在这个机型上会拖慢速度,建议使用 Nokia UI API 上的 drawImage
特别 4 7610 机型:绘图函数 调用不当会当机。
特别 5 6681 机型:频繁 I/O 操作会死机,应尽量在游戏初始化时将数据一次读入。
特别 6 6681 机型:使用 2.0 drawRegion 会造成内存泄露,尽量减少使用翻转,尤其是画地图时应尽量使用 1.0 drawImage 来实现

----------------------------------------------------------------------------------------
索爱 K700C
手机屏幕: 176*220
游戏屏幕: 176*220 setfullscreenmode(true)
游戏屏幕: 176*208 com.nokia.mid.ui.FullCanvas
非全屏屏幕: 176*176 setfullscreenmode(false)
JAVA
联网: CMWAP 需要代理
字体大小:不明,一行中文字数约 10 个,内置一种字体,任何字体选项均为默认字体。
MIDP
2.0
CLDC
1.1
JAVA
单个容量限制: ???
JAVA
堆栈容量: 512K (实际使用中感觉不止)
特别 1 :支持 NOKIA UI API ,但是 drawpixels(),getpixels() 2 个表现差劲不能使用
特别 2 :支持标准 3D API
特别 3 :单个类文件不能超过 70K(JAR 包压缩后的大小 ) ,否则无法加载
------------------------------------------------------------------------------------
波导 S689
手机屏幕: 128*160
游戏屏幕: 128*144
非全屏屏幕: 128*128 (估计)
JAVA
联网: CMWAP 需要代理
字体大小:不明, 一行约 8 个中文字,内置一种字体
MIDP
2.0
CLDC
1.0
JAVA
单个容量限制: 200K
JAVA
堆栈容量: 512K
------------------------------------------------------------------------------
阿尔卡特 OT556/557
手机屏幕: 128*160
游戏屏幕: 128*160
非全屏屏幕: 128*129
JAVA
联网: CMWAP 需要代理
字体大小: 14*14 ,一行中文字个数约 8 个,内置一种字体 font(0,0,0)
MIDP
2.0
CLDC
1.0
JAVA
单个容量限制: 256k
JAVA
堆栈容量: 512K
----------------------------------------------------------------------------------

三星 X108/X608
手机屏幕: 128*128
游戏屏幕: 128*128 (全屏补丁实现)
非全屏屏幕: 128*110
JAVA
联网: CMWAP 需要代理
字体大小:不明,一行中文字个数不明,内置一种字体 font(0,0,0)
MIDP
1.0
CLDC
1.0
JAVA
单个容量限制: ???
JAVA
堆栈容量:不明


手机 Java 之怪现象
2008-01-08 21:09
下面记载的都是手机 java 实现中各种奇怪的毛病, bug ,或者 …… 特性,是根据某项目开发 经验总结出来的。但是涵盖的手机型号还是有限。因此很有可能某些 特性 会存在于更多的采用了相同 JVM (比如平台 相同、生产厂商)的手机上。


JAVA
手机网 [www.cnjm.net ]== 早期 S60 的内存泄漏 ==
这个 bug 可以上溯至 2003 年,甚至更早。表现为 java 应用 中如果使用了 Class.getResourceAsStream(" 本地文件 ") 无法释放其占用的内存,是的,没有任何办法,无论是调用获得的的 InputStream 实例的 close() 或将其设为 null ,甚至显式强制 System.gc () ,都没有效果。结果就是至少和本地文件同尺寸的内存成为了无法回收的垃圾。这个问题还影响到以 Class.getResourceAsStream () 为基础的 Image.createImage() (这个是最要命的,如何能够不使用图片资源 呢!)。

这个 bug 据说在新的 S60 上已经解决 了。但是 Nokia3230 4.0526.2ch )、 Nokia7610 6.0525.0ch )都存在这个问题。对于这些个有问题的机型,在 java 程序 中是无法完美解决这个问题的,只能尽量避免。比如集中、统一载入资源,永不释放(也就是说,尽量控制泄漏的次数)。当然,这会对已有代码造成很大影响。毕竟手机 java 应用是内存受限系统的典型,大多数情况下,珍贵的内存中只保留需要的资源。

==
键盘响应事件 ==
MIDP1 中,获取 键盘事件只能自己实现 Canvas.keyPressed() 。但是 MotorolaE398 SonyEricssonK700c 的实现却很奇怪。表现为左右软键有可能在这个方法中捕获不到。而是否能够成功捕获,取决于 keyPressed() 方法中代码的行数 ……

我承认我没彻底搞清楚这其中的玄机。鬼知道 Motorola SonyEricsson 是怎么实现的 JVM 。我只知道把 keyPressed 中的所有代码提取到另外一个函数中,在 keyPressed 只把参数传递给新函数,问题就消失了 ……

==
超慢的 drawRegion ==
除了 N-Gage QD ,几乎所有的 NokiaS60 手机都实现了 MIDP2 的支持。 MIDP2 中,最为重要的几个特性之一就是 Graphics.drawRegion 。这个 API 可以方便的将图片旋转、剪切之后画到画布上。

但是,这个 API Nokia3230 Nokia7610 等手机上的实际性能表现让人实在不敢恭维。于是,这个最重要的 API 成了摆设 …… 没什么怎么办,只能急需延用 MIDP1 的做法,自己实现剪切和旋转,或者像我一样懒,直接要求美工把旋转之后的图片全都做出来 ……

JAVA
手机网 [www.cnjm.net ]
==
诡异的内存容量 ==
按照官方 Spec Java Nokia3125 上的可用内存(即 Java Heap Size )为 512k 。但是实际测试的结果是, Nokia3125 只有 412k 左右的实际内存,相差整整 100k 。不过好在 Nokia3125 并不是种市场保有量很高的型号。但是它是我正在使用的型号 ……

==
无法 repaint ==
这个问题只存在于 SonyEricssonK700c 。表现为在 keyPressed() 中调用 repaint() 进行屏幕重画没有任何反映。

JAVA
手机网 [www.cnjm.net ]
解决办法是,在 keyReleased() 中补一个 repaint()……

== UTF8 ==
还是 SonyEricssonK700c 的问题。问题存在于 new String(byte[], charset) 上。也就是说,当获得了某个 byte[] ,并希望用 UTF8 作为字符集将其转换为字符串的时候,使用上述方法在 SonyEricssonK700c 上会出现丢失字符的现象。这个现象很诡异,以至于我目前没有搞清楚什么情况下会丢失字符(我甚至专门写了个测试程序在真机上跑,得出的结论是丢失字符的原因可能会很复杂,简单的拿被丢掉字符附近的一个子串来测没有任何问题)。

幸亏还是有解决办法的。不用 new String 就完了,而要用更加麻烦的办法,比如像我一样,用 ByteArrayInputStream ,外面套 InputStreamReader (bais, "UTF8") ,然后用 StringBuffer 一个一个 char 读进来,最后再 toString()……

==
不可 * copyArea ==
这是 Motorola 机器上的问题, V3 E398 都有。 copyArea Graphics 的作整块屏幕像素 copy 的常用 API 2D 动态 背景的游戏几乎是必不可少)。按照 Sun 官方的 Spec ,手机厂商有义务来保证其 API 实现不存在覆盖冲突问题。但是 Motorola 显然做得不够好。在 Motorola 手机上使用这个 API 会随机产生贴图混乱的情况 ……

解决办法是自己实现另外一套机制。比如使用另外一张至少和屏幕同样大小的 Image 作为缓冲,用两次 drawImage 来替代 copyArea…… 不过这个方法显而易见的缺点是消耗了更多的内存(那可是不小于屏幕尺寸的 Image 啊!)。如果内存实在吃紧,只能退而再求其次,作为缓冲的 Image 继续缩水, drawImage 的次数继续增加 …… 不过这个时候需要自己手工解决覆盖冲突 ……

JAVA
手机网 [www.cnjm.net ]
==
无法安静下来的 3220 ==
不知道这个问题是不是在 S40 平台上都有,手里 S40 又支持 MIDI 的手机实在是太少了 ……

3220
的一个很明显的特征就是声音大。以至调用了 VolumeControl.setLevel(0) 之后还是有声音,和 Sun 官方的 Spec 完全不符 …… 没办法,只能在需要静音的时候,再补一个 VolumeControl.setMute(true)

==
永不 ready ==
这是一段手机 java 获取网络 数据的常用代码: while(InputStream.ready()) { InputStream.read() }


JAVA
手机网 [www.cnjm.net ] 但是经测试,在 Nokia3230 上,这个 ready 永远返回 false…… 没办法,如果不改上述代码的话,就自己实现一个继承类吧。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    J2ME开发 J2ME开发 J2ME开发

    J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如手机、智能电表、家庭自动化设备等。它提供了跨平台的开发环境,使得开发者可以编写一次代码,到处运行。J2ME由两大...

    j2me游戏开发 经典教程

    j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发

    j2ME游戏开发详解

    【j2ME游戏开发详解】 Java 2 Micro Edition(j2ME)是Oracle公司推出的用于开发和部署在小型设备、移动设备以及嵌入式系统上的应用程序的平台。它以其轻量级、跨平台的特性,成为了早期手机游戏开发的重要工具。本...

    j2me移动开发实战教学视频源代码.rar

    j2me移动开发实战教学视频源代码.rar j2me移动开发实战教学视频源代码.rar j2me移动开发实战教学视频源代码.rar j2me移动开发实战教学视频源代码.rar j2me移动开发实战教学视频源代码.rar

    J2ME游戏开发(中文译本)

    《J2ME游戏开发》是一本专为Java Mobile Edition(J2ME)平台设计的游戏开发指南,中文译本使得国内开发者能更方便地理解和学习这一技术。J2ME是Java平台的一个子集,主要用于移动设备和嵌入式系统,如手机、智能...

    J2ME移动开发实战精解教学

    J2ME移动开发实战精解教学J2ME移动开发实战精解教学

    精通J2me嵌入式开发-环境配置.pdf

    ### 知识点详解:精通J2me嵌入式开发 - 环境配置 #### 一、J2ME概述 J2ME(Java 2 Micro Edition)是Java平台的一个版本,专门针对移动设备和嵌入式系统设计,如手机、PDA、消费电子产品等。它基于Java的核心语言...

    J2ME移动开发实战教学系列视频教程

    教程名称:J2ME移动开发实战教学系列视频教程课程目录:【】1.体系介绍和环境配置(J2ME移动开发实战教学系列视频)【】10.数值运算,字符串处理,时间管理(J2ME移动开发实战教学系列视频)【】11.随机数,集合和...

    J2ME中文开发教程(附带Myeclipse用J2ME插件)

    这个中文开发教程为想要踏入J2ME开发领域的朋友们提供了宝贵的资源,它包含了一个清晰易懂的PDF版本,能够帮助初学者快速上手。 J2ME主要由配置(Configurations)和 profiles(Profile)组成,其中配置定义了设备...

    j2me游戏开发及其源码.rar_J2ME游戏_j2me_j2me game source_j2me 游戏_j2me游戏开发

    J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,主要用于移动设备、嵌入式设备和消费类电子产品的应用程序开发。这个压缩包文件"j2me游戏开发及其源码.rar"包含了关于J2ME游戏开发的详细资料,非常适合初学...

    J2ME游戏开发(第一版)

    **J2ME游戏开发(第一版)** Java 2 Micro Edition (J2ME) 是一个为小型设备和嵌入式系统设计的Java平台,它在20世纪末至21世纪初广泛应用于移动电话、PDA和家用电器等设备上的应用程序开发,尤其是游戏领域。J2ME...

    J2ME 游戏开发(基本功能开发)

    **J2ME游戏开发基础知识** Java 2 Micro Edition (J2ME) 是一种Java平台,专为资源有限的设备如移动电话、智能手表和家用电器等设计。在J2ME中进行游戏开发,开发者可以利用其跨平台特性,将游戏移植到各种不同的...

    J2ME游戏开发PDF教程

    **J2ME游戏开发概述** Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机和平板电脑。它提供了丰富的功能,使得开发者能够构建功能丰富的应用程序,特别是游戏。...

    J2ME 游戏开发资源

    J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,主要用于移动设备、嵌入式设备上的应用程序开发,尤其是手机游戏。这个压缩包包含的“J2ME游戏开发资源”是一份宝贵的资料库,对于想要学习或从事J2ME游戏...

    J2ME移动开发视频讲义2入门教程

    **J2ME移动开发视频讲义2入门教程** J2ME,全称为Java 2 Micro Edition,是Java平台的一个子集,专为资源有限的移动设备如手机、PDA等设计。这个“J2ME移动开发视频讲义2入门教程”是由郭克华教授提供的,旨在帮助...

    J2ME的3D开发教程

    ### J2ME的3D开发教程:探索移动设备上的三维世界 #### 引言:步入移动3D开发的殿堂 随着科技的飞跃发展,移动设备的功能早已超越了基本的通讯需求,它们成为了集娱乐、多媒体体验及游戏于一体的综合性平台。其中...

    J2ME游戏开发教程 pdf文件

    **J2ME游戏开发教程详解** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专门设计用于资源有限的设备,如移动电话、智能手表和家用电器等。在2000年代初,J2ME是移动游戏开发的重要平台,许多经典手机游戏都...

    J2ME程序开发全方位基础讲解汇总

    **J2ME程序开发全方位基础讲解汇总** Java 2 Micro Edition (J2ME) 是Java平台的一个子集,主要用于嵌入式系统、移动设备和物联网(IoT)应用的开发,如手机、智能家电和车载信息系统等。本教程将全方位地讲解J2ME...

    J2ME开发文档(全)

    J2ME,全称Java Micro Edition,是Java平台的一个子集,主要针对嵌入式设备和移动设备的应用开发。这份“J2ME开发文档(全)”提供了从基础到高级的全面学习资源,包含了五个部分,旨在帮助开发者深入理解和熟练掌握...

Global site tag (gtag.js) - Google Analytics