从Python-Django启动Android模拟器

时间:2011-04-21 06:55:01

标签: android python django web-applications

def start_test(request):
    os.system('echo Starting emulator...')
    os.system('./android-sdk-linux_x86/tools/emulator -avd testavd &')
    return HttpResponse("OK")

以下是我想要做的准系统代码 执行此代码时,服务器在运行模拟器时停止响应。任何帮助表示赞赏 我正在使用django开发服务器。这是服务器输出:

Django version 1.1.1, using settings 'Cloust.settings'
Development server is running at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
Starting emulator...
[21/Apr/2011 02:00:06] "GET /start_test/a.apk/ HTTP/1.1" 200 5
emulator: warning: opening audio output failed

emulator: emulator window was out of view and was recentred

5 个答案:

答案 0 :(得分:2)

也许你应该尝试在单独的线程中运行模拟器?

E.g。

import subprocess
thread = threading.Thread(target=subprocess.popen(['./android-sdk-linux_x86/tools/emulator', '-avd', 'testavd', '&'])
thread.start()

答案 1 :(得分:1)

考虑到你正在使用django,你可能需要以某种方式管理模拟器。 在我认为这种情况下,线程并不是一个好的选择。

我建议在这种情况下使用类似http://code.google.com/p/django-tasks/

的内容来研究任务管理

答案 2 :(得分:0)

我仍然无法正确解决此问题,但使用subprocess.Popen可以让我在之后的模拟器上执行命令:

print 'Starting emulator...'
subprocess.Popen(['emulator', '-avd', 'testavd'])
os.system('adb wait-for-device')
os.system('Perform whatever adb commands you need')

值得注意的是,这是使用已开始使用sudo的django开发服务器,所以显然这远非理想。

答案 3 :(得分:0)

ADB的一个问题是你需要多个命令才能完成任务 例如:

adb shell

su 

cp /data/local/x /data/local/y

exit

adb pull /data/local/y

可以使用python popen和os-system完成吗?尝试下面的例子没有成功..

print 'Starting emulator...'
subprocess.Popen(['emulator', '-avd', 'testavd'])
os.system('adb wait-for-device')
os.system('Perform whatever adb commands you need')

答案 4 :(得分:0)

不知道它是否会对此有所帮助(希望如此)。

我希望模拟器在自动化测试开始之前打开,而某些共振appium不能这样做。 在我的情况下,我需要添加模拟器的完整路径。

check_output(["/Users/{USER_NAME}/Library/Android/sdk/tools/emulator", "-avd", "Pixel_API_26"])

希望它能帮助别人,直到appium解决这个问题。