monkeyテストツールを使う

Monkeyというツールを使うと、クリックやタッチなどのユーザーの操作イベントやシステムのイベントをランダムに発生させることができます。
開発者はこのツールを利用してストレステストを行えます。


基本構文

adb shell monkey [options] <event-count>


バイス名、冗長レベル2、対象パッケージを指定しイベントを100回実行する場合

adb -s デバイス shell monkey -v 2 -p パッケージ名 100

参考
http://www.techdoctranslator.com/android/developing/tools/monkey

adbコマンドメモ

よく忘れるのでメモ。


起動

adb start-server


終了

adb kill-server


接続中のデバイスのリスト

adb devices


logcat

adb logcat


シェルでログイン

adb shell


バイスを指定してシェルでログイン

adb -s デバイス名 shell


バイスを指定してlogcat

adb -s デバイス名 logcat


バイスを指定してシェル、からのlogcat

adb -s デバイス名 shell

$ logcat

WebViewでローディング(画面更新)をハンドリングする

WebViewでの操作をハンドリングする方法はいくつかありますが、画面のロードをハンドリングするには
WebViewClient#shouldOverrideUrlLoading を使います。

下記はWebView内のリンクをクリックした場合など、画面のロードが始まった時にToastを表示します。

WebView webView = (WebView) findViewById(R.id.web);

webView.setWebViewClient(new WebViewClient() {
	public boolean shouldOverrideUrlLoading(WebView view, String urlStr) {
		// 特定のURLの場合、ダイアログを表示する等
		Toast toast = Toast.makeText(WebViewActivity.this, "ハンドリング",
				Toast.LENGTH_SHORT);
		toast.show();

		return false;
	}
});
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://www.google.co.jp");

クリックされたリンクの内容によって画面のロードをキャンセルする場合や、アプリを起動するなど、処理を変える場合などに使えそうです。

shouldOverrideUrlLoadingから別のActivityやアプリを起動する場合は「true」を返すと良いと思います。
「false」を返すとWebView内にロードした結果を表示します。

WebViewにはアプリ側からJavaScriptをハンドリングする方法があるなど、柔軟にアプリならではの処理が組み込めるようになっています。

また時間のある時に記事にしようと思います。

AndroidでのAdMobのテストモード

作ったアプリにAdMobの広告を入れてみました。

広告レイアウトの確認をする場合、テストモードを使います。

エミュレータの場合、下記のようにActivity内で書けばテストモードで表示されます。

AdManager.setTestDevices( new String[] { 
	AdManager.TEST_EMULATOR,
});

実機でも確認したい場合は以下のようにAdManager.setTestDevicesの引数であるString配列の2つ目に渡しているような文字列を設定する必要があります。

AdManager.setTestDevices( new String[] { 
    AdManager.TEST_EMULATOR,	// エミュレーター
    "DD0CXXXXXXXXXXXXXXXXXX",    // 実機
});

この文字列はAdMobの広告をアプリに設定し、PCと実機を繋いでDebug起動すればLogCatに以下のように表示されます。

10-12 00:33:05.783: INFO/AdMobSDK(1688): To get test ads on this device use AdManager.setTestDevices( new String[] { "DD0CXXXXXXXXXXXXXXXXXXX" } )

上記をコピーして AdManager.setTestDevices に設定すれば実機でもテストモードで確認できます。

また、テストモードのコードを入れてしまったままアプリを配布した場合は、Admobの管理画面上でテストモードを無効化することができます。
AdMobにログインして「サイト及びアプリケーション」>「(アプリ名)」の画面の下部に「テスト モード」という欄があるので、以下のようにそちらのラジオボタンで「すべてのリクエストについてテスト モード を無効化」を選択してください。

AdMobは導入が驚くほど簡単に出来ていいですね。
他の広告ネットワークも機会があれば使ってみたいと思います。

TextView.setText(int)に注意

layoutのxmlとActivityを編集してると下記のエラーが発生。

android.content.res.Resources$NotFoundException: String resource ID #0x3e8

かなり嵌ったけど、よく見ると

TextView.setText() にintの値をそのまま渡していた。

つまり

setText(CharSequence text)

ではなく

setText (int resid)

が実行されていた。

コンパイラチェックに依存してると気づかない罠。

TextViewに数値を渡す時は

TextView.setText(String.valueOf(int))

を使いましょう。。。