单个应用程序构建多个移动设备

时间:2008-09-16 11:10:48

标签: mobile brew-framework brewmp

是否可以为多个移动设备(在BREW平台上)创建一个应用程序二进制构建,而不是使用带有条件编译的构建脚本为每个设备单独构建。

特别是可以使用单个BREW应用程序构建多屏幕分辨率吗?

请注意,目标是使用单个二进制构建。如果它只是拥有一个代码库,那么条件编译和智能构建脚本就可以实现这一目的。

3 个答案:

答案 0 :(得分:3)

是的,有可能,我们可以在以前的工作地点这样做。但是,所需要的是棘手的:

  1. 编译最小公分母BREW版本。版本1.1是所有当前手机的基础。
  2. 您的代码必须能够处理多种分辨率。根据我的经验,检测屏幕宽度和高度的方法对于所有手机都是准确的。
  3. 您的所有资源都必须加载到所有设备上。这需要制作您自己的自定义图像加载器来解决某些设备问题。对于声音,我知道简单的MIDI类型0适用于所有,但QCP也应该工作(我自己没有经验)。
  4. 使用位图字体。使用系统字体时,有太多的字体设备问题。
  5. 将您的代码结构设计为有限状态机。我不能强调这一点 - 这样做很多很多问题都没有实现。
  6. 针对每个设备问题制定解决方法。这是困难的部分!这是可能的,但这个兔子洞非常深......
  7. 最后,应用程序越复杂和越先进,你就越不可能走这条路。在运行时(例如平台ID)无法可靠地检测到某些设备属性,因此需要多个构建。

答案 1 :(得分:1)

我在Javaground上编写了一个J2ME to Brew转换。很可能编写多个分辨率的单个二进制代码。我们有一个设备错误数据库,以便它可以通过平台ID检测设备,然后生成一系列标记,标记哪些错误被标记。例如,大多数(如果不是全部)摩托罗拉Brew手机都有一个错误,即在您接听电话之前来电不会中断应用程序,因此我使用TAPI监控来电并生成hideNotify事件(因为我们是模拟Java,虽然生成的代码是纯C ++)。我在运行时为Brew版本做了一些检查,如果它是Brew 2而不是Brew 3,则禁用某些API。

3D类型游戏更容易使分辨率独立,因为您正在扩展软件。

还有2个单独的声音,IMEDIA和ISOUNDPLAYER API,ISOUNDPLAYER是较旧的API,并且在所有设备上都受支持,但没有那么多设施(您只能使用IMEDIA进行多声道音频)。我创建了一个IMEDIA对象,如果它无法获取IMEDIA对象,它将回退创建一个ISOUNDPLAYER对象。

完全通用构建的问题在于功能存在很大差异,因此可能值得进行一些构建,旧设备只有不到1MB的堆(和小屏幕尺寸),然后你得到6MB +(176x204到更大)。

使用Brew,您确实拥有一组相当一致的键值(与Java不同),尽管有些新设备是触摸屏(您必须处理指针输入)和旋转屏幕。

还有一些旧的诺基亚手机使用大端模式,这意味着文件与普通的mod文件不同(除非你想编写一些非常酷的汇编语言前缀头来解码文件)

答案 2 :(得分:0)

另一个想法可能是根据屏幕尺寸将手机分为2到4个类别,并为它们创建构建。这是一条更快捷的路线,因为您可以支持所有支持的手机,而且复杂程度要低得多。

另一件需要看的是你想要推出的手机上的BREW版本。如果说BREW 1.1在一部手机上并且在目标市场中占有一小部分,那么支持它是没有意义的。