在android应用程序中嵌入v8

在android应用程序中嵌入v8,android,scripting,android-ndk,v8,embedding,Android,Scripting,Android Ndk,V8,Embedding,我想为我的android应用程序添加一些脚本支持。我的应用程序不是基于web的,它只是一个用Java编写的普通应用程序 我需要选择脚本语言及其解释器实现来嵌入。至于语言,我更喜欢JavaScript(或者更好地说是ECMAScript),因为它没有任何内置的东西可以与用户交互(我指的是打印smth等等),这正是我需要的(我只想添加一些函数和/或对象来与我的一些应用程序逻辑交互)。另一个原因是,我对Python的经验很少,对Ruby、Lua和其他方面完全没有经验,据我所知,更多的人熟悉JavaSc

我想为我的android应用程序添加一些脚本支持。我的应用程序不是基于web的,它只是一个用Java编写的普通应用程序

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

我的应用程序中的用户脚本预计会非常小,并且不会经常执行,这就是为什么脚本引擎速度无关紧要的原因。重要的主要标准是解释引擎所暗示的额外二进制apk大小。它应该尽可能小。理想情况下大约几十公斤,在任何情况下都不超过150-200Kb(当然在ProGuard之后)。我不需要完全的语言支持,例如,如果没有regexp,我会非常高兴。 另一个重要的因素是引擎的内存消耗(但比二进制大小重要得多)

我知道(从和)现代android设备上已经有了v8 JavaScript引擎。但我不知道如何使用它(不在我的应用程序中嵌入副本)。根据soulseekah的第一个链接答案,我可以使用ndk链接libwebcore.so。但是V8有C++,不是C API,所有的名字都被损坏了。我设法从源代码中编译了我自己的v8副本,并通过ndk在我的应用程序中使用它,但结果是17Mb(!!!),这远远不能被接受


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

关于这个问题有点晚了,但无论如何。 我用的是rhino罐,效果很好。
关于构建v8。所以。也许你还需要运行arm eabi strip

,我记得,v8。剥离后的17Mb也是如此。。。犀牛的体型几乎可以接受,但它给人太多的自由。您需要仔细定义安全策略以防止脚本做坏事,而我并不需要Rhino的所有功能。我以嵌入而告终。我只嵌入了没有编译器的VM(脚本必须预编译才能在我的应用程序中使用)。在扔掉标准Lua库的大部分内容并加以改进后,我的apk大小增加了不到20Kb。我刚刚发现了一些关于在android应用程序中嵌入javascript的有趣博客。经过一些构建参数调整后,大小为8M。对于单个应用程序来说还是太多了。即使我们禁用国际化API(使用i18nsupport=off开关),应用程序仍然需要8MB(+7MB),这比相应的Rhino应用程序需要3.6MB(+2.6MB)的磁盘空间要大得多。这盘磁带看起来也很有趣。Rhino可以工作,但速度很慢,问题是