2

いくつかのAndroidテストを実行したいのですが、これらのテストの実行をスケジュールまたは遅延させたいです。SL4Aからこれを実行しようとしています。SL4Aをインストールして、ラップトップからサーバーを起動し、約20秒間スリープしてからウェイクアップしてテストを起動する特別なPythonスクリプトを実行するというアイデアです。テストをインストールしてUSBケーブルを外した後にテストを実行する必要がある、かなり複雑な自動化を実行しています。SL4Aからインテントを発行できることは知っていますが、次のものに相当するものを探しています。

adb shell am instrument \
     -e class MyInstrumentationTestCase \
     -w MyInstrumentationTestRunner

これは意図的に行うことができますか?ブロードキャストを送信する必要がありますか、それともアクティビティ開始機能を使用する必要がありますか?

このスクリプトを使用してPythonからデバイス上で直接システムコマンドを実行しようとしましたが、「許可が拒否されました」というエラーが発生します。

from subprocess import call
call(["am", "instrument", "-e", "class", "com.example.android.app.test.TestContactList", "-w", "com.example.app.test/com.zutubi.android.junitreport.JUnitReportTestRunner"])

更新 os.systemを使用してコマンドを実行しようとしましたが(以下の変更を参照)、これにより別のエラーが発生します。soinfo_link_image(linker.cpp:1635):「app_process」に必要なライブラリ「libanroid_runtime.so」を読み込めませんでした。soによって引き起こされますinfo_relocate(linker.cpp:975):「libandroid_runtime.so」によって参照されるシンボル「sqlite3_stmt_readonly」を見つけることができません...実行可能ファイルをリンクできません

import os
#from subprocess import call
#call(["am", "instrument", "-e", "class", "com.example.android.app.test.TestContactList", "-w", "com.example.android.app.test/com.zutubi.android.junitreport.JUnitReportTestRunner"])
os.system('echo "Running tests"')
os.system('am instrument -e class com.example.android.app.test.TestContactList -w com.example.android.app.test/com.zutubi.android.junitreport.JUnitReportTestRunner')

他にどのようなオプションがありますか?

4

1 に答える 1

1

別のプロセスとして、Python SL4A スクリプト内から任意の SL4A スクリプトを起動する次の関数があります。このようなものには使用できませんsubprocess

これから必要なものを推測できるかもしれません。

from android import Android
droid = Android()

def launch_script(path, visible=False):

    visibilty   = 'FORE' if visible else 'BACK'
    activity    = 'com.googlecode.android_scripting.action.LAUNCH_{0}GROUND_SCRIPT'.format(visibilty)
    extras      = {'com.googlecode.android_scripting.extra.SCRIPT_PATH': path}
    packagename = 'com.googlecode.android_scripting'
    classname   = 'com.googlecode.android_scripting.activity.ScriptingLayerServiceLauncher'
    intent      = droid.makeIntent(activity, None, None, extras, None, packagename, classname).result
    droid.startActivityIntent(intent)
于 2013-02-07T01:30:47.970 に答える