Juin 30

Lorsque l’on développe une application, en général (lol) , on essaye de la tester au maximum…

Pour les applications AndroidW, Google nous fournit un outil qui permet de scripter des interactions avec un téléphone ou un émulateur.

Je l’ai testé… et cela s’avère être fort utile ! (y) Comme souvent avec ce type d’outils, configurer ses scripts prend du temps, mais une fois que c’est fait, il n’y a plus qu’à les rejouer afin d’effectuer tous les tests codés !

Dans la vidéo ci-dessous, on voit :

  • sur la partie de gauche, un émulateur Android,
  • en haut à droite, la ligne de commande utilisée
  • et en bas à droite le répertoire où le script est situé.

Ma seule action durant la vidéo, est d’appuyer sur la touche Entrée pour lancer la commande.


 
Le script utilisé est assez simple. C’est en langage pythonW mais très facilement utilisable même lorsqu’on ne le connait pas :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# Importer les modules necessaires au programme
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

# Se connecter
print "Connexion Emulateur"
device = MonkeyRunner.waitForConnection(10, 'emulator-5554')

#device.wake();
#device.press('KEYCODE_MENU', 'DOWN_AND_UP')

# Deployer et installer une application
#device.installPackage('myproject/bin/MyApplication.apk')

# variable avec le nom du paquetage
package = 'com.android.thewongandonly.QuickDraw'

# Nom de l'activite a lancer
activity = 'QuickDraw'

# Nom du composant a demarrer
runComponent = package + '/.' + activity

print "Lancer application"
device.startActivity(component=runComponent)
MonkeyRunner.sleep(3)

print "Effacer dessin"
device.press('KEYCODE_MENU', 'DOWN_AND_UP')
MonkeyRunner.sleep(1)
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
#device.press('KEYCODE_DPAD_RIGHT', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_CENTER', 'DOWN_AND_UP')
MonkeyRunner.sleep(1)

# Quelques variables
point1   = (50, 210)
point2   = (145, 590)
point3   = (240, 250)
point4   = (335, 590)
point5   = (430, 210)
duration = 1
steps    = 30

print "Dessiner"
device.drag(point1, point2, duration, steps)
device.drag(point2, point3, duration, steps)
device.drag(point3, point4, duration, steps)
device.drag(point4, point5, duration, steps)
MonkeyRunner.sleep(1)

print "Stylo 2"
device.press('KEYCODE_DPAD_RIGHT', 'DOWN_AND_UP')

print "Menu ABC"
device.press('KEYCODE_MENU', 'DOWN_AND_UP')
MonkeyRunner.sleep(2)
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_RIGHT', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_RIGHT', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_CENTER', 'DOWN_AND_UP')
MonkeyRunner.sleep(1)
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_UP', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_UP', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_UP', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_UP', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_CENTER', 'DOWN_AND_UP')
MonkeyRunner.sleep(3)

print "Texte"
device.type("Cool")
device.press('KEYCODE_DPAD_RIGHT', 'DOWN_AND_UP')
device.press('KEYCODE_DPAD_CENTER', 'DOWN_AND_UP')
device.drag((110, 720), (435, 720), duration, 10)

# Takes a screenshot
print "Capturer"
result = device.takeSnapshot()

# Writes the screenshot to a file
print "Sauvegarder"
result.writeToFile('../../../../../test/demo.png', 'png')

print "Stylo 1"
device.press('KEYCODE_DPAD_LEFT', 'DOWN_AND_UP')

 
Trois classes sont disponibles :

  • MonkeyDevice pour interagir avec un téléphone ou un émulateur, …
  • MonkeyRunner pour se connecter, faire des pauses, …
  • MonkeyImage pour manipuler des images, les comparer, …

L’application utilisée sur l’émulateur est Draw!

Share

Lien permanent vers Piloter son Android Rédigé par Whiler \\ Tags : , , ,

7 réponses pour “Piloter son Android”

  1. Flo a dit :

    Bonjour,
    d’abord merci pour ton explication (bow) , mais même avec j’ai un problème.
    Je voudrais moi aussi utiliser le monkey runner mais je n’arrive pas à lancer mon script.
    Quand je lance la même ligne de commande que toi (depuis monkeyrunner.bat se trouvant dans le SDK fourni), j’ai une erreur me disant que je dois rajouter le plugin (-p, -v ou -s) et mon script ne se lance pas. (tmi)

    Répondre

  2. Whiler a dit :

    @ Flo : Salut,

    C’est quoi le message exact (copier/coller de la fenêtre DOS) ?

    Répondre

  3. Flo a dit :

    Whiler : Salut et merci pour ta réponse rapide,

    Le problème s’est réglé lorsque j’ai utilisé la fenêtre DOS normalement en ayant modifié mon PATH, plutôt que de lancer monkeyrunner.exe
    Maintenant, j’ai ça :

    1
    2
     device.press('KEYCODE_MENU', 'DOWN_AND_UP')
    TypeError: press: The 3rd argument is required

    et dans la doc, il n’y a pas de 3ème argument.

    Répondre

  4. Whiler a dit :

    @ Flo : Le path, c’est path étonnant…

    Pour le device.press, comme on le voit dans mon exemple, je n’utilise également que 2 paramètres… et cela fonctionne… tu dois probablement utiliser un autre type de périphérique ou une autre version de l’API… :s

    Répondre

  5. Pantoufle a dit :

    Bonjour, serait-ce possible de faire cette manip sans avoir au préalable rooté le téléphone, car chez moi seul un émulateur ou téléphone rooté répond à Monkey…

    Répondre

  6. Whiler a dit :

    @ Pantoufle : Je ne sais pas… tout ce que j’ai est rooté :$

    Répondre

  7. Android a dit :

    wow thanks you are genius!!!

    merci, merci!!

    wgetandroidsnapshot is great program!!!

    Répondre

Laisser une réponse

(requis)

(requis)

*

Notifiez-moi les commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.

;) (lol) (y) |-( (hi) 8-) (angel) :s (clap) (bow) (tmi) (:| plus »