Mobile 针对多个移动设备的单一应用程序构建

Mobile 针对多个移动设备的单一应用程序构建,mobile,brew-framework,brewmp,Mobile,Brew Framework,Brewmp,可以为多个移动设备(在平台上)进行一个应用程序二进制构建,而不是使用带条件编译的构建脚本为每个设备进行单独构建 特别是,是否可以使用单个BREW应用程序构建实现多个屏幕分辨率 请注意,目标是拥有单个二进制构建。如果只需要一个代码库,那么条件编译和智能构建脚本就可以做到这一点。是的,这是可能的,我们在我以前的工作地点就可以做到这一点。但需要做的事情很棘手: 编译为最小公分母BREW版本。1.1版是目前所有手机的基础 您的代码必须能够处理多个分辨率。根据我的经验,检测屏幕宽度和高度的方法适用于所有手

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

特别是,是否可以使用单个BREW应用程序构建实现多个屏幕分辨率


请注意,目标是拥有单个二进制构建。如果只需要一个代码库,那么条件编译和智能构建脚本就可以做到这一点。

是的,这是可能的,我们在我以前的工作地点就可以做到这一点。但需要做的事情很棘手:

  • 编译为最小公分母BREW版本。1.1版是目前所有手机的基础
  • 您的代码必须能够处理多个分辨率。根据我的经验,检测屏幕宽度和高度的方法适用于所有手机
  • 必须在所有设备上加载所有资源。这需要制作自己的自定义图像加载器来解决某些设备问题。对于声音,我知道简单的MIDI类型0适用于所有类型,但QCP也应该适用(我自己没有这方面的经验)
  • 使用位图字体。字体存在太多的设备问题,不值得使用系统字体
  • 将代码结构设计为有限状态机。这一点我再强调也不为过——做了这件事,很多很多问题永远不会出现
  • 为每个设备问题提供解决办法。这是最难的部分!这是可能的,但是这个兔子洞非常深

  • 最后,应用程序越复杂、越高级,就越不可能走这条路。一些设备属性在运行时无法可靠检测(如平台ID),因此需要多个版本。

    另一个想法可能是根据屏幕尺寸将手机分为2到4个类别,并为其创建版本。这也是一条更快的路线,因为您将能够以更少的复杂性支持所有您想要支持的手机


    另一个值得一看的是要在手机上启动的BREW版本。如果说BREW 1.1安装在一台手机上,并且在您的目标市场上只占一小部分,那么支持它是没有意义的。

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

    3D类型的游戏更容易使分辨率独立,因为您可以在软件中进行缩放

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

    一个完全通用的构建的问题是,在功能上有很大的差异,因此有几个构建是值得的,较旧的设备只有不到1MB的堆(和较小的屏幕大小),然后使用6MB+(176x204到更大)

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

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