android - 在 Android 应用程序中嵌入 v8

标签 android scripting android-ndk v8 embedding

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

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

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

我知道(来自 https://stackoverflow.com/a/11973689/52607Use V8 JavaScript engine to execute JS lib without webview )现代安卓设备已经搭载了 v8 JavaScript 引擎。但我不知道如何使用它(没有在我的应用程序中嵌入副本)。根据 soulseekah 的第一个链接答案,我可以使用 ndk 链接到 libwebcore.so。但是 v8 具有 C++,而不是 C API,并且所有名称都在 .so 中被破坏,从而阻止链接器找到它们。我已经设法从其源代码编译了我自己的 v8 副本,并通过 ndk 在我的应用程序中使用了它,但是生成的 .so 是 17Mb (!!!),这远远不能被接受。

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

最佳答案

这个问题有点晚了,但无论如何。 我正在使用 rhino jar,它运行良好。 关于构建 v8 .so 。也许你还需要运行 arm-eabi-strip

关于android - 在 Android 应用程序中嵌入 v8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20922034/

相关文章:

android - ViewPager 和 FAB 的正确布局?

android - 需要帮助做出 Android 应用的架构设计决策

java - 将 Joda-Time DateTime 格式化为字符串

android - 如何根据日期变化计算两个时间字段之间的时间差

variables - 将 CMD 结果传递给批处理文件中的变量

android-ndk - Android将许多静态库链接到共享库中

javascript - 运行使用 XMLHttpRequest 下载的 JavaScript

linux - 在帮助选项中包含子参数以明智地执行?

android - 如何从 .c(C 文件)为 Arm 处理器创建 .so(共享对象库文件)?

android - "Cannot Resolve Corresponding JNI Function"安卓工作室