6

我有一个我认为是现有网络应用程序的相当标准的设置,并且想就如何最好地调整它以通过 PhoneGap 创建本机版本的建议,以一种我们可以继续开发网络应用程序和更新的方式phonegap 从中生成版本,返工最少。

我是PhoneGap 新手。我四处搜索并尝试了 StackOverflow 等的各种建议,但没有运气,至少对于我的设置而言。

该应用程序是在 GWT 中开发的,包括:

所有应用程序的共享文件夹中的静态资源

/static/ 带有图像、字体、css。css 定义了一些字体系列,在 /fonts 中引用字体文件

我们使用绝对路径从 html 文件和 JavaScript 代码中引用这些静态资源。

多个子文件夹中的静态资源(由 GWT 模块仅供参考)

例如 /LoginGadget,它将有 GWT 生成的 html、Javascript 以及有时带有 css 和 css-images 的子文件夹。

GWT-RPC

这些基本上是 GWT 负责序列化等的 servlet,并且可以通过 XHR 从我们的客户端代码访问。

PhoneGap 构建

我已经开始考虑使用 PhoneGap 创建一个打包的应用程序,并遇到了一些我需要建议的问题(Android 示例)。

我已经创建了 /assets/www 并在其中放置了一个 index.html 文件并开始运行。我复制了我们的 /static/ 文件夹和 /LoginGadget 文件夹的版本在那个“根”下查看,并使用

super.loadUrl("file:///android_asset/www/index.html");

哪个有效。

在我们所有 GWT 生成的 html 和 Javascript 文件中,我们使用绝对路径(例如“/static/....”)和相对路径(例如,来自 LoginGadget Javascript,它可能引用“css/some.css”)来引用静态资源)。

相对路径有效,因为它们位于引用它们的 html/js 所在的文件夹“下”。

问题 1

然而,对绝对路径的引用失败,尽管 PhoneGap 开头说:

DroidGap: url=file:///android_asset/www/index.html baseUrl=file:///android_asset/www/

我希望将 index.html 中对“/static/images/file.png”的引用附加到“baseUrl”以提供 file:///android_asset/www/static/images/file.png 并因此工作,因为那是文件所在的位置。

我不得不修改 index.html 以使用“static/image/file.png”让它工作。但是我必须使用不同的配置重新编译我们所有的 GWT 应用程序以修改对资源的所有引用,并且如果修改为只是“静态/”,则子文件夹中其他文件的引用返回“/static/”将不起作用”。

如何获得对“映射”到 /assets/www 或类似文件的绝对路径引用?(见下文,我已经研究过使用“base”标签......)

问题 2

GWT RPC 向提供 html/js 的服务器发出 XHR 请求。这很好用,因为该应用程序没有硬编码主机服务器名称,实际上部署在许多不同的应用程序引擎应用程序 ID/域上进行测试等。

这里的 html/js 文件是从 file:/// “提供”的,因此我需要以某种方式指定服务器。

我尝试使用文档中的“base”标记进行指定,但是我在 html/js 中对未指定“file://”的资源的任何引用似乎都是对“base”中指定的服务器进行的。 ....因此我不再加载我的本地资源,我基本上有一个从我的服务器提供的网络应用程序。

我想做的是能够从我的 wab-app 的战争(/static 和我所有的 /GWT-Module 文件夹)中获取(相当大的)编译和测试的应用程序,并将它们复制到 /assets/www在我的 PhoneGap 应用程序上,然后添加一些样板或启动代码并按原样运行。

听起来像是一个很大的要求,但我想如果我能正确指定两件事:

  • 文件路径用作未指定 http/https 协议(或其他协议......我已经看到在 DroidGap.java 中处理)的资源请求的绝对路径的“根”

  • 用于任何 XHR 请求的服务器(协议、主机名、端口)

然后一切都会洗出来!

我认为这将是一个失败的“标准”设置,并且已经涵盖。也许是这样,我只是错过了一些东西。

评论?建议?

提前感谢您的帮助。

4

2 回答 2

3

你知道mgwt吗?http://www.m-gwt.com

它是由 GWT 指导委员会成员之一构建的 GWT 移动框架,并且它还具有 GWT 应用程序的 phonegap 集成。

项目中有很多文档和一个非常友好的用户组。

让我更详细地解决您的问题:

问题1:

如果您使用绝对路径,您将得到与 phonegap 不一致的行为,因为浏览器在本地构建这些 url,并且对 / 的引用表示手机上的根条目。大多数时候使用绝对 URL 是一个坏主意,我建议您在应用程序中更改它(就像您已经做过的那样)。

问题2:

要将 GWT RPC 与 phonegap 一起使用,请阅读我为解决这些问题而撰写的这篇博文:http ://blog.daniel-kurka.de/2012/04/gwt-rpc-with-phonegap-revisited.html

于 2012-07-01T15:59:58.313 回答
0

我们通过两个单独的操作解决了这些问题:

1) 我编写了一个 ant 目标,作为我们构建的一部分,它采用 web 应用程序,并替换它找到的所有内部 url 引用中的路径,使它们适合它们在应用程序中工作所需的内容。对我来说,这仍然是 phonegap 中的一个主要错误。也许它已在较新的版本中修复?

2) 我们对 RPC 服务类进行了子类化,并对其进行了修改,使其具有一个静态成员,即服务端点。在我们的 phonegap 应用程序启动时,我们修改端点以指向所需的服务器并 presto.... 我们所有的 GWT RPC 都指向正确的位置。

于 2013-05-20T09:15:57.910 回答