Я разрабатываю приложение в Kotlin на Android Studio . Я не использую WebView . Это нативное приложение с исходными кодами и макетами. Мне нужно использовать большую внешнюю библиотеку JavaScript , которую практически невозможно перевести на Java или Kotlin .
Я нашел способ работы с Java (и, следовательно, в Kotlin , для обеспечения взаимодействия) в Intellij IDEA , описанном на сайте Сценарии в Java .
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Main {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
if (!(engine instanceof Invocable)) {
System.out.println("Invoking methods is not supported.");
return;
}
Invocable inv = (Invocable) engine;
String scriptPath = "c:/Backu/calcule.js";
engine.eval("load('" + scriptPath + "')");
Object calculator = engine.get("calculator");
int x = 3;
int y = 4;
Object addResult = inv.invokeMethod(calculator, "add", x, y);
Object subResult = inv.invokeMethod(calculator, "subtract", x, y);
Object mulResult = inv.invokeMethod(calculator, "multiply", x, y);
Object divResult = inv.invokeMethod(calculator, "divide", x, y);
System.out.println(addResult);
System.out.println(subResult);
System.out.println(mulResult);
System.out.println(divResult);
}
}
Код JavaScript представляет собой набор функций, хранящихся в файле (c:\backu\calcule.js
, это просто пример кода):
var calculator = new Object();
calculator.add = function (n1, n2) n1 + n2;
calculator.subtract = function (n1, n2) n1 - n2;
calculator.multiply = function (n1, n2) n1 * n2;
calculator.divide = function (n1, n2) n1 / n2;
Я протестировал его, и он отлично работал, показывая следующий вывод:
7.0
-1.0
12.0
0.75
Однако эти импортированные модули недоступны в Android Studio , и я даже не нашел ссылок на его использование в Android Studio. Что я могу сделать? Это может стать приложением Android, с библиотекой javascript, хранящейся в виде файла в телефоне?
Будет лучше использовать LiquidCore ? Было бы слишком много перегрузок по сравнению с нативными Java библиотеками? Хорошо ли работает Liquid Core ?