この質問を 2 年間続けた後、私は次のように言うことができます。
私が試したすべての製品は、何らかのラッピングを使用するか、ネイティブのものを呼び出すためのレイヤーとして第 2 言語を使用します。ライブラリはネイティブですが、メイン プログラムはネイティブではありません。smartface.io を使用した Cosku の最新の回答は良い例です。彼らはそれがネイティブであると主張していますが、そうではありません。
なぜそんなに難しいのですか?問題は、プラットフォームに必要なプログラミング言語 (複雑にする言語の違い) です。2 番目の言語をプラットフォームのメイン言語に翻訳するのは複雑すぎます。これは特定のライブラリです。これは、ネイティブ バイナリでラップすることによってのみ実現できます。2 つ目の障害は、クロスプラットフォームで実行できる必要のあるコンパイラです。
しかし、出力がほとんど同じであるのに、なぜ第 2 言語またはサードパーティの開発ツールに依存してアプリを構築するのかというと、問題は次の画像に完全に示されています:
http://xkcd.com/927/
画像はスタンダードについてですが、それが起こって、スタンダードのための新しいスタンダードを作成します。たとえば、PhoneGap を使用する場合、PhoneGap API の基本を学習する必要があります。あなたはPhoneGapを呼び出す「新しい標準」に依存しています。これに関する問題は、PhoneGap サポートとその存在に完全に依存していることです。これは、アプリのライフサイクルに 2 つ目の弱点をもたらす可能性があります。
IMO、何かをラップしてクロスプラットフォームにしたい場合、サードパーティの製品やライブラリに依存するのは賢明ではありません. 私がやったように、自分でラッパーを書いて肥大化をスキップする方が良いでしょう。このすべての真の利点は、自分でラッパー コードを記述し、基礎となる構造を理解していることです。さらに、拡張や変更が簡単で、必要のないものをスキップできます。
現在、私はアプリケーションの UI を、既存の最も長く安定した「言語」HTML で JavaScript インターフェイスを使用して作成および設計しています。アプリはブラウザでも実行でき、バイブレーションなどの特定の機能が欠落している場合でも中断しません。phonegap では同じ結果は得られません。試してみてください。通常の Web サイトのように、レスポンシブ手法を使用してアプリを簡単に設計できます (たとえば、Android でこれを試してください ;-))。技術的には、ブラウザまたは Web ビューの任意のプラットフォームでどこでも実行できますが、特別なモバイル JavaScript ライブラリは使用しません。これらの特別なライブラリは必要ありません。実際には、代わりに「通常の」ライブラリ バージョンを使用してください。
ネイティブ シェルによってロードされる 1 つのファイルに UI ソースを「パック」するためのコンパイラ/難読化ツールを作成しました。これはソースを保護するためのものであるため、ソースを簡単に表示または変更することはできません。
アプリ プラットフォームをサポートするために私がしなければならないことは、ネイティブ ラッパーを作成することだけです。プラットフォームが何らかの理由で停止した場合 (たとえば、過去の Windows Mobile など)、そのための新しいラッパーを作成するだけで済みます。これは、プログラム全体を最初から書き直すよりも簡単です。また、新しいプラットフォームがある場合は、プラットフォーム ブラウザーでも実行できます。
アプリが特定のハードウェア (ゲームなど) に依存していない場合、または特別なハードウェア要件なしで実行できる場合、これはアプリのライフサイクルを延長するための方法です。HTML5 と JavaScript を使用して GUI を設計し、ネイティブ シェルを使用して特定の OS 機能を使用します。
遅いですか?いいえと言わざるを得ません。少なくとも、かさばって肥大化した特別に設計されたモバイル JavaScript ライブラリのものを使用しないでください。タッチスクリーン デバイスではクリック イベントを使用せず、代わりに touchstart を使用してください。また、HTML エンジンは最近改善される予定であり、ネイティブ言語でこれを実装する必要なく強力な HTML5 Web アプリケーションを作成できるようにする HTML5 機能のサポートが改善されています。
IMO、これは (私にとって) 進むべき道であり、クロスプラットフォームのモバイル アプリを開発し、ライフサイクルを拡張するための最良の方法を見つけるための旅です。うまくいけば、あなたも何をするのが最善かを決めるのに役立つでしょう.