6

私は、既存の Web アプリのかなり標準的なセットアップだと思うものを持っています。Web アプリの開発と更新を続けることができるように、PhoneGap を介してネイティブ バージョンを作成するためにそれを適応させる最善の方法についてアドバイスをお願いします。 phonegap は、最小限のリワークでそれからバージョンを生成しました。

私はPhoneGapの初心者です。私は周りを検索し、少なくとも私のセットアップでは運が悪く、StackOverflow などからさまざまな提案を試みました。

このアプリは GWT で開発されており、次のもので構成されています。

すべてのアプリの共有フォルダー内の静的リソース

/static/ 画像、フォント、CSS を含む。css はいくつかのフォント ファミリーを定義し、/fonts のフォント ファイルを参照します。

絶対パスを使用して、html ファイルと JavaScript コードからこれらの静的リソースを参照します。

多数のサブフォルダー内の静的リソース (参考までに GWT モジュールによる)

/LoginGadget など、GWT によって生成された html、Javascript、および場合によっては css および css-images を含むサブフォルダーが含まれます。

GWT-RPC

これらは基本的に、GWT がシリアル化などを処理するサーブレットであり、内部の XHR を介してクライアント コードからアクセスされます。

PhoneGap ビルド

PhoneGap を使用してパッケージ化されたアプリの作成を検討し始めましたが、アドバイスが必要な問題に遭遇しました (Android の例)。

/assets/www を作成し、そこに index.html ファイルを配置して実行しました。/static/ フォルダーと /LoginGadget フォルダーのバージョンをその「ルート」の下にコピーして確認し、使用して開始しました

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

動作します。

GWT で生成されたすべての html および Javascript ファイルには、絶対パス (例: "/static/....") と相対パス (例: LoginGadget Javascript から) の両方を使用して静的リソースへの参照があります。 )。

相対パスは、それらを参照する 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 が提供されることを期待していたため、機能します。それがファイルがある場所だからです。

「static/image/file.png」を使用するには、index.html を変更して動作させる必要がありました。しかし、リソースへのすべての参照を変更するには、すべての GWT アプリを別の構成で再コンパイルする必要があり、サブフォルダー内の他のファイルから「/static/」への参照は、単に「static/」に変更された場合は機能しません。 "。

/assets/www などへの「マップ」への絶対パス参照を取得するにはどうすればよいですか? (以下を参照してください。「ベース」タグの使用について調べました....)

問題 2

GWT RPC は、html/js が提供されたサーバーに対して XHR 要求を行います。アプリにはホストサーバー名がハードコーディングされておらず、実際にはテストなどのために多くの異なる appengine アプリ ID/ドメインにデプロイされているため、これはうまく機能します。

ここで、html/js ファイルは file:/// から「提供」されるため、何らかの方法でサーバーを指定する必要があります。

文書化されているように「base」タグで指定しようとしましたが、「file://」を指定していないリソースへのhtml/jsでの参照は、「base」で指定されたサーバーに対して行われるようです。 ....したがって、ローカルリソースをロードしなくなり、基本的にサーバーからWebアプリを提供しています。

欲しい

私がやりたいことは、wab-app の戦争 (/static およびすべての /GWT-Module フォルダー) から (かなり大きな) コンパイルおよびテストされたアプリをそのままにして、それらを /assets/www にコピーできるようにすることです。私のPhoneGapアプリで、ボイラープレートまたはスタートアップコードを追加して、そのまま実行します。

大きなリクエストのように聞こえますが、次の 2 つのことを適切に指定できればと思います。

  • http/https プロトコルを指定しないリソース要求の絶対パスの「ルート」として使用するファイル パス (または、DroidGap.java で処理されている他のプロトコルを既に確認しています)

  • XHR リクエストに使用するサーバー (プロトコル、ホスト名、ポート)

その後、すべてが洗い流されます。

これは失敗した「標準」セットアップであり、すでにカバーされていると思いました。たぶんそうで、何かが足りないだけです。

コメント? 提案?

助けてくれてありがとう。

4

2 に答える 2

3

mgwtについて知っていますか?http://www.m-gwt.com

GWT運営委員会のメンバーの1人によって構築されたGWT用のモバイルフレームワークであり、GWTアプリ用の電話ギャップ統合も備えています。

プロジェクトにはたくさんのドキュメントがあり、とてもフレンドリーなユーザーグループがいます。

もう少し詳しく説明して、問題に対処しましょう。

問題1:

絶対パスを使用している場合、ブラウザはそれらのURLをローカルで構築し、/への参照は電話のルートエントリを意味するため、phonegapで一貫性のない動作が発生します。絶対URLを使用することはほとんどの場合悪い考えであり、アプリでそれを変更することをお勧めします(すでに行ったように)。

問題2:

phonegapでGWTRPCを使用するには、問題に対処するために作成したこのブログ投稿を読んでください:http: //blog.daniel-kurka.de/2012/04/gwt-rpc-with-phonegap-revisited.html

于 2012-07-01T15:59:58.313 に答える