PlayN - 管理公共代码/本地代码

时间:2012-05-07 00:04:28

标签: playn

我正在考虑使用PlayN来管理Java中的“公共代码”,并使用PlayN生成公共代码的iOS,Android和HTML本机版本。

我想我可以使用playn生成的本机代码并链接到实际的平台特定代码(例如UI)。

换句话说,

Java中的公共代码库 - > PlayN - > Native Commond Code Libs - >与Native App链接

Play对上述工作流程/管道的使用是否合适?有什么挑战吗?

感谢,你...

1 个答案:

答案 0 :(得分:0)

首先,您必须为不同平台指定“本机”代码的含义。

在Android上,您的java文件是专门为dalvik编译/准备的。所以他们已经是时尚的“本土”,这里不需要做任何工作。如果你想使用NDK获取Android的C / C ++本机代码,那你就不走运了。 PlayN没有这样做,这是一个难题(从Java到C ++)

如果您看一下如何使用PlayN的Maven模块化布局,在公共代码中定义Factory接口并为每个模块传递特定于平台的实现并不困难。以这种方式支持Android特定功能并不是什么大不了的事。

对于HTML版本,使用JNI可以使用HTML库没有问题,尽管与PlayN已经公开的内容相比,我真正想象的浏览器的特定功能价值有限。有用的一件事是文本/键盘输入,虽然我建议使用triplePlay https://github.com/threerings/tripleplay UI库,因为他们已经解决了这个问题,而且这是一个活跃的项目。

至于iOS,这可能会更复杂,因为iOS模块有点乱,编译的Java类通过.net(IKVM)的JVM运行时运行,然后使用Monotouch工具编译整个事物到iOS的本机代码。见https://github.com/samskivert/ikvm-monotouch

因此,对于iOS,您将无法将代码绑定到任何形式的本机版本,并且您通过工具链方法访问的内容在很大程度上取决于Monotouch为iOS提供的服务(我想象的很多) ),以及IKVM-Monotouch支持的内容(我认为让PlayN正常工作的最低限度)。

我对Flash管道不太熟悉,无法给你评估,虽然我觉得它非常灵活。

上面的答案是假设您的应用实际上是游戏而写的。如果不是,并且您打算将标准小部件库用于大规模的各种平台,则应该可以。选择一个好的MVP框架在这里会很好,并且根据它在不同主机环境中做出的假设将决定整个事情的容易程度。

我建议您阅读并比较https://developers.google.com/web-toolkit/articles/mvp-architecture,或者查看What is your favorite GWT MVP Framework?等问题

...虽然很多这些框架可能都是GWT特定的,并没有真正迎合在其他平台上重复使用。