相关疑难解决方法(0)

在Android上使用Rhino的问题

我正在尝试在Android的Java应用程序中使用Mozilla Rhino来评估一些JavaScript.我正在使用Eclipse + ADT插件.

首先,我尝试从Mozilla的网站下载Rhino .jar文件,并将其作为Eclipse中的库添加到项目中.Eclipse认识到它很好并编译了应用程序.但是,在运行它时,我在调用时会遇到异常Context.evaluateReader()(请参阅下面的堆栈跟踪).

然后我尝试将Rhino源代码添加为Eclipse中的单独Android项目,将其标记为库并在我的项目中引用它,这足以让Eclipse将其编译,但导致了同样的错误.

这是我得到的堆栈跟踪(java.lang.UnsupportedOperationException: can't load this type of class file)

Thread [<7> Thread-8] (Suspended (exception UnsupportedOperationException)) 
    DefiningClassLoader(ClassLoader).defineClass(String, byte[], int, int, ProtectionDomain) line: 338  
    DefiningClassLoader.defineClass(String, byte[]) line: 62    
    Codegen.defineClass(Object, Object) line: 159   
    Codegen.createScriptObject(Object, Object) line: 114    
    Context.compileImpl(Scriptable, Reader, String, String, int, Object, boolean, Evaluator, ErrorReporter) line: 2440  
    Context.compileReader(Reader, String, int, Object) line: 1326   
    Context.compileReader(Scriptable, Reader, String, int, Object) line: 1298   
    Context.evaluateReader(Scriptable, Reader, String, int, Object) line: 1137  
    TimetableProcessor.evaluate(InputStream, String, String[]) …
Run Code Online (Sandbox Code Playgroud)

java android rhino

18
推荐指数
2
解决办法
8788
查看次数

使用V8 JavaScript引擎在没有Web视图的情况下执行JS lib

我正在开发一个JavaScript组件,负责向服务器发出请求并将结果分派给UI.通过在JavaScript中执行此操作,我可以在多种类型的UI中使用我的组件:Android应用程序,iOS应用程序,桌面应用程序(QT),Web应用程序......

所有这些UI都实例化了一个Web视图,因此当UI加载专用URL(webview.load("file://myfirstWebPage.html"))时,我的组件就会启动.

第一个网页加载所有JavaScript组件,一旦完成,UI就能够向JavaScript组件发出一些请求,这会向服务器发出请求,当它有响应时,它会将其发送回客户端( UI Android,UI iOS ...)

这个架构工作正常,但我想知道是否有另一种方法加载JavaScript组件而不使用每个客户端上的Web视图?

V8引擎可以帮助我吗?

javascript v8 webview

16
推荐指数
3
解决办法
2万
查看次数

在Android应用程序中嵌入v8

我想为我的Android应用程序添加一些脚本支持.我的应用程序不是基于Web的,它只是一个用Java编写的常见应用程序.

我需要选择脚本语言及其解释器实现来嵌入.至于语言,我更喜欢JavaScript(或更好地说ECMAScript),因为它没有任何与用户交互的内置东西(我的意思是打印smth等),这正是我需要的(我只是想添加一个几个函数和/或对象与我的一些应用程序的逻辑交互).另一个原因是我对Python的经验很少,而且与Ruby,Lua和其他人完全没有关系,而且就我所知,更多的人都熟悉JavaScript.

我的应用程序中的用户脚本预计会非常小,并且不会经常执行,这就是脚本引擎速度无关紧要的原因.重要的主要标准是解释器引擎隐含的额外二进制apk大小.它应该尽可能小.理想情况下,几十公斤左右,在任何情况下都不超过150-200Kb(当然是在ProGuard之后).我不需要完整的语言支持,例如,如果没有正则表达式,我将非常高兴.另一个重要的事情是引擎的内存消耗(但它不那么重要,然后是二进制大小).

我知道(从/sf/answers/838158261/使用V8 JavaScript引擎来执行没有webview的JS lib)现代Android设备已经拥有v8 JavaScript引擎.但我无法弄清楚,如何使用它(没有在我的应用程序中嵌入副本).根据soulseekah的第一个链接答案,我可以使用ndk链接到libwebcore.so.但是v8有C++,而不是C API,并且所有名称都被破坏了.所以防止链接器找到它们.我设法从源代码编译我自己的v8副本,并通过ndk在我的应用程序中使用它,但结果.so是17Mb(!!!),这远非可接受.

所以我的问题是,如何通过NDK或其他方式使用安装了Android设备的v8(在真正拥有它的设备上)?或者,如果不可能,是否有其他脚本引擎(用于JavaScript或其他语言),满足我的二进制大小要求?或者可能是v8有一些技巧,它可以使它的尺寸更小(可能是以速度为代价或某些语言功能支持)?

scripting android v8 embedding android-ndk

8
推荐指数
1
解决办法
3191
查看次数

标签 统计

android ×2

v8 ×2

android-ndk ×1

embedding ×1

java ×1

javascript ×1

rhino ×1

scripting ×1

webview ×1