2010-11-18 6 views
6

¿Es posible usar JavaScript en Android? ¿si es así, cómo? Por favor, brinde algunos ejemplos.JavaScript en Android

Gracias.

+2

Motor de búsqueda de androides WebKit puede ejecutar JavaScript. Entonces crea un archivo HTML con JS incorporado o algún otro archivo referenciado y úselo. –

+0

No es una secuencia de comandos de Java. Es javascript, un lenguaje que no tiene nada que ver con java (de hecho, C++ está más relacionado con java que javascript). – slebetman

Respuesta

7

Soy manera tarde a la fiesta aquí, pero tuve esta exacta necesitar. iOS 7 ahora incluye JavaScriptCore de forma nativa y es realmente fácil de usar (a pesar de la documentación limitada). El problema es que No quería usarlo a menos que también pudiera usar algo similar en Android. Así que creé el AndroidJSCore project. Le permite usar su código JavaScript de forma nativa en Android sin requerir una voluminosa WebView e inyección. También puede realizar sin problemas llamadas asíncronas entre Java y Javascript.

Actualización 27 Mar 17: AndroidJSCore ha quedado en desuso en favor de LiquidCore. LiquidCore se basa en V8 en lugar de JavascriptCore, pero funciona esencialmente igual. Vea el documentation on using LiquidCore as a raw Javascript engine.

De la documentación:

... para empezar, es necesario crear un JSContext JavaScript. La ejecución del código JS ocurre dentro de este contexto, y los contextos separados son máquinas virtuales aisladas que no interactúan entre sí.

JSContext context = new JSContext(); 

Este contexto es en sí mismo un objeto de JavaScript. Y como tal, puede obtener y establecer sus propiedades. Dado que este es el objeto JavaScript global, estas propiedades estarán en el contexto de nivel superior para todos los códigos subsiguientes del entorno.

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 

También puede ejecutar código JavaScript en el contexto:

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 

También puede escribir funciones en Java, pero exponerlos a JavaScript:

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

Esto crea una función de JavaScript que llamará al método Java factorial cuando se invoque desde JavaScript.A continuación, se puede pasar a la VM de JavaScript:

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

¡Acabo de probar AndroidJSCore, y parece funcionar bastante bien! Sin embargo, noté que funciona solo en máquinas de 32 bits. ¿Estás planeando agregar soporte de 64 bits? Como la mayoría de los teléfonos nuevos son de 64 bits, es más o menos sorprendente ... – user2771609

+1

Sí. Se planea soporte de 64 bits para la versión 2.1. Resulta que el compilador en el NDK se basa en GCC 4.9.2. Tiene un error relacionado con los átomos de los que depende JavaScriptCore. Estoy trabajando en una compilación GCC 4.9.3 que supuestamente soluciona el problema. Una vez que pueda hacer que funcione, lo lanzaré. Debería ser pronto –

+0

¡Oh, increíble! Gracias, estoy deseando que llegue. – user2771609

1

¿Te refieres a algo así como hacer una aplicación nativa usando Javascript? Sé que hay herramientas como Titanium Mobile que te permiten crear aplicaciones nativas usando herramientas/idiomas web.

También podría hacer aplicaciones web. Hay muchos recursos y tutoriales para eso. Simplemente busque "Tutorial de Android Web App" o algo similar.

Cuestiones relacionadas