2010-11-18 2 views
6

AndroidでJavaScriptを使用することはできますか?もしそうなら、どうですか?いくつか例を挙げてください。AndroidでのJavaScript

ありがとうございました。

+2

AndroidブラウザのWebエンジンでJavaScriptを実行できます。したがって、埋め込まれたJSまたは他の参照ファイルを使用してHTMLファイルを作成して使用します。 –

+0

これはJavaスクリプトではありません。それはjavascriptであり、Javaとは何の関係もない言語です(実際には、C++はjavascriptよりもJavaに密接に関連しています)。 – slebetman

答えて

7

私はここにパーティーへの道後半ですが、私は正確にこれを持っていたが、必要。 iOS 7にはJavaScriptCore がネイティブに含まれています(ドキュメントが限られていても)使いやすいです。問題は、 Androidで似たようなものを使うことができない限り、私はそれを使いたくなかったということです。そこで私はAndroidJSCore projectを作成しました。それはあなたが大規模なWebViewと注入を必要とせずにAndroidでネイティブにJavaScriptコードを使用することができます。また、JavaとJavascriptの間で非同期で 呼び出しをシームレスに行うこともできます。

更新日27 3月17日: AndroidJSCoreの代わりにLiquidCoreが使用されています。 LiquidCoreはJavascriptCoreではなくV8に基づいていますが、本質的に同じです。 documentation on using LiquidCore as a raw Javascript engineを参照してください。

ドキュメントから:

...始めるためには、JavaScript JSContextを作成する必要があります。 JSコード の実行はこのコンテキスト内で行われ、別のコンテキストは独立した仮想マシンであり、 は互いに対話しません。

JSContext context = new JSContext(); 

このコンテキスト自体はJavaScriptオブジェクトです。そしてそのようなものとして、そのプロパティを取得して設定することができます。 これはグローバルなJavaScriptオブジェクトなので、これらのプロパティは環境内のすべての後続コードの最上位レベルの になります。

context.property("a", 5); 
JSValue aValue = context.property("a"); 
double a = aValue.toNumber(); 
DecimalFormat df = new DecimalFormat(".#"); 
System.out.println(df.format(a)); // 5.0 

また、コンテキストでJavaScriptコードを実行することができます。

context.evaluateScript("a = 10"); 
JSValue newAValue = context.property("a"); 
System.out.println(df.format(newAValue.toNumber())); // 10.0 
String script = 
    "function factorial(x) { var f = 1; for(; x > 1; x--) f *= x; return f; }\n" + 
    "var fact_a = factorial(a);\n"; 
context.evaluateScript(script); 
JSValue fact_a = context.property("fact_a"); 
System.out.println(df.format(fact_a.toNumber())); // 3628800.0 

ます。また、Javaで関数を書くが、JavaScriptにそれらを公開することができます。

JSFunction factorial = new JSFunction(context,"factorial") { 
    public Integer factorial(Integer x) { 
     int factorial = 1; 
     for (; x > 1; x--) { 
      factorial *= x; 
     } 
     return factorial; 
    } 
}; 

これは、JavaScript関数を作成しますJavaScriptから を呼び出すと、Javaメソッドfactorialが呼び出されます。これをJavaScript VMに渡すことができます。

context.property("factorial", factorial); 
context.evaluateScript("var f = factorial(10);") 
JSValue f = context.property("f"); 
System.out.println(df.format(f.toNumber())); // 3628800.0 
+0

私はちょうどAndroidJSCoreに試しましたが、それはかなりうまくいくようです!私はそれが32ビットマシン上でのみ動作することに気づいた。 64ビットのサポートを追加する予定ですか?ほとんどの新しい携帯電話は64ビットなので、それはかなり多くのショーストッパーです... – user2771609

+1

はい。 2.1リリースでは、64ビットのサポートが予定されています。 NDKのコンパイラはGCC 4.9.2に基づいています。 JavaScriptCoreが依存するアトミックに関連するバグがあります。私は、問題を修正したGCC 4.9.3ビルドを開発中です。私はそれを働かせることができたら、私はそれを解放するでしょう。すぐにすべきだ。 –

+0

ああ、素晴らしい!ありがとう、私は本当にそれを楽しみにしています。 – user2771609

1

Javascriptを使用してネイティブアプリを作成するようなものですか? Titanium Mobileのようなツールがあり、ウェブツールや言語を使ってネイティブアプリを作ることができます。

また、Web Appsを作成することもできます。そこには多くのリソースとチュートリアルがあります。単に「Android Web Appチュートリアル」などの検索を行います。

関連する問題