Android + Rhino

ってことで、組み込みJavaScriptについての覚え書き

基本は

Context cx = Context.enter();

Scriptable scope = cx.initStandardObjects();

cx.evaluateString(scope, source, name, linenum, securityDomain);

で良い。

ただ、これだと基本的なオブジェクトしかないので普通はさらにクラスや関数等を定義してやる必要がある。

クラスや関数の定義は具体的にはGlobalな名前空間を定義しているScriptableオブジェクトに登録してやることで可能。

このときImporterTopLevelをGlobalに使ってJavaのclass/packageをimport可能にしてや るととりあえずJavaのclassが利用可能になるぽ。ScriptableInterfaceを実装したクラスを実装してやって登録しても良い。

ScriptableInterfaceの実装は大変なので、ScriptableObjectを継承して作る。このとき、jsGet, jsPutのPrefixを使った関数でPropertyを定義して、jsConstructorでコンストラクタを定義したりする。Javaのコンストラクタは引数無しのDefault Constructorを定義しておけばRhinoが面倒を見てくれる。

あとはgetClassNameでjs側のクラス名を提供してやれば良い。

そのうち続きをかきまする。