8

現在、ビルド サーバーで実行されるインストルメンテーション テスト スイートに取り組んでいますが、テストは通常​​の Android エミュレーターを使用する開発マシンではパスしますが、ビルド サーバーでは-no-windowフラグ付きのヘッドレス エミュレーターしか実行しないため、ビルドは失敗します。

InstrumentationTestCase.sendKeys()オプション メニューをプログラムで開くメソッドを呼び出そうとすると、エラーが発生します。エラーは次のとおりです。

権限が拒否されました: pid 646 uid 10026 から uid 1000 が所有するウィンドウ Window{43d55100 paused=false} にキー イベントを挿入しています

その後、アクセス許可があることがわかりましたがINJECT_EVENTS、マニフェストに設定しても効果がありませんでした。実際、ログには次の出力がありました。

android.permission.INJECT_EVENTS をパッケージ com.qype.radar に許可していません (protectionLevel=2 flags=0x6644)

この許可は役に立たないということですか?

また、インストルメンテーション テスト アプリとテスト対象のアプリが同じ Linux ユーザー ID を共有android:sharedUserIdし、同じプロセスで実行できるようにしようとしました ( android:process-- 既にそうなっているかどうかはわかりませんでした) が、それでもうまくいきませんでした。

これは、ヘッドレス エミュレーターで重要なイベントを含むインストルメンテーションを実行することが現在不可能であることを意味するのでしょうか、それとも何か不足しているのでしょうか?

4

2 に答える 2

17

-no-window最初に Xvnc インスタンス (つまり、偽の X サーバー) を実行してから、その .xml ファイルでエミュレーターを起動することにより、ヘッドレス マシンでエミュレーターを実行しますDISPLAY

より正確には、XvncおよびAndroid Emulator Jenkins プラグインを使用してこれを実行します。

残念ながら、UIイベントを挿入する前に画面のロックを解除することは依然として懸念事項ですが、これは(ハッキリと)次のようなコマンドを自動的に実行することで解決されます(これまでに見た他の回答と同様):
echo "event send EV_KEY:KEY_MENU:1 EV_KEY:KEY_MENU:0" | nc -q1 localhost 5554


編集:
この方法の方がはるかに信頼性が高いことがわかりました:
adb shell input keyevent 82

キーコード 82に関する情報。

于 2010-07-29T19:56:54.443 に答える
1

Hudson サーバーでのテストでも同様の問題がありました。私の場合、Android SDK からの提案によって解決した問題: http://developer.android.com/guide/topics/testing/testing_android.html#UITestTroubleshooting

重要なのは、メイン アプリケーションのアクセス許可も有効にする必要があることです。

于 2010-07-22T07:29:13.193 に答える