Android Monkey tool

Transkrypt

Android Monkey tool
Saramak.eu
Android Monkey tool
Autor: Administrator
sobota, 02 styczeń 2010
Monkey - narzędzie android-a do generowania zdarzeń na urządzeniu przez co może symulować operacje
użytkownika na urządzeniu:
- W najprostszej wersji wywołania służy do generowania losowych zdarzeń (naciśnięcie klawiszy
telefonu, wywołanie powiadomienia o niskim stanie baterii itd.)
- Może jednak przyjmować jako argument napisany przez nas skrypt ze zdarzeniami.
Uruchomienie monkey:
Monkey jest aplikacją zainstalowaną domyślnie na platformie android:
adb shell monkey
Wyświetli krótką instrukcję użytkowania monkey
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions] [--monitor-native-crashes]
[--kill-process-after-error] [--hprof]
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-flip PERCENT]
[--pct-anyevent PERCENT]
[--wait-dbg] [--dbg-no-events] [-f scriptfile]
[--port port]
[-s SEED] [-v [-v] ...] [--throttle MILLISEC]
COUNT
Przykład uruchomienia
wykonaj 100 zdarzeń losowych na aplikacji (wcześniej uruchom aplikacje)
adb shell monkey -p eu.saramak.contactManager.android2 -v 100
Monkey może również przyjmować skrypt napisany przez nas. Skrypt może być przyjęty na 2 sposoby:
- Przez telnet (przez sieć) [zalecany - ostatnia wersja androida]
- Przez plik tekstowy (dwa trypy pliku) [większa kontrola nad zdarzeniami]
- trype= user
- trype= raw events
Ostatecznie wszystkie skrypty możemy zapisać do plików i uruchamiać je z plików - więc czym różnić się
będą te 3 skrypty: odpowiedź brzmi: prawie wszystkim:
Np: naciśnięcie klawisza 'a' w sposobie 1 to:
key down KEYCODE_A
naciśnięcie klawisza 'a' w sposobie 2a to:
userDispatchPress(KEYCODE_A)
naciśnięcie klawisza 'a' w sposobie 2b to:
runDispatchKey(5113146,5113146,0,29,2,0,0,0) //A down
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
runDispatchKey(5113147,5113147,1,29,2,0,0,0) //A up
1. Przez sieć, telnet.
Aby uruchomić Monkey i przekazać mu skrypt przez telnet-a musimy w serwerze debagowania adb
przekierować port tcp androida, na tcp nasz lokalny. Wywołujemy polecenie:
adb forward tcp:1080 tcp:1080
Następnie uruchamiamy na emulatorze monkey:
adb shell monkey -v -v -p eu.saramak.contactManager.android2 --port 1080
Dwa -v to nie pomyła - uruchamia to dokładniejszy tryb logowania
--port na którym porcie będziemy mogli się połączyć do monkey / na którym porcie monkey będzie
nasłuchiwał poleceń.
Ważne: jeśli podajemy --port to nie podawajmy -f [plik_skryptu] ponieważ, ważniejszy dla niego będzie
parametr -f i będzie się spodziewał poleceń z pliku skryptu.
Dzięki forwardowaniu portów możemy wywołać na naszym lokalnym komputerze:
telnet localhost 1080
I wprowadzać z konsoli polecenia np:
key down KEYCODE_1
lub podać cały plik skryptu:
(sleep 5; cat example_script.txt) | telnett localhost 1080
Przykładowy
plik skryptu: # Touch the android
touch down 160
200
touch up 160 200
sleep 1000
# Hit
Next
touch down 300 450
touch up 300 450
sleep 1000
#
Hit Next
touch down 300 450
touch up 300 450
sleep
1000
# Hit Next
touch down 300 450
touch up 300
450
sleep 1000
# Go down and select the account
username
key down dpad_down
key up dpad_down
key down
dpad_down
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
key up dpad_down
key down dpad_center
key up
dpad_center
# account name: bill
key down b
key up b
key
down i
key up i
key down l
key up l
key down l
key
up l
# Go down to the password field
key down
dpad_down
key up dpad_down
# password: bill
key down
b
key up b
key down i
key up i
key down l
key up
l
key down l
key up l
# Select next
touch down
300 450
touch up 300 450
# quit
quit
Opis
wszystkich poleceń
Polecenie
Opis
Przykład
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
key [down|up] keycode
Naciśnięcie/zwolnienie klawisza o podanym
kodzie np: KEYCODE_MENU, KEYCODE_1 lub jako wartość integer: 29
= a 30 = b itd. Kody klawiszy od 0: "KEYCODE_UNKNOWN",
//0
"KEYCODE_SOFT_LEFT", //1
"KEYCODE_SOFT_RIGHT", //2
"KEYCODE_HOME", //3
"KEYCODE_BACK", //4
"KEYCODE_CALL", //5
"KEYCODE_ENDCALL", //6 ... itd
"KEYCODE_0",
"KEYCODE_1",
"KEYCODE_2",
"KEYCODE_3",
"KEYCODE_4",
"KEYCODE_5",
"KEYCODE_6",
"KEYCODE_7",
"KEYCODE_8",
"KEYCODE_9",
"KEYCODE_STAR",
"KEYCODE_POUND",
"KEYCODE_DPAD_UP",
"KEYCODE_DPAD_DOWN",
"KEYCODE_DPAD_LEFT",
"KEYCODE_DPAD_RIGHT",
"KEYCODE_DPAD_CENTER",
"KEYCODE_VOLUME_UP",
"KEYCODE_VOLUME_DOWN",
"KEYCODE_POWER",
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
"KEYCODE_CAMERA",
"KEYCODE_CLEAR",
"KEYCODE_A", //29
"KEYCODE_B",
"KEYCODE_C",
"KEYCODE_D",
"KEYCODE_E",
"KEYCODE_F",
"KEYCODE_G",
"KEYCODE_H",
"KEYCODE_I",
"KEYCODE_J",
"KEYCODE_K",
"KEYCODE_L",
"KEYCODE_M",
"KEYCODE_N",
"KEYCODE_O",
"KEYCODE_P",
"KEYCODE_Q",
"KEYCODE_R",
"KEYCODE_S",
"KEYCODE_T",
"KEYCODE_U",
"KEYCODE_V",
"KEYCODE_W",
"KEYCODE_X",
"KEYCODE_Y",
"KEYCODE_Z",
"KEYCODE_COMMA",
"KEYCODE_PERIOD",
"KEYCODE_ALT_LEFT",
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
"KEYCODE_ALT_RIGHT",
"KEYCODE_SHIFT_LEFT",
"KEYCODE_SHIFT_RIGHT",
"KEYCODE_TAB",
"KEYCODE_SPACE",
"KEYCODE_SYM",
"KEYCODE_EXPLORER",
"KEYCODE_ENVELOPE",
"KEYCODE_ENTER",
"KEYCODE_DEL",
"KEYCODE_GRAVE",
"KEYCODE_MINUS",
"KEYCODE_EQUALS",
"KEYCODE_LEFT_BRACKET",
"KEYCODE_RIGHT_BRACKET",
"KEYCODE_BACKSLASH",
"KEYCODE_SEMICOLON",
"KEYCODE_APOSTROPHE",
"KEYCODE_SLASH",
"KEYCODE_AT",
"KEYCODE_NUM",
"KEYCODE_HEADSETHOOK",
"KEYCODE_FOCUS",
"KEYCODE_PLUS",
"KEYCODE_MENU",
"KEYCODE_NOTIFICATION",
"KEYCODE_SEARCH",
"KEYCODE_PLAYPAUSE",
"KEYCODE_STOP",
"KEYCODE_NEXTSONG",
"KEYCODE_PREVIOUSSONG",
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
"KEYCODE_REWIND",
"KEYCODE_FORWARD",
"KEYCODE_MUTE",
"TAG_LAST_KEYCODE" touch [down|up|move] x y
Dotknięcie ekranu, tak jak dotknięcie
klawisza zaczyna się od naciśnięcia aż do zwolnienia. touch down 300 450
touch up 300 450
trackball dx dy
Symylacja używania trackball-a przez
użytkownika dx ile razy przesunąć trackball w dół (wartość
ujemna w górę) dy ile razy przesunąć trackball w prawo
(wartość ujemna w lewo)
trackball -2 -2
flip [open|close]
Symulowanie otwarcia klawiatury (takiej jak w
G1)
flip open
wake
Pokazanie klawiatury na ekranie http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
tap x y
Naciśnięcie ekranu/ przycisku na ekranie
tap 70 70 press keycode
Naciśnięcie klawisza. Przyjmuje KEYCODE_*
lub wartość int. press KEYCODE_1
press 29
type string
Gdy nie chcemy symulować naciśnięcia każdej
literki po literce. Zasymuluje wciśnięcie kolejno podanych
klawiszy type mama
listvar
Z urządzenia możemy dostać różne
zdefinowane stałe.
żeby zobaczyć listę stałych piszemy
listvar, oto lista z mojego emulatora:
am.current.action
am.current.categories am.current.comp.class
am.current.comp.package am.current.data am.current.package
build.board build.brand build.cpu_abi build.device build.display
build.fingerprint build.host build.id build.manufacturer
build.model build.product build.tags build.type build.user
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
build.version.codename build.version.incremental
build.version.release build.version.sdk clock.millis
clock.realtime clock.uptime display.density display.height
display.width
listvar
getvar varname
wartość stałych zdefiniowanych powyżej getvar display.height display.width
quit
Kończy działanie monkey
done
Rozpoczyna nową sesje monkey. Kończy
połączenie z telnetem
sleep milisecund
Usypia monkey na podaną ilość milisekund sleep 2000
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
2 - Plik skryptowy
Co
daje nam użycie plików zamiast połączenia przez telnet z monkey
?: Mało:
-większą kontrolę nad generowanymi zdarzeniami.
-szybsze
mniej skomplikowane uruchomienie
Pliki skryptowe monkey są
mniej intuicyjne i trudniejsze do napisania. Można powiedzieć, że
polecenia ze sposobu 1 jest nakładką na polecenia ze sposobu
2. Zanim
użyjemy
pliku skryptowego typu raw events lub user, musimy ten plik
odpowiednio sformatować.
Oba tryby różnią się poleceniami,
które rozumieją.
Monkey na początku, pobiera nagłówek pliku
i sprawdza którego trybu używamy:
count= 6 // ile zdarzeń
będzie skonsumowanych przez monkey.
speed= 1.0 // z jaką
szybkością monkey ma konsumować zdarzenia
start data >>
// ważna linijka po niej będą czytane zdarzenia
2a - Tryb
raw events
Nagłówek: type= raw events
count= 6
speed=
1.0
start data >>
Obsługiwane
zdarzenia:
DispatchPointer
DispatchTrackball
DispatchKey DispatchFlip
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
Opis funkcji i parametrów:
xxxDispatchPointer
Parametry:
downTime:long
eventTime:long
action:int
x:float
y:float
pressure:float
size:float
metaState:int
xPrecision:float
yPrecision:float
device:int
edgeFlags:int
xxxDispatchTrackball xxxDispatchKey
Parametry:
downTime:long
eventTime:long
action:int
code:int
repeat:int
metaState:int
device:int
scancode:int
xxxDispatchFlip
keyboardOpen:Boolean
Przykład
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
pliku
skryptowego:
example_script.txt type= raw events
count= 6
speed=
1.0
start data >>
runDispatchKey(5113146,5113146,0,29,2,0,0,0)
//A down
runDispatchKey(5113147,5113147,1,29,2,0,0,0) //A
up
runDispatchKey(5113146,5113146,0,30,0,0,0,0) //B down
runDispatchKey(5113147,5113147,1,30,0,0,0,0) //B
up
runDispatchKey(5113146,5113146,0,31,0,0,0,0) //C
down
runDispatchKey(5113147,5113147,1,31,0,0,0,0) //C
up
runDispatchKey(5113146,5113146,0,32,0,0,0,0) //D
down
runDispatchKey(5113147,5113147,1,32,0,0,0,0) //D up
2b
-
Tryb user
Nagłówek:
type= user
count= 6
speed= 1.0
start
data >>
DispatchPress
LaunchActivity
UserWait
LongPress
Opis
funkcji
i parametrów:
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
xxxDispatchPress
key_name:String
xxxLaunchActivity
pkg_name:String
cl_name:String
xxxUserWait
sleeptime:long
xxxLongPress
brak
Przykład pliku
skryptowego:
example_script.txt type= user
count= 6
speed= 1.0
start
data
>>
userDispatchPress(KEYCODE_A)
userDispatchPress(KEYCODE_B)
userDispatchPress(KEYCODE_C)
userDispatchPress(KEYCODE_D)
userDispatchPress(KEYCODE_E)
userDispatchPress(KEYCODE_F)
userDispatchPress(KEYCODE_G)
userDispatchPress(KEYCODE_H)
userDispatchPress(KEYCODE_I)
userDispatchPress(KEYCODE_J)
userDispatchPress(KEYCODE_K)
userDispatchPress(KEYCODE_L)
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57
Saramak.eu
http://saramak.eu
Powered by Joomla!
Wygenerowano: 8 March, 2017, 04:57