Android Javascript Engine; Need to replace WebView with Rhino, J2V8, etc -


we trying replace our webview , html layout file , javascript engine of sort. there ton of javascript must called , have rather large javascriptinterface need accessable js engine. have been trying out rhino , j2v8 cannot figure out way give javascript access full class of methods or annotation works how annotate methods webview.

if has insight, appreciated!

thanks, jon

afaik there no "out-of-the-box" solution jsv8.

but have @ following example:

public class v8consolebridge implements javavoidcallback {     @override     public void invoke(v8object receiver, v8array parameters) {         stringbuilder sb = new stringbuilder();         (int = 0; < parameters.length(); ++i) {             if (i > 0) {                 sb.append(", ");             }             object object = parameters.get(i);             if (object instanceof v8object) {                 v8object v8object = (v8object) object;                 sb.append(v8object.tostring());                 v8object.release();             } else {                 sb.append(object);             }         }         log.i("goebl-v8", sb.tostring());     }      public static void register(v8 v8) {         v8consolebridge console = new v8consolebridge();         v8object v8console = new v8object(v8);         v8.add("console", v8console);         v8console.registerjavamethod(console, "debug");         v8console.registerjavamethod(console, "log");         v8console.registerjavamethod(console, "info");         v8console.registerjavamethod(console, "warn");         v8console.registerjavamethod(console, "error");         v8console.release();     } } 

this hardcoded bridge js console object access android logging system.

you write generic code to

  • scan class want expose in javascript, javascript-interface webview, annotations @javascriptinterface include members
  • write generic code invoke invokes members of receiver class using java reflection.

of course great if j2v8 had useful code, because might used many projects. when have solid solution, create pull request can use :-)

if don't mind wading deep in source code, might find useful check out nativescript. provide generic way access java classes known @ compile time in javascript, internally done via reflection. well, i've heard way, didn't read source code of nativescript. in nativescript, don't have create bridges, it's done magically build- , runtime-system. maybe source inspires port ideas j2v8.