2012-06-30 16 views
6

Tengo lo que creo que es una configuración bastante estándar de una aplicación web existente y me gustaría obtener consejos sobre cómo adaptarla mejor para crear versiones nativas a través de PhoneGap, de forma tal que podemos seguir desarrollando la aplicación web y actualizar las versiones generadas por el teléfono con un mínimo de reproceso.problemas de ruta portando la aplicación web a phonegap

Soy un usuario de PhoneGap. He buscado e intentado varias sugerencias de StackOverflow, etc. sin suerte, al menos para mi configuración.

La aplicación se desarrolla en GWT y consta de:

recursos estáticos en una carpeta compartida para toda la aplicación

/estáticos/con imágenes, fuentes, css. El css define algunas familias de fuentes, haciendo referencia a los archivos de fuentes en/fonts

Nos referimos a estos recursos estáticos de archivos html y código JavaScript usando rutas absolutas .

recursos estáticos en un número de subcarpetas (por módulos de GWT FYI)

tal como/LoginGadget, que tendrán GWT generan HTML, JavaScript y, a veces subcarpetas con CSS y CSS-imágenes.

GWT-RPC

Estos son, básicamente, los servlets, donde GWT se encarga de serialización, etc, y se accede desde nuestro código de cliente a través de las XHR bajo las sábanas

PhoneGap Build

he comenzado a mirar crear una aplicación empaquetada usando PhoneGap y encontrar algunos problemas donde necesito asesoramiento (ejemplo de Android).

He creado/assets/www y puse un archivo index.html allí y lo ejecuté. he copiado una versión de nuestro/estática/carpeta y nuestra carpeta/LoginGadget virtud de que "raíz" de ver, y lo comenzó usando

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

que trabaja.

En todos nuestros archivos html y Javascript generados por GWT tenemos referencias a recursos estáticos usando rutas absolutas (ej. "/ Static/....") y relativas (por ejemplo, de un LoginGadget Javascript, podría hacer referencia a "css/some.css ").

Las rutas relativas funcionan, ya que residen "debajo" de la carpeta donde se encuentran los html/js que las hacen referencia.

Problema 1

Sin embargo, las referencias a rutas absolutas fallan, a pesar de PhoneGap partir diciendo:

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

Me espera una referencia a "/static/images/file.png" de decir índice. html para ser anexado a "baseUrl" para dar file: ///android_asset/www/static/images/file.png y por lo tanto funcionar, ya que es donde se encuentra el archivo.

He tenido que modificar index.html para usar "static/image/file.png" para que funcione. Pero tendría que recompilar toda nuestra aplicación GWT con una configuración diferente para modificar todas las referencias a los recursos, y las referencias de otros archivos en subcarpetas a "/ static /" no funcionarán si se modifican para ser solo "estáticas"/".

¿Cómo puedo obtener referencias absolutas de ruta a "map" en/assets/www o similar? (Véase más abajo, he mirado en el uso de la etiqueta "base" ....)

Problema 2

Las RPC GWT hacen la solicitud XHR al servidor los html/js era servido de. Esto funciona muy bien ya que la aplicación no tiene el nombre del servidor host codificado, y de hecho está implementado en muchos appendio appids/dominios para probar, etc.

Aquí los archivos html/js son "servidos" desde file: /// por lo tanto, necesito especificar el servidor de alguna manera.

Intenté especificar con la etiqueta "base" como está documentado, pero cualquier referencia que tengo en mi html/js a un recurso que no especifica "file: //" parece estar hecha al servidor especificado en "base" ... por lo tanto, ya no estoy cargando mis recursos locales y básicamente tengo una aplicación web servida desde mi servidor.

Quieres

Lo que me gustaría hacer, es ser capaz de tomar la (bastante grande) compilado y probado aplicación desde la guerra de mi WAB-aplicación (/ estático y todas mis carpetas/GWT-Module) sin tocar y copiarlos en/assets/www en mi aplicación PhoneGap y luego agregar un poco de placa de caldera o código de inicio y ejecutar como está.

suena como una de las grandes demandas, pero creo que si pudiera especificar adecuadamente dos cosas: Ruta a

  • archivo para usarlo como "raíz" de rutas absolutas para las solicitudes de recursos que no especifican un HTTP/protocolo https (u otros protocolos ..... que ya veo son manejados en DroidGap.java)

  • servidor (protocolo, nombre de host, puerto) a utilizar para cualquier XHR solicita

¡Entonces todo saldría a la luz!

Pensé que esta sería una configuración "estándar" y ya estaba cubierta. Tal vez lo es y me estoy perdiendo algo.

Comentarios? sugerencias?

Gracias de antemano por cualquier ayuda.

+0

ten cuidado con las fuentes de aduana. No todos los navegadores lo admiten bien. P.ej. WP7 no. – Loda

+0

Hago este tipo de desarrollo con frecuencia. No estoy seguro de por qué alguna vez usaría rutas absolutas. Use rutas relativas solo como el punto de phonegap para compilar para dispositivos múltiples. –

Respuesta

0

hemos resuelto estos problemas con dos acciones separadas:

1) Escribí un objetivo ant que, como parte de nuestra compilación, toma la aplicación web y reemplaza las rutas en todas las referencias de URL internas que encuentra, lo que las hace adecuadas para que funcionen dentro de la aplicación. Todavía parece una gran falla en el teléfono para mí. Tal vez se ha solucionado en versiones más nuevas?

2) Subclasificamos la clase de servicio RPC y la modificamos para que tenga un miembro estático que sea el punto final del servicio. Al inicio de nuestra aplicación de facsímil, modificamos el punto final para apuntar al servidor deseado y listo ... todos nuestros GWT RPC apuntan al lugar correcto.

3

¿Conoces mgwt? http://www.m-gwt.com

Es un marco móvil para GWT construido por uno de los miembros del Comité Directivo de GWT y también tiene integración de teléfono para aplicaciones GWT.

Hay muchos documentos en los proyectos y un grupo de usuarios muy amigable.

Permítanme abordar sus problemas con un poco más de detalle:

problema1:

Si está utilizando la ruta absoluta obtendrá que el comportamiento inconsistente con PhoneGap, ya que el navegador se basa esas direcciones URL a nivel local y una referencia a/significa la entrada raíz en el teléfono. Usar URL absolutas es una mala idea la mayoría de las veces y le recomendaría que la cambie en su aplicación (como ya hizo).

Problem2:

Para utilizar GWT RPC con PhoneGap leer esta entrada del blog que hice para hacer frente a los problemas: http://blog.daniel-kurka.de/2012/04/gwt-rpc-with-phonegap-revisited.html

+0

He echado un vistazo rápido a mgwt/gwt-phonegap. Si hago que las cosas funcionen en Phonegap, podemos mover más de nuestro desarrollo de aplicaciones web con GWT para usarlas. Sin embargo, su salida compilada de JS será similar, creo que a mi salida de JS compilada de GWT existente ... ¿así que creo que seguiré teniendo los mismos problemas que describo en mi pregunta? –

+0

Hola Daniel, gracias por eso. Ya había avanzado en el uso de SetServiceEndPoint ..... pero me salté el trabajo de crear un nuevo generador para GWT.create(), pero se acercó a algo similar. He modificado mi compilación para reasignar las URL absolutas para rutas y trabajos para Android, pero para iOS la ruta absoluta no parece determinarse en tiempo de compilación ya que tiene una ID de dispositivo en el medio de la ruta. :-( –

Cuestiones relacionadas