2012-06-30 8 views
6

Ich habe, was ich denke, ist eine ziemlich Standard-Setup einer bestehenden Web-App und würde gerne beraten, wie Sie es am besten für die Erstellung nativer Versionen über PhoneGap in einer Weise anpassen Wir können die Web-App weiter entwickeln und die phonegap-generierten Versionen mit minimaler Überarbeitung aktualisieren.Pfad Probleme Portierung Web-App zu Phonegap

Ich bin ein PhoneGap-Neuling. Ich habe gesucht und verschiedene Vorschläge von StackOverflow usw. ausprobiert, ohne Glück, zumindest für mein Setup.

Die App ist in GWT entwickelt und besteht aus:

statische Ressourcen in einem gemeinsamen Ordner für alle des App

/static/mit Bildern, Schriften, CSS. Die CSS definieren einige Schriftfamilien, die Schriftartdateien in/Fonts referenzieren

Wir beziehen uns auf diese statischen Ressourcen von HTML-Dateien und JavaScript-Code mit absoluten Pfade.

statische Ressourcen in einer Reihe von Unterordnern (von GWT Module FYI)

wie/LoginGadget, die GWT haben generierten HTML, Javascript und manchmal Unterordner mit CSS und CSS-Bilder.

GWT-RPCs

Diese sind im Allgemeinen Servlets, wo GWT Pflege der Serialisierung usw. nimmt, und sind von unserem Client-Code über XHRs unter die Decke bauen

PhoneGap

ich auf der Suche begonnen haben Zugriff auf Erstellen Sie eine gepackte App mit PhoneGap und stoßen Sie auf einige Probleme, bei denen ich einen Rat brauche (Beispiel Android).

Ich habe erstellt/Vermögenswerte/www und legte eine index.html-Datei in dort und habe es in Gang gebracht. kopiert ich eine Version unseres/static/Ordner und unsere/LoginGadget Ordner unter diesem „root“ zu sehen, und begann es

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

verwendet, die funktioniert.

In allen von GWT generierten HTML- und Javascript-Dateien haben wir Verweise auf statische Ressourcen sowohl mit absoluten (zB "/ static/....") als auch relativen Pfaden (zB von einem LoginGadget-Javascript, es könnte auf "css/some.css ").

Die relativen Pfade funktionieren, da sie "unter" dem Ordner liegen, in dem die html/js, auf die sie verweisen, liegen.

Problem 1

jedoch Verweise auf absolute Pfade versagen trotz PhoneGap mit den Worten beginnen:

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

ich erwartet hatte von einem Verweis auf "/static/images/file.png", sagen Index. html an die "baseUrl" angehängt werden, um file: ///android_asset/www/static/images/file.png zu geben und damit zu arbeiten, da dort die Datei liegt.

Ich musste index.html ändern, um "static/image/file.png" zu verwenden, damit es funktioniert. Aber ich würde alle unsere GWT-App mit einer anderen Konfiguration neu kompilieren müssen, um alle Verweise auf Ressourcen zu ändern, und Verweise von anderen Dateien in Unterordnern zurück auf "/ static /" funktionieren nicht, wenn sie nur "statisch" geändert werden/".

Wie kann ich absolute Pfadreferenzen zu "map" zu/assets/www oder ähnlichem bekommen?

(Siehe unten, ich habe bei Verwendung der "Basis" tag .... sah)

Problem 2

Die GWT RPCs machen auf dem Server die html/js die XHR Anfrage von serviert wurde. Das funktioniert gut, da die App nicht den Host-Server-Namen hart-codiert hat, und tatsächlich auf vielen verschiedenen appengine-appids/domains zum Testen usw. eingesetzt wird.

Hier werden die html/js-Dateien "bedient" file: /// Daher muss ich den Server irgendwie angeben.

Ich habe versucht, mit dem "Basis" -Tag wie dokumentiert, aber dann eine Referenz, die ich in meiner html/js zu einer Ressource, die keine Angabe "file: //" angegeben scheint auf den Server in angegeben angegeben "base" ..... damit lade ich meine lokalen Ressourcen nicht mehr auf und habe grundsätzlich eine Web-App von meinem Server aus bedient.

Wollen

