Subscribed unsubscribe Subscribe Subscribe

Islands in the byte stream

Technical notes by a software engineer

Stetho 1.2.0でJavaScript consoleからアプリにアクセスできるようになった

Stethoも1.2.0となり、さまざまな便利機能が使えるようになっています*1

1.2.0の大きな新機能として、Chrome Developer ToolsのConsoleからアプリの内部状態を操作できるようになりました。まず、以下のようにstetho-js-rhinoが必要です。

    debugCompile 'com.facebook.stetho:stetho:1.2.0'
    debugCompile 'com.facebook.stetho:stetho-js-rhino:1.2.0'

グローバルな状態にアクセスするのは簡単で、たとえばFQNを使うと次のようにできます:

> com.github.gfx.helium.BuildConfig.VERSION_NAME
< "2.1.0-debug"

importPackage(name) でクラス名のみで参照するようにもできます。 Javaのimport name.* に相当します。

> importPackage(com.github.gfx.helium)
> BuildConfig.VERSION_NAME
< "2.1.0-debug"

REAMDEにあるとおり、グローバル変数として context があるのでtoastも作れます。

importPackage(android.widget);
importPackage(android.os);
var handler = new Handler(Looper.getMainLooper());
handler.post(function() { Toast.makeText(context, "Hello from JavaScript", Toast.LENGTH_LONG).show() });

いまはこれ以上のことはできなそうですが、JS側に変数や関数を登録するAPIがあるので、たとえばアプリ側で適切に「現在のactivity」などをJSから参照するようにはできそうです。

ただそれをするとアプリのコードを汚すことになるので、Stethoのためにそこまでする必要があるかどうかは微妙ですが。