安卓运行js代码-完美

前言

安卓里面做边缘计算的功能,需要动态编辑js代码执行

巨坑

java里面有ScriptEngineManager类,可以执行js
但在安卓里面没有这个类,javax下面的都不能执行
网上说的安卓里面用ScriptEngineManager的都是坑!

解决方法

使用Rhino可以完美执行js代码

1、下载Rhino包

选择一个最新版本下载即可

2、安卓添加依赖

implementation files('libs\\rhino-1.7.14.jar')
也可以右键jar包,选择右键菜单

3、编写代码
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.Scriptable;

public class JsRun
{
    private static Object _lock = new Object();

    private static Context _rhino = null;
    private static Scriptable _scope = null;

    private static void init()
    {
        if( _rhino==null )
        {
            synchronized (_lock)
            {
                if( _rhino==null )
                {
                    _rhino = Context.enter();
                    _rhino.setOptimizationLevel(-1);
                    _scope = _rhino.initStandardObjects();
                }
            }
        }
        /* 这里是测试执行代码
        String js = "function aa(){return 'sdfsdfsdf';}";
        initScript(js);

        js = "function bb(){return '11111';}";
        initScript(js);

        Object obj = callFunc("aa");
        System.out.println(obj);

        obj = callFunc("bb");
        System.out.println(obj);*/
    }

    public static boolean initScript(String js)
    {
        init();

        try {
            _rhino.evaluateString(_scope, js, null, 1, null);

            return true;
        }
        catch (Exception e) {
            e.printStackTrace();
        }

        return false;
    }

    public static Object callFunc(String functionName, Object... functionParams)
    {
        try
        {
            Function function = (Function) _scope.get(functionName, _scope);
            if( function != null )
                return function.call(_rhino, _scope, _scope, functionParams);
        }
        catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}

你可能感兴趣的:(Android,javascript,android,前端)