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