Czy można używać JavaScript w systemie Android? Jeśli tak to jak? Podaj przykłady.JavaScript w Androidzie
Dzięki.
Czy można używać JavaScript w systemie Android? Jeśli tak to jak? Podaj przykłady.JavaScript w Androidzie
Dzięki.
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
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
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. –
O, super! Dzięki, naprawdę nie mogę się doczekać. – user2771609
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.
Tak, można utworzyć kod podsumowujący, który wskazuje stronę html i zawiera javascript i css.
Istnieją różne biblioteki, które mogą pomóc w tym:
Mechanizm przeglądarki Android WebKit może uruchamiać JavaScript. Tworzysz plik HTML z osadzonym JS lub innym plikiem referencyjnym i używasz go. –
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