gwt-syncproxy - WebProject 和 Android 应用程序之间的 RPC
Posted
技术标签:
【中文标题】gwt-syncproxy - WebProject 和 Android 应用程序之间的 RPC【英文标题】:gwt-syncproxy - RPC between WebProject and Android App 【发布时间】:2013-12-02 13:48:31 【问题描述】:我试图让我的 android 应用程序与我的 GWT WebProject (GWT 2.5.1) 进行通信...通常我从代码的角度确定了它,但我一直遇到代码导入问题...
最初,当我尝试使用 SyncProxy 从 android 项目实例化它们时,我会在 RPCService 和 RPCServiceAsync 类上得到 NoClassDefFoundError 并且它们是在 Web 项目中定义的......即使移动项目依赖于构建中的 Web 项目-path 它没有将 Web 项目代码导出到移动 apk 中...我认为这可能是因为 GWT 编译实际上将事物转换为 javascript 而不是构建 jar 但不确定...
我继续将 RPCService 和 RPCServiceAsync 文件移动到 andoird 项目,但将 RPCServiceImpl 保留在 web 项目中并切换了依赖项(即 web 项目依赖于 android )......我现在不再得到 NoClassDefFoundError 而是syncproxy 无法在类路径中找到策略文件...这是因为策略文件位于 Web 项目的 WAR 目录中...
在我看来,我错误地拆分了我的项目,我想知道最好的方法是什么?我怎样才能让 GWT 应用程序导出 rpc 策略文件和/或其 java 类?
谢谢
【问题讨论】:
【参考方案1】:首先,您的初始设置是正确的。最好在 Web 应用程序中定义服务接口,并让您的 Android 应用程序从那里提取。我不确定您使用的是什么 IDE,但在 Eclipse 中,您要在 Build Path 对话框中使用的功能称为 Link Source。使用它,您可以将构建路径直接指向 Web 应用程序的服务接口,以使它们将与(而不是针对)Android 应用程序一起编译。
作为简要参考,请查看 SyncProxy 项目中 Android wiki 的 Setup in Eclipse 部分:https://code.google.com/p/gwt-syncproxy/wiki/Android。另请查看常见问题 wiki。 https://code.google.com/p/gwt-syncproxy/wiki/CommonIssues
需要注意的是,它的最终运行方式并不是网络应用将代码导出到 Android 项目。实际上,Android 项目会将代码从 GWT 应用程序源路径导入到它自己的源层次结构中。
关于您收到的第二个错误,即“丢失”的策略文件,请尝试在您的项目上运行 GWT 编译,并确保您的 appengine-web.xml 文件(如果使用 GAE 作为您的服务后端)已修改为在 wiki 中定义(我刚刚做了一些更新)。
最后,您可能会遇到另一个错误。由于您使用的是 GWT 2.5.1,如果您运行的不是最新版本的 SPALibrary,则可能会遇到序列化问题。我现在正在查看有关测试的反馈,并且应该可以在几个小时内在网站上下载该文件。如果针对 GWT 2.5.1 ServiceImpl 运行,请确保使用 0.4.1 Android 库。
【讨论】:
作为关于“找不到策略文件”错误的更新点,从 0.5 版开始更新 SyncProxy 以解决许多特定问题。最新版本有更多算法可以根据需要查找策略文件。【参考方案2】:我也被这个错过了,但现在经过两天的调试。我比较清楚了。
SyncProxy 需要您拥有 GWT 项目(服务器端)的全部代码。 为此,您只需创建一个额外的类,将 SyncProxy 触发到其中。在这个类中,你应该导入所有需要的类和函数,这就是你需要服务器代码的原因。
并且必须将服务器端生成的“*.gwt.rpc”文件放到本项目的类路径中。
我认为这足以让您启动 SyncProxy。
【讨论】:
以上是关于gwt-syncproxy - WebProject 和 Android 应用程序之间的 RPC的主要内容,如果未能解决你的问题,请参考以下文章