Was würde ich tun, ist es, die (ziemlich groß) zu ergreifen, um der Lage sein, kompiliert und getestet App von meinem wab-App-Krieg (/ statisch und alle meine/GWT-Modul Ordner) unangetastet und kopiere sie in/acces/www auf meiner PhoneGap App und füge dann etwas Kesselplatte oder Startcode hinzu und laufe so wie es ist.

Klingt wie eine große Bitte, aber ich denke, wenn ich richtig zwei Dinge geben könnte:

  • Dateipfad zu verwenden, als „root“ für absolute Pfade für Ressourcenanforderungen, die/keine http angeben https-Protokoll (oder andere Protokolle ..... die ich bereits in DroidGap.java behandelt werden sehen)

  • Server (Protokoll, Host-Name, Port) für jede XHR verwenden fordert

Dann würde alles in der Wäsche herauskommen!

Ich dachte, das wäre ein "Standard" Setup und bereits abgedeckt. Vielleicht ist es und ich verpasse gerade etwas.

Kommentare? Vorschläge?

Vielen Dank im Voraus für jede Hilfe.

+0

aufpassen mit den Zollschriften. Nicht alle Browser unterstützen es gut. Z.B. WP7 nicht. – Loda

+0

Ich mache diese Art der Entwicklung häufig. Nicht sicher, warum du jemals absolute Pfade benutzen würdest. Verwenden Sie nur relative Pfade, da der Punkt von phonegap für mehrere Geräte erstellt werden soll. –

Antwort

0

wir diese Probleme mit zwei getrennten Aktionen gelöst:

1) Ich habe ein Ameisen-Ziel geschrieben, das als Teil unseres Builds die Web-App übernimmt und die Pfade in allen internen URL-Referenzen ersetzt, die es findet, sodass sie passend sind, damit sie innerhalb der App funktionieren können. Es scheint immer noch ein großer Fehler in phonegap zu mir. Vielleicht wurde es in neueren Versionen behoben?

2) Wir unterordneten die RPC-Serviceklasse und modifizierten sie so, dass sie ein statisches Member als Serviceendpunkt enthielt. Beim Start unserer phonegap App modifizieren wir den Endpunkt so, dass er auf den gewünschten Server zeigt und presto .... all unsere GWT RPCs zeigen auf den richtigen Platz.

3

Wissen Sie über mgwt? http://www.m-gwt.com

Es ist ein mobiles Framework für GWT, das von einem der GWT Steering Committee-Mitglieder erstellt wurde, und es hat auch eine Phonegap-Integration für GWT-Apps.

Es gibt viele Dokumente in den Projekten und eine sehr freundliche Benutzergruppe.

Lassen Sie mich Ihre Probleme lösen mit ein wenig mehr Detail:

Problem1:

Wenn Sie absoluten Pfad verwenden, werden Sie, dass inkonsistentes Verhalten mit phonegap bekommen, da der Browser lokal URLS baut und ein Verweis auf/bedeutet den Stammeintrag auf dem Telefon. Die Verwendung von absoluten URLs ist meistens eine schlechte Idee und ich würde Ihnen empfehlen, dies in Ihrer App zu ändern (wie Sie es bereits getan haben).

Problem2:

mit phonegap GWT RPC nutzen zu können, lesen Sie diesen Blog-Post, dass ich die Probleme zu lösen gemacht: http://blog.daniel-kurka.de/2012/04/gwt-rpc-with-phonegap-revisited.html

+0

Ich habe mir kurz mgwt/gwt-phonegap angesehen. Wenn ich Dinge in phonegap funktioniere, können wir vielleicht mehr von unserer Web-App-Entwicklung mit GWT bewegen, um sie zu benutzen. Wie auch immer, ihre kompilierte JS-Ausgabe wird ähnlich sein wie meine bestehende GWT-kompilierte JS-Ausgabe ..... und so denke ich, dass ich immer noch die gleichen Probleme habe, die ich in meiner Frage beschreibe? –

+0

Hallo Daniel, danke dafür. Ich war bereits den Weg der Verwendung von SetServiceEndPoint gegangen ..... aber übersprungen die Arbeit der Erstellung eines neuen Generators für GWT.create(), aber ähnlich genähert. Ich habe meine Build geändert, um die absoluten URLs für Pfade neu anzuordnen und funktioniert für Android, aber für iOS scheint der absolute Pfad nicht zur Kompilierzeit gefunden zu werden, da er eine Geräte-ID in der Mitte des Pfades hat! :-( –