Contents:
Contents
本記事は、以下のHPを参考に記載しています。 正確性を期すものでは無いため、記載内容が掲載元と異なる場合があります。
■monkeyrunner
http://developer.android.com/intl/ja/guide/developing/tools/monkeyrunner_concepts.html
また本ドキュメントは、epubでも参照可能です。 DL
============================================
============================================
monkeyrunnerツールは、コード外からAndroidのデバイス/エミュレータを制御するためのAPIを提供しています。
monkeyrunnerを使用すると、キーストロークの送信や、スクリーンショットを取りPCに保存するPython スクリプトを書くことが出来ます。
さらには、”デバイスの機能やフレームワークのテスト”、もちろんアプリケーションの機能のテストを実行することが出来ます。
”単体テスト用”に設計されていますが、もちろんそれ以外の用途での利用も可能です。
Monkey (monkeyrunnerとは関係有りません。←しつこい)は、adb上でシェルまたはイベントを擬似生成する物ですが、 それとは異なり、APIや特定のコマンド、イベントを送ることによってデバイス/APIを制御します。
また、monkeyrunner APIに独自のクラスを追加し、フレームワークのAPIを利用することができます。 プラグインの作り方 を参照のこと。
このプログラムは、MonkeyDeviceオブジェクトを返すプログラムを示します。 MonkeyDeviceオブジェクトを使用すると、パッケージに含まれているActionに対してキーストロークイベントを送信します。 そして、その結果のスクリーンショットをMonkeyImageオブジェクトとして返します。 MonkeyImageオブジェクトからは、png形式のスクリーンショットを取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # monkeyrunnerモジュールのインポート
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# デバイスに接続し、MonkeyDeviceオブジェクトを返します。
device = MonkeyRunner.waitForConnection()
# パッケージのインストール
# このメソッドがtrueを返したなら、インストールは成功です。
device.installPackage('myproject/bin/MyApplication.apk')
# Activityの起動
device.startActivity(component='com.example.android.myapplication.MainActivity')
# メニューキーの押下
device.press('KEYCODE_MENU','DOWN_AND_UP')
# スクリーンショットの取得
result = device.takeSnapShot
# スクリーンショットの書き出し
result.writeToFile('myproject/shot1.png','png')
|
monkeyrunnerのAPIは以下の3つのモジュールから構成されています。
上記サンプルで見たように、以下のコードの<module>に使用するクラスを記載します。 ひとつのfrom文で複数のクラスをインポートすることも可能です。
monkeyrunnerは、ファイルから簡単に起動できます。 もしくは、ユーザインタラクティブなセッションに記載することもできます。
monkeyrunnerを起動する場合、SDKのサブディレクトリの中のtoolsから起動できます。 ファイル名と引数を与えると、スクリプトが起動します。 なにも引数を与えなければ、インタラクティブなモードで起動します。
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
引数の表は以下
オプション | 説明 |
---|---|
-plugin <plugin_jar> | (Optional) monkeyrunner のプラグインの指定 プラグインの作り方は、<Extending monkeyrunner with plugins.>参照 複数指定する場合は、-pluginを複数指定すること |
<program_filename> | この引数を指定すると、monkeyrunnerスクリプトが起動する 指定しない場合、インタラクティブモードになる。 |
<program_options> | (Optional) <program_file>で指定したスクリプトのフラグオプション |
monkeyrunnerは簡単にリファレンスを生成可能です。(Sphinxのように(勝手に書きました。ごめんなさい。))
monkeyrunner <format> help.py <outfile>
引数 | 説明 |
---|---|
<format> | text / html を指定する。それぞれの形式で出力される。 |
<outfile> | パスを含めた出力ファイル名 |
monkeyrunner のAPIの拡張には、Javaで書いたプログラム(.jar)を組み込む必要があります。 APIの拡張には、既存のクラスの拡張や自身で書いたコードを利用できます。 また、monkeyrunner環境の初期化にも利用できます。
monkeyrunnerにプラグインを適用するためには、前述のコマンドのオプションで指定してやる必要があります。(-plugin <plugin_jar>)
プラグインのコードでは、monkeyrunnerのクラスのインポート及び継承が可能です。 ( api 参照)
注意:プラグインは、AndroidSDKにアクセスできない。com.android.appなどのパッケージはインポートできない。 これは、monkeyrunnerが、frameworkのAPIより下位の層でエミュレータやデバイスにアクセスするためである。
プラグインの起動クラスでは、スクリプトが処理をする前にインスタンス化してやる必要がある。 このクラスを書くためには、MonkeyRunnerStartupRunnerキーをManifestに記載する必要がある。 キー値には起動クラスを与えてやる。 以下のスニペットを利用し、antでビルドすること
<jar jarfile="myplugin" basedir="${build.dir}">
<manifest>
<attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/>
</manifest>
</jar>
To get access to monkeyrunner’s runtime environment, the startup class can implement com.google.common.base.Predicate<PythonInterpreter>. For example, this class sets up some variables in the default namespace:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package com.android.example;
import com.google.common.base.Predicate;
import org.python.util.PythonInterpreter;
public class Main implements Predicate<PythonInterpreter> {
@Override
public boolean apply(PythonInterpreter anInterpreter) {
/*
* Examples of creating and initializing variables in the monkeyrunner environment's
* namespace. During execution, the monkeyrunner program can refer to the variables "newtest"
* and "use_emulator"
*
*/
anInterpreter.set("newtest", "enabled");
anInterpreter.set("use_emulator", 1);
return true;
}
}
|