我有一个在BlackBerry上运行的Java应用程序(JDE 4.5)。我想将此应用程序移植到Android,并能够同时维护这两个应用程序。我可能还想将此应用程序移植到其他Java平台(J2ME?)。
我知道代码的很大一部分必须特定于每个平台(UI和其他东西)。但我也觉得很多代码可以(应该)共享(域相关类)。
实现这一目标的最佳方法是什么,以及需要避免的陷阱是什么?
到目前为止,我已经能够创建一个包含所有共享类的JAR,我已经能够集成到我的BlackBerry应用程序中(使用preverify
和rapc
)。但是:
CLDC
,见https://github.com/upictec/org.json.me/blob/master/src/main/java/org/json/me/JSONObject.java#L392)。如何使用正确的预处理定义来使用(或转换)此库?答案 0 :(得分:4)
这可能很难:
java.io
或java.nio
堆栈。很难根据您提供的信息进行预测,但您可能会花费更多时间来对抗平台依赖关系,而不是通过共享代码库来节省费用。
答案 1 :(得分:2)
我会考虑共享库项目并将其作为移动应用程序构建过程中的依赖项,而不是预先打包您的共享库。这将允许您共享代码库,但由目标设备的相应构建器构建。通过一些IDE魔术和对细节的一些关注,您应该能够在发货之前发现错误。
或者,设置库项目以使用两个单独的构建器来获取错误。这将允许更清晰的分发,但是您可能会遇到问题,试图说服您的IDE将项目视为特定于设备以识别问题区域。
最终可能会支持最低公分母设备( cough Blackberry),并放弃Android上更广泛的Java实现的附加功能。
不幸的是,答案将是实验之一。试一试,看看会发生什么。
答案 2 :(得分:2)
现在,以这种方式共享代码的最大障碍是BlackBerry VM和Android VM都支持不同版本的Java语言。 BlackBerry使用Java 1.3的子集,Android使用Java 1.5的子集。 (顺便说一下,两个平台都没有实现Java VM,都使用自己的VM.Java用作编程语言.Java字节码必须转换为适当的本机VM格式才能在平台上运行。)
作为图书馆实施者,您将发现最大的不同之处在于BlackBerry缺少1.5中引入的内容,非常重要的内容,如泛型和枚举。更糟糕的是,BlackBerry缺少收藏类。这很不幸,但现在已经很久了。
这意味着要真正可移植,你必须写入最低公分母,这意味着使用(非常)旧式的类,如Hashtable和Vector,没有泛型,滚动你自己的枚举(如第1版) of Effective Java)等等。
或者您构建了两个库,一个适用于Android的现代版本和一个适用于BlackBerry的精简版本(只需要您需要的东西)。
很难说什么适合你。
答案 3 :(得分:1)
文章Porting Android code to BlackBerry详细介绍了如何使用两个平台之间共享的代码。
答案 4 :(得分:0)