2

我想运行一些 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): could not load library "libanroid_runtime.so" required by "app_process"; 由所以 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')

还有什么其他选择?

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 回答