【问题标题】:Single application build for multiple mobile devices为多个移动设备构建单一应用程序
【发布时间】:2008-09-16 11:10:48
【问题描述】:

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

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

请注意,我们的目标是构建一个二进制。如果只是拥有一个代码库,那么条件编译和智能构建脚本就可以解决问题。

【问题讨论】:

    标签: mobile brew-framework brewmp


    【解决方案1】:

    是的,有可能,我们能够在我以前的工作地点做到这一点。但是,所需的内容很棘手:

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

    最后,应用程序越复杂、越高级,你走这条路的可能性就越小。某些设备属性在运行时根本无法可靠地检测到(例如平台 ID),因此需要多次构建。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        另一件要查看的是您想要启动的手机上的 BREW 版本。如果说 BREW 1.1 在一部手机上,并且在您的目标市场中由一小部分人拥有,那么努力支持它是没有意义的。

        【讨论】:

          猜你喜欢
          • 2018-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-29
          • 1970-01-01
          • 1970-01-01
          • 2015-04-13
          • 1970-01-01
          相关资源
          最近更新 更多