【问题标题】:Shared Library for iPhone and BlackBerryiPhone 和 BlackBerry 共享库
【发布时间】:2009-06-19 14:10:18
【问题描述】:

我想与我正在为 iPhone 和 Blackberry (Java) 构建的应用程序共享一组功能(类)。有没有人有这样做的最佳实践?

【问题讨论】:

    标签: iphone objective-c blackberry mobile java-me


    【解决方案1】:

    据我了解您的问题,这是不可能的 - iPhone 和 Java 的二进制格式不兼容 - 甚至对于黑莓设备上的本机库也不兼容。

    这不像为 OS X 构建,你可以使用 Java,不幸的是 iPhone 不支持 Java。

    最好的想法可能是在 Objective-C 中构建您的库,然后将其移植到 Java,这比其他方式更容易过渡。如果您为 Objective-C 编程并确保您的代码没有内存泄漏 - 那么更改就不会那么复杂。

    如果您保持类的结构相同,那么您应该会发现维护要简单得多 - 修复 Java 中的一个错误,您应该会发现在 ObjC 方法等中检查相同的错误很容易。

    希望这会有所帮助 - 很抱歉,这并不全是好消息。

    【讨论】:

    • 这确实有帮助。我对我的帖子进行了一些编辑。我更多的是寻找最佳实践而不是共享二进制文件的能力。内存泄漏指南正是我正在寻找的信息。
    • 我同意teabot - 你可以做任何使设计相似的事情都会是一个巨大的胜利。
    【解决方案2】:

    正如 Grouchal 所提到的 - 您将无法在两个平台之间共享应用程序的任何物理组件。但是,如果您仔细地将应用程序分成高度解耦的层,您应该能够共享应用程序的逻辑设计。这仍然是一个巨大的胜利,因为逻辑应用程序设计可能占您开发工作的很大一部分。

    您的目标可以是封装您在自己的接口中使用的平台特定 API(iPhone SDK 等)的部分。这样做可以有效地隐藏特定于平台的库,并使您的设计和代码在处理平台差异时更易于管理。

    有了这个,您可以编写核心应用程序代码,使其在任一平台上看起来都非常相似——即使它们是用不同的语言编写的。我发现 Java 和 Objective-C 在概念上非常相似(至少在我使用它的级别上)并且希望能够至少在以下方面实现对等:

    • 一组几乎相同的 Java 和 Objective-C 类,具有相同的名称和职责
    • 具有类似名称方法的 Java/Objective-C 类
    • 具有相同职责和逻辑实现的 Java/Objective-C 方法

    仅此一项将使应用程序更易于跨平台理解。当然,代码在边缘总是看起来非常不同 - 即当您开始处理视图、线程、网络等时。但是,这些问题将由您的 API 包装器处理,这些包装器一旦开发就应该具有相当静态的接口。

    如果您以后开发需要交付到这两个平台的更多应用程序,您也可能会受益,因为您可能会发现您可以重用或扩展您的 API 包装器。

    【讨论】:

      【解决方案3】:

      如果您正在编写客户端-服务器类型的应用程序,您还应该尝试在服务器上保留尽可能多的逻辑。将设备上的额外业务逻辑量保持在最低限度。您越能将设备视为视图层,您需要做的移植工作就越少。

      除此之外,在所有项目中遵循相同的命名约定和包结构非常有帮助,尤其是对于您的框架代码。

      BlackBerry 和 iPhone 的 UI API 和可用性范例如此不同,以至于在大多数情况下,无法在应用程序之间直接移植这种逻辑。一个人可能犯的最大错误(在我看来)是尝试将专为一个移动平台设计的用户体验移植到另一个平台上。人们与 BlackBerry 和 iPhone 交互的方式非常不同,因此请准备好针对您要部署的每个移动平台改进用户体验。

      希望这有帮助。

      【讨论】:

      • 你对这个大错误是正确的,并确保每个平台上的用户交互都是一致的。您评论将尽​​可能多的代码放在服务器上并不总是有效 - 它依赖于具有良好连接的用户。我认为,如果您的解决方案是让服务器做所有事情,那么您最好编写一个 Web 应用程序。如果你打算有一个本地应用程序,如果它需要服务器做核心事情并且用户没有信号,那么用户体验就不好。
      【解决方案4】:

      可以编写适用于 BB10 Native 应用程序和 iOS 应用程序的 C++ 代码。 XCode 需要将 C++ 文件视为 ObjectiveCPP 代码。

      我目前正在业余时间从事这样的任务。我还没有完成它足以证明或知道它是否真的可能,但我还没有遇到任何障碍。

      您需要自律地编写优秀的跨平台代码,并针对特定于平台的功能进行抽象设计。

      我的一般模式是我有一个“类 Foo”来做跨平台的东西,还有一个“类 FooPlatform”来做特定于平台的东西。 “Foo”类可以调用“FooPlatform”类,它抽象出任何特定于平台的东西。

      原始跨平台代码本身不可编译。 在各自的 IDE 中创建单独的 BB10 和 XCode 项目。 每个项目都实现了一个细(几 [打] 行)“类 FooPlatform”并引用原始跨平台代码。

      当我得到一些可以展示的东西时,我会在这里再次发布......

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 2018-05-25
      • 2015-03-27
      相关资源
      最近更新 更多