2010-11-18 10 views
6

Czy można używać JavaScript w systemie Android? Jeśli tak to jak? Podaj przykłady.JavaScript w Androidzie

Dzięki.

+2

Mechanizm przeglądarki Android WebKit może uruchamiać JavaScript. Tworzysz plik HTML z osadzonym JS lub innym plikiem referencyjnym i używasz go. –

+0

To nie jest skrypt Java. Jest to javascript, język, który nie ma nic wspólnego z java (w rzeczywistości C++ jest bardziej związany z java niż javascript). – slebetman

Odpowiedz

7

Jestem sposób późno do partii tutaj, ale miałem to dokładna potrzeba. iOS 7 zawiera teraz JavaScriptCore i jest naprawdę łatwy w użyciu (pomimo ograniczonej dokumentacji). Problem polegał na tym, że nie chciałem go używać, chyba że mógłbym użyć czegoś podobnego na Androidzie. Więc stworzyłem AndroidJSCore project. Pozwala na korzystanie z kodu JavaScript natywnie w Androidzie bez konieczności korzystania z nieporęcznego WebView i wtrysku. Można również bezproblemowo wykonywać połączenia asynchroniczne między Java i Javascript.

Aktualizacja 27 marca 17: AndroidJSCore został przestarzały na rzecz LiquidCore. LiquidCore opiera się na V8, a nie na JavascriptCore, ale działa zasadniczo tak samo. Zobacz documentation on using LiquidCore as a raw Javascript engine.

Z dokumentacji:

... zacząć, trzeba stworzyć JavaScript JSContext. Wykonywanie kodu JS odbywa się w tym kontekście, a oddzielnymi kontekstami są izolowane maszyny wirtualne, które nie współdziałają ze sobą.

JSContext context = new JSContext(); 

Ten kontekst sam w sobie jest obiektem JavaScript. I jako takie można uzyskać i ustawić jego właściwości. Ponieważ jest to globalny obiekt JavaScript, te właściwości będą znajdować się w najwyższym poziomie kontekstu dla całego kolejnego kodu w środowisku.

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 

Można również uruchomić kodu JavaScript w kontekście:

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 

Można również napisać funkcje w Javie, ale narazić je do JavaScript:

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

Stwarza funkcji JavaScript to wywoła metodę Java factorial po wywołaniu z JavaScript.Następnie można go przekazać do 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

Po prostu wypróbowałem AndroidJSCore i wygląda na to, że działa całkiem nieźle! Zauważyłem jednak, że działa tylko na maszynach 32-bitowych. Czy planujesz dodać obsługę 64-bitową? Ponieważ większość nowych telefonów jest 64-bitowych, to jest prawie showstopper ... – user2771609

+1

Tak. 64-bitowe wsparcie jest planowane w wersji 2.1. Okazuje się, że kompilator w NDK oparty jest na GCC 4.9.2. Ma błąd związany z atomami, od których zależy JavaScriptCore. Pracuję nad wersją GCC 4.9.3, która podobno naprawia problem. Kiedy uda mi się go uruchomić, wydam go. Powinien wkrótce. –

+0

O, super! Dzięki, naprawdę nie mogę się doczekać. – user2771609

1

Czy masz na myśli coś takiego, jak robienie natywnej aplikacji przy użyciu Javascript? Wiem, że istnieją narzędzia, takie jak Titanium Mobile, które umożliwiają tworzenie natywnych aplikacji za pomocą narzędzi internetowych/języków.

Można również tworzyć aplikacje internetowe. Jest tam mnóstwo zasobów i tutoriali. Wystarczy wyszukać "Samouczek aplikacji na Androida" lub coś podobnego.