我正在考虑使用 PlayN 来管理 Java 中的“通用代码”,并使用 PlayN 生成通用代码的 iOS、Android 和 HTML 本机版本。
我想我可以使用 playn 生成的本机代码并链接到实际的平台特定代码(例如 UI)。
换句话说,
Java中的通用代码库-> PlayN->本机通用代码库->与本机应用程序链接
将 Play 用于上述工作流程/管道是否合适?有什么挑战吗?
谢谢...
我正在考虑使用 PlayN 来管理 Java 中的“通用代码”,并使用 PlayN 生成通用代码的 iOS、Android 和 HTML 本机版本。
我想我可以使用 playn 生成的本机代码并链接到实际的平台特定代码(例如 UI)。
换句话说,
Java中的通用代码库-> PlayN->本机通用代码库->与本机应用程序链接
将 Play 用于上述工作流程/管道是否合适?有什么挑战吗?
谢谢...
首先,您必须为不同平台指定“本机”代码的含义。
在 Android 上,您的 java 文件是专门为 dalvik 编译/准备的。所以他们已经是一种时尚的“本地人”,不需要在这里做任何工作。如果您想使用 NDK 获得适用于 Android 的 C/C++ 本机代码,那么您就很不走运了。PlayN 不这样做,这是一个难题(从 Java 到 C++)
如果您看一下 PlayN 打算如何使用的 Maven 模块化布局,那么在公共代码中定义工厂接口并为每个模块传递特定于平台的实现并不难。以这种方式支持 Android 特定功能没什么大不了的。
对于 HTML 版本,您可以使用 JNI 毫无问题地使用 HTML 库,尽管与 PlayN 已经公开的功能相比,我想象的浏览器的特定功能确实价值有限。有用的一件事是文本/键盘输入,尽管我推荐 TriplePlay https://github.com/threerings/tripleplay UI 库,因为他们已经解决了这个问题,而且它是一个活跃的项目。
至于 iOS,这可能更复杂,因为 iOS 模块有点像 hack,其中编译的 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并可能看看你最喜欢的 GWT MVP 框架是什么?
...尽管这些框架中的许多可能是特定于 GWT 的,并且并不真正适合在其他平台上重用。