2014-01-04 2 views
6

Я хочу добавить поддержку некоторых скриптов в приложение для Android. Мое приложение не основано на Интернете, это просто обычное приложение, написанное на Java.Вложение v8 в приложение для Android

Мне нужно выбрать язык скриптинга и его реализацию интерпретатора для встраивания. Что касается языка, то я предпочитаю JavaScript (или, лучше сказать, ECMAScript), потому что у него нет встроенных материалов для взаимодействия с пользователем (я имею в виду печать smth и т. Д.), Это именно то, что мне нужно (я просто хочу добавить пара функций и/или объектов для взаимодействия с некоторой логикой моего приложения). И еще одна причина в том, что у меня очень мало опыта работы с Python и совсем нет с Ruby, Lua и другими, и насколько я могу думать, больше людей знакомы с JavaScript.

Пользовательские сценарии в моем приложении, как ожидается, будут очень маленькими, и они будут выполняться не слишком часто, поэтому скорость машинного перевода скриптов не имеет значения. Основными критериями, которые имеют значение, является дополнительный размер двоичного apk, подразумеваемый движком интерпретации. Он должен быть как можно меньше. Идеально около пары десятков килограммов, и не более 150-200 Кб в любом случае (после ProGuard, конечно). Мне не нужна полная языковая поддержка, например. Я буду абсолютно счастлив без регулярных выражений. Еще одна важная вещь - потребление памяти двигателя (но это гораздо менее важно, а затем двоичный размер).

Я знаю (от https://stackoverflow.com/a/11973689/52607 и Use V8 JavaScript engine to execute JS lib without webview), что современные устройства для Android уже имеют двигатель JavaScript v8 на борту. Но я не могу понять, как его использовать (без встраивания копии в мое приложение). Согласно первому связанному ответу soulseekah, я могу ссылаться на libwebcore.so, используя ndk. Но v8 имеет C++, а не C API, и все имена искажены .so препятствует тому, чтобы компоновщик их находил. Мне удалось скомпилировать мою собственную копию v8 из ее источника и использовать ее в моем приложении через ndk, но в результате .so - 17Mb (!!!), что очень далека от того, чтобы быть приемлемым.

Так что мой вопрос: как я могу использовать v8, поставляемый с устройствами Android (на устройствах, которые действительно имеют его) через NDK или каким-то другим способом? Или, если это невозможно, существуют ли другие сценарии (для JavaScript или для другого языка), которые соответствуют моим требованиям к размеру бинарных файлов? Или, может быть, есть трюк с v8, который позволяет сделать его намного меньшим по размеру (может быть, за счет скорости или поддержки некоторых языков)?

ответ

-2

Немного поздно на этот вопрос, но в любом случае. Я использую носорог, и он работает хорошо. О построении v8 .so. Возможно, вам нужно также запустить arm-eabi-strip

+0

Насколько я помню, v8 .so был 17Mb после снятия ... Размер Rhino почти приемлем, но он дает слишком большую свободу. Вам нужно тщательно определить политику безопасности, чтобы предотвратить выполнение скриптов Bad Things, и мне просто не нужна вся сила Rhino. Я закончил с внедрением [этой Lua VM] (https://code.google.com/p/kahlua/). Я вложил только VM без компилятора (сценарии должны быть предварительно скомпилированы для использования в моем приложении). Выбросив большую часть стандартной библиотеки Lua и ProGuarding, она добавила меньше 20 Кб к моему размеру apk. – Meteorite

+0

Просто узнал интересный блог о встраивании javascript в приложение для Android. После некоторых настроек настройки параметров размером 8M. Все еще слишком много для одного приложения. _ Даже если мы отключим API интернационализации (с переключателем i18nsupport = off), приложение по-прежнему нуждается в 8 МБ (+ 7 МБ), который намного больше, чем соответствующее приложение Rhino, которому необходимо 3,6 МБ (+ 2,6 МБ) дискового пространства. Ducktape также выглядит интересно. http://www.skyscanner.net/blogs/developing-mobile-cross-platform-library-part-3-javascript –

+0

Носорог работает, но он довольно медленный, вопрос нужен V8 – epx