[英]How to create a mobile oriented, multiplatform, shared library in Java?
我有一个在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 )。 如何使用正确的预处理定义来使用(或转换)此库? 这可能很困难:
java.io
或java.nio
堆栈。 很难从你提供的信息中预测出来,但是你很可能花费更多的时间来对抗平台依赖,而不是通过共享代码库来节省。
我不会预先打包您的共享库,而是考虑共享库项目并将其作为移动应用程序构建过程中的依赖项。 这将允许您共享代码库,但由目标设备的相应构建器构建。 通过一些IDE魔术和对细节的一些关注,您应该能够在发货之前发现错误。
或者,设置库项目以使用两个单独的构建器来获取错误。 这将允许更清晰的分发,但是您可能会遇到问题,试图说服您的IDE将项目视为特定于设备以识别问题区域。
你可能会最终支持最低的公分母设备( 咳嗽黑莓),并放弃Android上更广泛的Java实现的附加功能。
不幸的是,答案将是实验之一。 尝试一下,看看会发生什么。
如今,以这种方式共享代码的最大障碍是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版的Effective Java) ) 等等。
或者你构建了两个库,一个适用于Android的现代版本和一个适用于BlackBerry的精简版本(只需要你需要的东西)。
很难说什么适合你。
文章将Android代码移植到BlackBerry有一些关于如何使用两个平台之间共享代码的详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.