我想运行一些android测试,但我想取消或延迟这些测试的执行。我正试图从SL4A做到这一点。这个想法是安装SL4A,从我的笔记本电脑启动服务器,运行一个特殊的python脚本,它会休眠大约20秒,然后唤醒并启动测试。我正在执行一些相当复杂的自动化操作,这需要在安装测试并断开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(引起:找不到"lib android_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')
还有其他选择吗?
我有以下函数,它将从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)