Reputation: 15010
I have installed Android SDK
on Ubuntu 16.04 which runs on Virtual Box on my laptop. I have a Samsung Galaxy Tab connected to the laptop. The device is accessible to the Virtual Machine. I try to install my android app (apk file
)
using monkeyrunner.
The python script that I use is below
# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection()
# Installs the Android package. Notice that this method returns a boolean, so you can test
# to see if the installation worked.
device.installPackage('myproject/bin/MyApplication.apk')
# sets a variable with the package's internal name
package = 'com.example.android.myapplication'
# sets a variable with the name of an Activity in the package
activity = 'com.example.android.myapplication.MainActivity'
# sets the name of the component to start
runComponent = package + '/' + activity
# Runs the component
device.startActivity(component=runComponent)
# Presses the Menu button
device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)
# Takes a screenshot
result = device.takeSnapshot()
# Writes the screenshot to a file
result.writeToFile('myproject/shot1.png','png')
I run the script as
monkeyrunner -v ALL ~/Workspace/monkey_runner_sample.py
I get the following output and nothing happens. The program sort of hangs.
170209 11:19:27.878:I [main] [com.android.chimpchat.ChimpManager] Monkey Command: wake.
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] Error starting command: monkey --port 12345
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice]com.android.ddmlib.TimeoutException
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.ddmlib.AdbHelper.read(AdbHelper.java:766)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.ddmlib.AdbHelper.read(AdbHelper.java:735)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.ddmlib.AdbHelper.readAdbResponse(AdbHelper.java:221)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:455)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:381)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:352)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.ddmlib.Device.executeShellCommand(Device.java:604)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at com.android.chimpchat.adb.AdbChimpDevice$1.run(AdbChimpDevice.java:105)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
170209 11:19:31.146:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] at java.lang.Thread.run(Thread.java:745)
The application MyApplication
is not getting installed on the tablet.
The errors are given below
170209 11:27:07.692:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice] Error starting command: monkey --port 12345
170209 11:27:07.692:S [pool-1-thread-1] [com.android.chimpchat.adb.AdbChimpDevice]com.android.ddmlib.TimeoutException
Could anyone help me figure out what is happening ?
Upvotes: 0
Views: 1524
Reputation: 69396
You can use AndroidViewClient/culebra and with only a few changes on your original monkeyrunner
script, you can get it running.
The base script was generated by culebra which is always a good starting point.
#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
Copyright (C) 2013-2016 Diego Torres Milano
Created on 2017-02-08 by Culebra v12.5.3
__ __ __ __
/ \ / \ / \ / \
____________________/ __\/ __\/ __\/ __\_____________________________
___________________/ /__/ /__/ /__/ /________________________________
| / \ / \ / \ / \ \___
|/ \_/ \_/ \_/ \ o \
\_____/--<
@author: Diego Torres Milano
@author: Jennifer E. Swofford (ascii art snake)
'''
import re
import sys
import os
from com.dtmilano.android.viewclient import ViewClient
from com.dtmilano.android.adb.adbclient import DOWN_AND_UP
kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False}
device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1)
kwargs2 = {'forceviewserveruse': False, 'useuiautomatorhelper': False, 'ignoreuiautomatorkilled': True, 'autodump': False, 'startviewserver': True, 'compresseddump': True}
vc = ViewClient(device, serialno, **kwargs2)
# Installs the Android package. Notice that this method returns a boolean, so you can test
# to see if the installation worked.
vc.installPackage('myproject/bin/MyApplication.apk')
# sets a variable with the package's internal name
package = 'com.example.android.myapplication'
# sets a variable with the name of an Activity in the package
activity = 'com.example.android.myapplication.MainActivity'
# sets the name of the component to start
runComponent = package + '/' + activity
# Runs the component
device.startActivity(component=runComponent)
# Presses the Menu button
device.press('KEYCODE_MENU', DOWN_AND_UP)
# Writes the screenshot to a file (you can use a plain filename or use these placeholders)
vc.writeImageToFile('/tmp/${serialno}-${focusedwindowname}-${timestamp}.png', 'PNG')
Upvotes: 1