【发布时间】:2009-06-19 14:10:18
【问题描述】:
我想与我正在为 iPhone 和 Blackberry (Java) 构建的应用程序共享一组功能(类)。有没有人有这样做的最佳实践?
【问题讨论】:
标签: iphone objective-c blackberry mobile java-me
我想与我正在为 iPhone 和 Blackberry (Java) 构建的应用程序共享一组功能(类)。有没有人有这样做的最佳实践?
【问题讨论】:
标签: iphone objective-c blackberry mobile java-me
据我了解您的问题,这是不可能的 - iPhone 和 Java 的二进制格式不兼容 - 甚至对于黑莓设备上的本机库也不兼容。
这不像为 OS X 构建,你可以使用 Java,不幸的是 iPhone 不支持 Java。
最好的想法可能是在 Objective-C 中构建您的库,然后将其移植到 Java,这比其他方式更容易过渡。如果您为 Objective-C 编程并确保您的代码没有内存泄漏 - 那么更改就不会那么复杂。
如果您保持类的结构相同,那么您应该会发现维护要简单得多 - 修复 Java 中的一个错误,您应该会发现在 ObjC 方法等中检查相同的错误很容易。
希望这会有所帮助 - 很抱歉,这并不全是好消息。
【讨论】:
正如 Grouchal 所提到的 - 您将无法在两个平台之间共享应用程序的任何物理组件。但是,如果您仔细地将应用程序分成高度解耦的层,您应该能够共享应用程序的逻辑设计。这仍然是一个巨大的胜利,因为逻辑应用程序设计可能占您开发工作的很大一部分。
您的目标可以是封装您在自己的接口中使用的平台特定 API(iPhone SDK 等)的部分。这样做可以有效地隐藏特定于平台的库,并使您的设计和代码在处理平台差异时更易于管理。
有了这个,您可以编写核心应用程序代码,使其在任一平台上看起来都非常相似——即使它们是用不同的语言编写的。我发现 Java 和 Objective-C 在概念上非常相似(至少在我使用它的级别上)并且希望能够至少在以下方面实现对等:
仅此一项将使应用程序更易于跨平台理解。当然,代码在边缘总是看起来非常不同 - 即当您开始处理视图、线程、网络等时。但是,这些问题将由您的 API 包装器处理,这些包装器一旦开发就应该具有相当静态的接口。
如果您以后开发需要交付到这两个平台的更多应用程序,您也可能会受益,因为您可能会发现您可以重用或扩展您的 API 包装器。
【讨论】:
如果您正在编写客户端-服务器类型的应用程序,您还应该尝试在服务器上保留尽可能多的逻辑。将设备上的额外业务逻辑量保持在最低限度。您越能将设备视为视图层,您需要做的移植工作就越少。
除此之外,在所有项目中遵循相同的命名约定和包结构非常有帮助,尤其是对于您的框架代码。
BlackBerry 和 iPhone 的 UI API 和可用性范例如此不同,以至于在大多数情况下,无法在应用程序之间直接移植这种逻辑。一个人可能犯的最大错误(在我看来)是尝试将专为一个移动平台设计的用户体验移植到另一个平台上。人们与 BlackBerry 和 iPhone 交互的方式非常不同,因此请准备好针对您要部署的每个移动平台改进用户体验。
希望这有帮助。
【讨论】:
可以编写适用于 BB10 Native 应用程序和 iOS 应用程序的 C++ 代码。 XCode 需要将 C++ 文件视为 ObjectiveCPP 代码。
我目前正在业余时间从事这样的任务。我还没有完成它足以证明或知道它是否真的可能,但我还没有遇到任何障碍。
您需要自律地编写优秀的跨平台代码,并针对特定于平台的功能进行抽象设计。
我的一般模式是我有一个“类 Foo”来做跨平台的东西,还有一个“类 FooPlatform”来做特定于平台的东西。 “Foo”类可以调用“FooPlatform”类,它抽象出任何特定于平台的东西。
原始跨平台代码本身不可编译。 在各自的 IDE 中创建单独的 BB10 和 XCode 项目。 每个项目都实现了一个细(几 [打] 行)“类 FooPlatform”并引用原始跨平台代码。
当我得到一些可以展示的东西时,我会在这里再次发布......
【讨论】: