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

Вот код barebone того, что я пытаюсь сделать.
Когда этот код будет выполнен, сервер перестает отвечать при запуске эмулятора. Любая помощь оценивается.
Я использую сервер разработки django. Вот вывод сервера:Запуск Android-эмулятора от Python-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 
+0

Почему вы пытаетесь это сделать? Эмулятор будет запущен на сервере и не будет виден с клиентом. В чем смысл? –

+0

@ Daniel Roseman: У меня сегодня немного больше времени, поэтому, чтобы правильно ответить на ваш вопрос, эмулятор будет доступен через VNC. Более конкретно, использование TightVNC и гуакамоле. – Mark

ответ

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') 

стоит отметить, что это использует сервер разработки Django, которая была начата с использованием Sudo, поэтому очевидно, что это далеко от идеала.

+0

Heey Mark, я могу запустить свой AVD. Но мне нужно запустить чистый AVD, например, стереть пользовательские данные и запустить новый. Как я должен это делать? –

2

Возможно, вам стоит попробовать запустить эмулятор в отдельной теме?

E.g.

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

Учитывая, что вы используете django, вам, вероятно, придется каким-то образом управлять эмуляторами. Threading на самом деле не очень хороший вариант в этом случае, я думаю.

Я предлагаю смотреть на задачи управления в этом случае что-то вроде http://code.google.com/p/django-tasks/

0

Одна из проблем с АБР заключается в том, что для выполнения необходимо выполнить несколько команд.
Например:

adb shell 

su 

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

exit 

adb pull /data/local/y 

Может ли это быть сделано с помощью питона POPEN и Os-систему? Пробовал пример ниже без успеха ..

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

Не знаю, поможет ли это одному (надеюсь, что так оно и есть).

Я хотел, чтобы эмулятор открывался перед началом тестирования автоматизации, и для некоторого резонирующего аппиума он не может этого сделать. В моем случае мне нужно было добавить полный путь к эмулятору.

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

Надеюсь, что это поможет кому-то, пока аппий не устранит эту проблему.