将web-app移植到phonegap的路径问题

我认为这是一个相当标准的现有网络应用程序设置,并希望通过PhoneGap如何最好地适应它来创建本机版本,以便我们可以继续开发网络应用程序并更新phonegap从中生成了最少的返工版本。

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

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

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

/ static / with images,fonts,css。 css定义了一些字体系列,引用/ fonts中的字体文件

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

许多子文件夹中的静态资源(通过GWT模块FYI)

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

GWT-RPC的

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

PhoneGap Build

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

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

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向服务器发出XHR请求,其中提供了html / js。 这很有用,因为应用程序没有硬编码的主机服务器名称,并且实际上部署在许多不同的appengine appids / domains上以进行测试等。

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

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

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

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

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

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

然后一切都会在洗涤中出现!

我认为这将是一个快速的“标准”设置,已经涵盖。 也许是这样,我只是遗漏了一些东西。

注释? 建议?

在此先感谢您的帮助。

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

它是由GWT指导委员会成员之一建立的GWT移动框架,它也为GWT应用程序提供了phonegap集成。

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

让我用更多细节来解决你的问题:

问题1:

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

Problem2:

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

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

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

2)我们将RPC服务类子类化并将其修改为具有作为服务端点的静态成员。 在我们的phonegap应用程序启动时,我们将端点修改为指向所需的服务器并且presto ….我们所有的GWT RPC指向正确的位置。