为iPhone和BlackBerry开发的共享库

4

我有一组功能(类),我想在我为iPhone和Blackberry(Java)构建的应用程序中与他人分享。有没有关于如何做到这一点的最佳实践?

4个回答

4
据我理解,您的问题可能无法实现——iPhone和Java的二进制格式不兼容,即使在黑莓设备上使用本地库也是如此。这与构建OS X不同,因为iPhone不支持Java。
最好的方法可能是用Objective-C构建您的库,然后将其移植到Java中,这比反向转换更容易。如果您编写Objective-C代码并确保代码没有内存泄漏,则更改不会很复杂。
如果您保持类结构不变,则应该发现维护更加简单——在Java中修复错误,您应该很容易检查ObjC方法中是否存在相同的错误等。
希望这可以帮助您,很抱歉这并不是所有好消息。

这确实有帮助。我稍微编辑了一下我的帖子。我更想要的是最佳实践,而不是共享二进制文件的能力。内存泄漏指导正是我正在寻找的信息。 - Cody C
我同意teabot的观点 - 任何你能做到让设计相似的事情都会是一个巨大的胜利。 - Grouchal

4
正如Grouchal所提到的,你将无法在两个平台之间共享应用程序的任何物理组件。但是,如果您仔细将其分成高度解耦的层,则应该能够共享应用程序的逻辑设计。这仍然是一个巨大的胜利,因为逻辑应用程序设计可能占据了您开发工作的很大一部分。
您可以尝试使用自己的接口包装特定于平台的API(iPhone SDK等)的部分。通过这样做,您实际上隐藏了特定于平台的库,并使您的设计和代码在处理平台差异时更易于管理。
有了这个,您可以编写核心应用程序代码,以便它在任何平台上看起来非常相似 - 即使它们用不同的语言编写。我发现Java和Objective-C在概念上非常相似(至少在我使用它的级别上),并且希望至少达到以下水平:
- 几乎相同的Java和Objective-C类集合,具有相同的名称和职责 - 具有类似命名方法的Java/Objective-C类 - 具有相同职责和逻辑实现的Java/Objective-C方法
这本身就会使应用程序在各个平台上更易于理解。当然,在边缘处,即当您开始处理视图、线程、网络等时,代码始终会看起来非常不同。但是,这些问题将由您的API包装器处理,一旦开发完成,应该具有相当静态的接口。
如果您稍后开发需要在两个平台上交付的其他应用程序,则还可能受益,因为您可能会发现可以重用或扩展您的API包装器。

3
如果你正在编写客户端-服务器类型的应用程序,你应该尽可能在服务器上保留尽可能多的逻辑。将设备上的额外业务逻辑数量最小化。你能够将设备视为视图层,就越少要进行整体移植。
除此之外,对于所有项目都遵循相同的命名约定和包结构有很大帮助,特别是对于框架代码。
BlackBerry和iPhone的UI API和可用性范例如此不同,以至于在大多数情况下,不能直接将这种逻辑移植到应用程序中。我认为最大的错误是试图将针对一个移动平台设计的用户体验移植到另一个平台上。人们与BlackBerrys与iPhones的交互方式非常不同,因此请准备好为您想要部署的每个移动平台重新设计您的用户体验。
希望这有所帮助。

你关于保证用户交互在每个平台上的一致性是正确的。你提到尽可能将代码放在服务器上并不总是适用-它依赖于用户是否有良好的连接。如果你的解决方案是让服务器做所有的事情,那么写一个Web应用程序可能更好。如果你要有一个本地应用程序,如果需要服务器来完成核心任务并且用户没有信号,用户体验就不好了。 - Grouchal

0

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

我目前正在利用业余时间完成这样的任务。我还没有完成足够的工作来展示或知道它是否真正可行,但我还没有遇到任何障碍。

您需要有纪律性地编写良好的跨平台代码,设计具有平台特定功能抽象的抽象层。

我的一般模式是我有“class Foo”来做跨平台的事情,还有一个“class FooPlatform”来做平台特定的事情。 类“Foo”可以调用类“FooPlatform”,后者抽象出任何平台特定的内容。

原始的跨平台代码本身无法编译。 在各自的IDE中创建单独的BB10和XCode项目。 每个项目实现一个薄(几十行)的“class FooPlatform”,并引用原始的跨平台代码。

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


还可以参考RIM官方的“从iOS到BB10移植应用程序”页面:http://developer.blackberry.com/native/beta/documentation/porting_ios_intro.html 阅读该主题的子主题... - swooby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接