module PWN::Plugins::Android

def self.adb_net_connect(opts = {})

def self.adb_net_connect(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
get].to_s.scrub
rt]
t].to_i
ct #{target}:#{port}`
 => e

def self.adb_net_disconnect(opts = {})

def self.adb_net_disconnect(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
get].to_s.scrub
rt]
t].to_i
nnect #{target}:#{port}`
 => e

def self.adb_pull(opts = {})

def self.adb_pull(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
.to_s.scrub
.to_s.scrub
:as_root]
 if as_root
#{file} #{dest}`
 => e

def self.adb_push(opts = {})

def self.adb_push(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
.to_s.scrub
.to_s.scrub
:as_root]
 if as_root
#{file} #{dest}`
 => e

def self.adb_sh(opts = {})

def self.adb_sh(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
mmand].to_s.scrub
:as_root]
 if as_root
 #{command}`
 => e

def self.authors

def self.authors
st.pentest@0dayinc.com>

def self.close_app(opts = {})

def self.close_app(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
o_s.scrub
:as_root]
 if as_root
 am force-stop #{app}`
 => e

def self.dumpsys(opts = {})

def self.dumpsys(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
o_s.scrub
:as_root]
 if as_root
#{adb_path} shell dumpsys`
#{adb_path} shell dumpsys package #{app}`
 => e

def self.find_hidden_codes(opts = {})

def self.find_hidden_codes(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
.to_i
i
[:interact]

 |n|
nvoking keyevent: #{n}")
} shell input keyevent #{n}`
nter to continue...'
 => e

def self.help

def self.help
connect(
uired - path to adb binary',
red - target host or IP to connect',
l - defaults to tcp 5555'
{self}.adb_sh(
uired - path to adb binary',
command to execute'
onal - boolean (defaults to false)',
(
uired - path to adb binary',
d - source file to push',
d - destination path to push file',
onal - boolean (defaults to false)',
(
uired - path to adb binary',
d - source file to pull',
d - destination path to pull file',
onal - boolean (defaults to false)',
eenshot(
uired - path to adb binary',
l - destination path to save screenshot file (defaults to /sdcard/screen.png)',
onal - boolean (defaults to true)'
ecord(
uired - path to adb binary',
l - destination path to save screen record file (defaults to /sdcard/screen.mp4)',
onal - boolean (defaults to true)'
rr = #{self}.list_installed_apps(
uired - path to adb binary',
onal - boolean (defaults to false)',
{self}.dumpsys(
uired - path to adb binary',
 - application app to detail otherwise display all (i.e. display info from an android app returned from #list_install_apps method)',
onal - boolean (defaults to false)',
{self}.open_app(
uired - path to adb binary',
 - application app to run (i.e. open an android app returned from #list_install_apps method)',
onal - boolean (defaults to false)'
den_codes(
uired - path to adb binary',
d - start at keycode #'
- end at keycode #',
ional - defaults to false'
uired - path to adb binary',
quired - direction to swipe (:up|:down|:left|:right)'
uired - path to adb binary',
red - string to type'
ecial(
uired - path to adb binary',
ed - special event to invoke (
kaku|
t|
e|
ogramming|
ial_digital|
ial_analog|
e_teletext|
e_service|
e|
e_bs|
e_cs|
rvice|
ntry|

ntext_menu|
a1|
mi1|
mi2|
mi3|
mi4|
mposite1|
mposite2|
mponent1|
mponent2|
vice|
_menu|
sc|
sc_mix_up|
sc_mix_down|
cable|
set|
y|
|

|
ract|
iply|
_paren|
t_paren|
ls|
r|

a|

s|

enu|
forward|
back|
forward|
back|
d|

|
|
_track|
|
l|
itch|
ragana|




e|


ect|
rt|
mbl|
mbr|
up|
down|





eft|
ight|
t|
ht|
|
|

|
|
n|
pause|


ous|
d|
forward|
|
veloper.android.com/reference/android/view/KeyEvent.html for more info'
{self}.close_app(
uired - path to adb binary',
 - application app to run (i.e. open an android app returned from #list_install_apps method)',
onal - boolean (defaults to false)'
vent_listener(
uired - path to adb binary',
onal - boolean (defaults to false)',
disconnect(
uired - path to adb binary',
red - target host or IP to connect',
l - defaults to tcp 5555'

def self.input(opts = {})

def self.input(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
ing].to_s.scrub
o |char|
#{adb_path} shell input keyevent KEYCODE_0`
#{adb_path} shell input keyevent KEYCODE_1`
#{adb_path} shell input keyevent KEYCODE_2`
#{adb_path} shell input keyevent KEYCODE_3`
#{adb_path} shell input keyevent KEYCODE_4`
#{adb_path} shell input keyevent KEYCODE_5`
#{adb_path} shell input keyevent KEYCODE_6`
#{adb_path} shell input keyevent KEYCODE_7`
#{adb_path} shell input keyevent KEYCODE_8`
#{adb_path} shell input keyevent KEYCODE_9`
#{adb_path} shell input keyevent KEYCODE_STAR`
#{adb_path} shell input keyevent KEYCODE_POUND`
#{adb_path} shell input text '\\}'`
#{adb_path} shell input text '\\{'`
#{adb_path} shell input text '\\"'`
#{adb_path} shell input text '\\?'`
#{adb_path} shell input text '\\<'`
#{adb_path} shell input text '\\>'`
#{adb_path} shell input text '%'`
#{adb_path} shell input text ':'`
#{adb_path} shell input text '$'`
#{adb_path} shell input text '!'`
#{adb_path} shell input text '~'`
#{adb_path} shell input text '\\|'`
#{adb_path} shell input text '\\&'`
#{adb_path} shell input text '^'`
#{adb_path} shell input text '_'`
#{adb_path} shell input text 'A'`
#{adb_path} shell input text 'B'`
#{adb_path} shell input text 'C'`
#{adb_path} shell input text 'D'`
#{adb_path} shell input text 'E'`
#{adb_path} shell input text 'F'`
#{adb_path} shell input text 'G'`
#{adb_path} shell input text 'H'`
#{adb_path} shell input text 'I'`
#{adb_path} shell input text 'J'`
#{adb_path} shell input text 'K'`
#{adb_path} shell input text 'L'`
#{adb_path} shell input text 'M'`
#{adb_path} shell input text 'N'`
#{adb_path} shell input text 'O'`
#{adb_path} shell input text 'P'`
#{adb_path} shell input text 'Q'`
#{adb_path} shell input text 'R'`
#{adb_path} shell input text 'S'`
#{adb_path} shell input text 'T'`
#{adb_path} shell input text 'U'`
#{adb_path} shell input text 'V'`
#{adb_path} shell input text 'W'`
#{adb_path} shell input text 'X'`
#{adb_path} shell input text 'Y'`
#{adb_path} shell input text 'Z'`
#{adb_path} shell input keyevent KEYCODE_A`
#{adb_path} shell input keyevent KEYCODE_B`
#{adb_path} shell input keyevent KEYCODE_C`
#{adb_path} shell input keyevent KEYCODE_D`
#{adb_path} shell input keyevent KEYCODE_E`
#{adb_path} shell input keyevent KEYCODE_F`
#{adb_path} shell input keyevent KEYCODE_G`
#{adb_path} shell input keyevent KEYCODE_H`
#{adb_path} shell input keyevent KEYCODE_I`
#{adb_path} shell input keyevent KEYCODE_J`
#{adb_path} shell input keyevent KEYCODE_K`
#{adb_path} shell input keyevent KEYCODE_L`
#{adb_path} shell input keyevent KEYCODE_M`
#{adb_path} shell input keyevent KEYCODE_N`
#{adb_path} shell input keyevent KEYCODE_O`
#{adb_path} shell input keyevent KEYCODE_P`
#{adb_path} shell input keyevent KEYCODE_Q`
#{adb_path} shell input keyevent KEYCODE_R`
#{adb_path} shell input keyevent KEYCODE_S`
#{adb_path} shell input keyevent KEYCODE_T`
#{adb_path} shell input keyevent KEYCODE_U`
#{adb_path} shell input keyevent KEYCODE_V`
#{adb_path} shell input keyevent KEYCODE_W`
#{adb_path} shell input keyevent KEYCODE_X`
#{adb_path} shell input keyevent KEYCODE_Y`
#{adb_path} shell input keyevent KEYCODE_Z`
#{adb_path} shell input keyevent KEYCODE_COMMA`
#{adb_path} shell input keyevent KEYCODE_PERIOD`
#{adb_path} shell input keyevent KEYCODE_SPACE`
#{adb_path} shell input keyevent KEYCODE_GRAVE`
#{adb_path} shell input keyevent KEYCODE_MINUS`
#{adb_path} shell input keyevent KEYCODE_EQUALS`
#{adb_path} shell input keyevent KEYCODE_LEFT_BRACKET`
#{adb_path} shell input keyevent KEYCODE_RIGHT_BRACKET`
#{adb_path} shell input keyevent KEYCODE_BACKSLASH`
#{adb_path} shell input keyevent KEYCODE_SEMICOLON`
#{adb_path} shell input keyevent KEYCODE_APOSTROPHE`
#{adb_path} shell input keyevent KEYCODE_SLASH`
#{adb_path} shell input keyevent KEYCODE_AT`
#{adb_path} shell input keyevent KEYCODE_PLUS`
#{adb_path} shell input keyevent KEYCODE_LEFT_PAREN`
#{adb_path} shell input keyevent KEYCODE_RIGHT_PAREN`
unknown char: #{char}"
ub
 => e

def self.input_special(opts = {})

def self.input_special(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
t].to_s.scrub.to_sym
b_path} shell input keyevent KEYCODE_ZOOM_IN`
b_path} shell input keyevent KEYCODE_ZOOM_OUT`
aku
b_path} shell input keyevent KEYCODE_ZENKAKU_HANKAKU`
b_path} shell input keyevent KEYCODE_YEN`
b_path} shell input keyevent KEYCODE_WINDOW`
b_path} shell input keyevent KEYCODE_WAKEUP`

b_path} shell input keyevent KEYCODE_VOICE_ASSIST`

b_path} shell input keyevent KEYCODE_TV_ZOOM_MODE`
gramming
b_path} shell input keyevent KEYCODE_TV_TIMER_PROGRAMMING`
al_digital
b_path} shell input keyevent KEYCODE_TV_TERRESTRIAL_DIGITAL`
al_analog
b_path} shell input keyevent KEYCODE_TV_TERRESTRIAL_ANALOG`
_teletext
b_path} shell input keyevent KEYCODE_TV_SATELLITE_TELETEXT`
_service
b_path} shell input keyevent KEYCODE_TV_SATELLITE_SERVICE`
_bs
b_path} shell input keyevent KEYCODE_TV_SATELLITE_BS`
_cs
b_path} shell input keyevent KEYCODE_TV_SATELLITE_CS`

b_path} shell input keyevent KEYCODE_TV_SATELLITE`
vice
b_path} shell input keyevent KEYCODE_TV_RADIO_SERVICE`
b_path} shell input keyevent KEYCODE_TV_POWER`
try
b_path} shell input keyevent KEYCODE_TV_NUMBER_ENTRY`
b_path} shell input keyevent KEYCODE_TV_NETWORK`
text_menu
b_path} shell input keyevent KEYCODE_TV_MEDIA_CONTEXT_MENU`
1
b_path} shell input keyevent KEYCODE_TV_INPUT_VGA_1`
i1
b_path} shell input keyevent KEYCODE_TV_INPUT_HDMI_1`
i2
b_path} shell input keyevent KEYCODE_TV_INPUT_HDMI_2`
i3
b_path} shell input keyevent KEYCODE_TV_INPUT_HDMI_3`
i4
b_path} shell input keyevent KEYCODE_TV_INPUT_HDMI_4`
posite1
b_path} shell input keyevent KEYCODE_TV_INPUT_COMPOSITE_1`
posite2
b_path} shell input keyevent KEYCODE_TV_INPUT_COMPOSITE_2`
ponent1
b_path} shell input keyevent KEYCODE_TV_INPUT_COMPONENT_1`
ponent2
b_path} shell input keyevent KEYCODE_TV_INPUT_COMPONENT_2`
b_path} shell input keyevent KEYCODE_TV_INPUT`
ice
b_path} shell input keyevent KEYCODE_TV_DATA_SERVICE`
menu
b_path} shell input keyevent KEYCODE_TV_CONTENTS_MENU`
c
b_path} shell input keyevent KEYCODE_TV_AUDIO_DESCRIPTION`
c_mix_up
b_path} shell input keyevent KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP`
c_mix_down
b_path} shell input keyevent KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN`
able
b_path} shell input keyevent KEYCODE_TV_ANTENNA_CABLE`
b_path} shell input keyevent KEYCODE_TV`
b_path} shell input keyevent KEYCODE_SYSRQ`
et
b_path} shell input keyevent KEYCODE_SWITCH_CHARSET`

b_path} shell input keyevent KEYCODE_STEM_PRIMARY`
b_path} shell input keyevent KEYCODE_STEM_1`
b_path} shell input keyevent KEYCODE_STEM_2`
b_path} shell input keyevent KEYCODE_STEM_3`
b_path} shell input keyevent KEYCODE_STB_POWER`
b_path} shell input keyevent KEYCODE_STB_INPUT`
b_path} shell input keyevent KEYCODE_SLEEP`
b_path} shell input keyevent KEYCODE_SETTINGS`
b_path} shell input keyevent KEYCODE_SCROLL_LOCK`
b_path} shell input keyevent KEYCODE_RO`
b_path} shell input keyevent KEYCODE_PROG_BLUE`
b_path} shell input keyevent KEYCODE_PROG_GREEN`
b_path} shell input keyevent KEYCODE_PROG_RED`
b_path} shell input keyevent KEYCODE_PROG_YELLOW`
b_path} shell input keyevent KEYCODE_PARING`
b_path} shell input keyevent KEYCODE_NUM_LOCK`
act
b_path} shell input keyevent KEYCODE_NUMPAD_SUBTRACT`
ply
b_path} shell input keyevent KEYCODE_NUMPAD_MULTIPLY`
paren
b_path} shell input keyevent KEYCODE_NUMPAD_LEFT_PAREN`
_paren
b_path} shell input keyevent KEYCODE_NUMPAD_RIGHT_PAREN`
s
b_path} shell input keyevent KEYCODE_NUMPAD_EQUALS`

b_path} shell input keyevent KEYCODE_NUMPAD_ENTER`
b_path} shell input keyevent KEYCODE_NUMPAD_DOT`
e
b_path} shell input keyevent KEYCODE_NUMPAD_DIVIDE`

b_path} shell input keyevent KEYCODE_NUMPAD_COMMA`
b_path} shell input keyevent KEYCODE_NUMPAD_ADD`
b_path} shell input keyevent KEYCODE_NUMPAD_0`
b_path} shell input keyevent KEYCODE_NUMPAD_1`
b_path} shell input keyevent KEYCODE_NUMPAD_2`
b_path} shell input keyevent KEYCODE_NUMPAD_3`
b_path} shell input keyevent KEYCODE_NUMPAD_4`
b_path} shell input keyevent KEYCODE_NUMPAD_5`
b_path} shell input keyevent KEYCODE_NUMPAD_6`
b_path} shell input keyevent KEYCODE_NUMPAD_7`
b_path} shell input keyevent KEYCODE_NUMPAD_8`
b_path} shell input keyevent KEYCODE_NUMPAD_9`
b_path} shell input keyevent KEYCODE_NUM`
b_path} shell input keyevent KEYCODE_NAVIGATE_IN`
b_path} shell input keyevent KEYCODE_NAVIGATE_NEXT`
b_path} shell input keyevent KEYCODE_NAVIGATE_OUT`

b_path} shell input keyevent KEYCODE_NAVIGATE_PREVIOUS`
b_path} shell input keyevent KEYCODE_MUSIC`
b_path} shell input keyevent KEYCODE_MUHENKAN`
b_path} shell input keyevent KEYCODE_META_LEFT`
b_path} shell input keyevent KEYCODE_META_RIGHT`
nu
b_path} shell input keyevent KEYCODE_MEDIA_TOP_MENU`
orward
b_path} shell input keyevent KEYCODE_MEDIA_STEP_FORWARD`
ack
b_path} shell input keyevent KEYCODE_MEDIA_STEP_BACKWARD`
orward
b_path} shell input keyevent KEYCODE_MEDIA_SKIP_FORWARD`
ack
b_path} shell input keyevent KEYCODE_MEDIA_SKIP_BACKWARD`

b_path} shell input keyevent KEYCODE_MEDIA_RECORD`
b_path} shell input keyevent KEYCODE_MEDIA_PLAY`
b_path} shell input keyevent KEYCODE_MEDIA_PAUSE`
b_path} shell input keyevent KEYCODE_MEDIA_EJECT`
b_path} shell input keyevent KEYCODE_MEDIA_CLOSE`
track
b_path} shell input keyevent KEYCODE_MEDIA_AUDIO_TRACK`
b_path} shell input keyevent KEYCODE_MANNER_MODE`

b_path} shell input keyevent KEYCODE_LAST_CHANNEL`
tch
b_path} shell input keyevent KEYCODE_LANGUAGE_SWITCH`
agana
b_path} shell input keyevent KEYCODE_KATAKANA_HIRAGANA`
b_path} shell input keyevent KEYCODE_KANA`
b_path} shell input keyevent KEYCODE_INSERT`
b_path} shell input keyevent KEYCODE_INFO`
b_path} shell input keyevent KEYCODE_HENKAN`
b_path} shell input keyevent KEYCODE_HELP`
b_path} shell input keyevent KEYCODE_GUIDE`
b_path} shell input keyevent KEYCODE_FUNCTION`
b_path} shell input keyevent KEYCODE_FORWARD_DEL`
b_path} shell input keyevent KEYCODE_F1`
b_path} shell input keyevent KEYCODE_F2`
b_path} shell input keyevent KEYCODE_F3`
b_path} shell input keyevent KEYCODE_F4`
b_path} shell input keyevent KEYCODE_F5`
b_path} shell input keyevent KEYCODE_F6`
b_path} shell input keyevent KEYCODE_F7`
b_path} shell input keyevent KEYCODE_F8`
b_path} shell input keyevent KEYCODE_F9`
b_path} shell input keyevent KEYCODE_F10`
b_path} shell input keyevent KEYCODE_F11`
b_path} shell input keyevent KEYCODE_F12`
b_path} shell input keyevent KEYCODE_ESCAPE`
b_path} shell input keyevent KEYCODE_EISU`
b_path} shell input keyevent KEYCODE_DVR`
b_path} shell input keyevent KEYCODE_CTRL_LEFT`
b_path} shell input keyevent KEYCODE_CTRL_RIGHT`
b_path} shell input keyevent KEYCODE_CUT`
b_path} shell input keyevent KEYCODE_COPY`
b_path} shell input keyevent KEYCODE_PASTE`
b_path} shell input keyevent KEYCODE_CONTACTS`
b_path} shell input keyevent KEYCODE_CHANNEL_DOWN`
b_path} shell input keyevent KEYCODE_CHANNEL_UP`
b_path} shell input keyevent KEYCODE_CAPTIONS`
b_path} shell input keyevent KEYCODE_CAPS_LOCK`
b_path} shell input keyevent KEYCODE_CALENDAR`
b_path} shell input keyevent KEYCODE_CALCULATOR`
b_path} shell input keyevent KEYCODE_BUTTON_1`
b_path} shell input keyevent KEYCODE_BUTTON_2`
b_path} shell input keyevent KEYCODE_BUTTON_3`
b_path} shell input keyevent KEYCODE_BUTTON_4`
b_path} shell input keyevent KEYCODE_BUTTON_5`
b_path} shell input keyevent KEYCODE_BUTTON_6`
b_path} shell input keyevent KEYCODE_BUTTON_7`
b_path} shell input keyevent KEYCODE_BUTTON_8`
b_path} shell input keyevent KEYCODE_BUTTON_9`
b_path} shell input keyevent KEYCODE_BUTTON_10`
b_path} shell input keyevent KEYCODE_BUTTON_11`
b_path} shell input keyevent KEYCODE_BUTTON_12`
b_path} shell input keyevent KEYCODE_BUTTON_13`
b_path} shell input keyevent KEYCODE_BUTTON_14`
b_path} shell input keyevent KEYCODE_BUTTON_15`
b_path} shell input keyevent KEYCODE_BUTTON_16`
b_path} shell input keyevent KEYCODE_BUTTON_A`
b_path} shell input keyevent KEYCODE_BUTTON_B`
b_path} shell input keyevent KEYCODE_BUTTON_C`
b_path} shell input keyevent KEYCODE_BUTTON_L1`
b_path} shell input keyevent KEYCODE_BUTTON_L2`

b_path} shell input keyevent KEYCODE_BUTTON_MODE`
b_path} shell input keyevent KEYCODE_BUTTON_R1`
b_path} shell input keyevent KEYCODE_BUTTON_R2`
ct
b_path} shell input keyevent KEYCODE_BUTTON_SELECT`
t
b_path} shell input keyevent KEYCODE_BUTTON_START`
bl
b_path} shell input keyevent KEYCODE_BUTTON_THUMBL`
br
b_path} shell input keyevent KEYCODE_BUTTON_THUMBR`
b_path} shell input keyevent KEYCODE_BUTTON_X`
b_path} shell input keyevent KEYCODE_BUTTON_Y`
b_path} shell input keyevent KEYCODE_BUTTON_Z`
p
b_path} shell input keyevent KEYCODE_BRIGHTNESS_UP`
own
b_path} shell input keyevent KEYCODE_BRIGHTNESS_DOWN`
b_path} shell input keyevent KEYCODE_BREAK`
b_path} shell input keyevent KEYCODE_BOOKMARK`
b_path} shell input keyevent KEYCODE_AVR_POWER`
b_path} shell input keyevent KEYCODE_AVR_INPUT`
b_path} shell input keyevent KEYCODE_ASSIST`
b_path} shell input keyevent KEYCODE_APP_SWITCH`
b_path} shell input keyevent KEYCODE_3D_MODE`
b_path} shell input keyevent KEYCODE_11`
b_path} shell input keyevent KEYCODE_12`
b_path} shell input keyevent KEYCODE_UNKNOWN`
b_path} shell input keyevent KEYCODE_SOFT_LEFT`
b_path} shell input keyevent KEYCODE_SOFT_RIGHT`
b_path} shell input keyevent KEYCODE_SOFT_SLEEP`
b_path} shell input keyevent KEYCODE_HOME`
b_path} shell input keyevent KEYCODE_FORWARD`
b_path} shell input keyevent KEYCODE_BACK`
b_path} shell input keyevent KEYCODE_CALL`
b_path} shell input keyevent KEYCODE_ENDCALL`
b_path} shell input keyevent KEYCODE_DPAD_UP`
b_path} shell input keyevent KEYCODE_DPAD_DOWN`
b_path} shell input keyevent KEYCODE_DPAD_LEFT`
b_path} shell input keyevent KEYCODE_DPAD_RIGHT`
ft
b_path} shell input keyevent KEYCODE_DPAD_DOWN_LEFT`
ght
b_path} shell input keyevent KEYCODE_DPAD_DOWN_RIGHT`

b_path} shell input keyevent KEYCODE_DPAD_UP_LEFT`
t
b_path} shell input keyevent KEYCODE_DPAD_UP_RIGHT`
b_path} shell input keyevent KEYCODE_DPAD_CENTER`
b_path} shell input keyevent KEYCODE_VOLUME_UP`
b_path} shell input keyevent KEYCODE_VOLUME_DOWN`
b_path} shell input keyevent KEYCODE_POWER`
b_path} shell input keyevent KEYCODE_CAMERA`
b_path} shell input keyevent KEYCODE_CLEAR`
b_path} shell input keyevent KEYCODE_ALT_LEFT`
b_path} shell input keyevent KEYCODE_ALT_RIGHT`
b_path} shell input keyevent KEYCODE_SHIFT_LEFT`
b_path} shell input keyevent KEYCODE_SHIFT_RIGHT`
b_path} shell input keyevent KEYCODE_TAB`
b_path} shell input keyevent KEYCODE_SYM`
b_path} shell input keyevent KEYCODE_EXPLORER`
b_path} shell input keyevent KEYCODE_ENVELOPE`
b_path} shell input keyevent KEYCODE_ENTER`
b_path} shell input keyevent KEYCODE_DEL`
b_path} shell input keyevent KEYCODE_HEADSETHOOK`
b_path} shell input keyevent KEYCODE_FOCUS`
b_path} shell input keyevent KEYCODE_MENU`
b_path} shell input touchscreen swipe 0 0 0 1500 100`

b_path} shell input keyevent KEYCODE_NOTIFICATION`
b_path} shell input keyevent KEYCODE_SEARCH`
ause
b_path} shell input keyevent KEYCODE_MEDIA_PLAY_PAUSE`
b_path} shell input keyevent KEYCODE_MEDIA_STOP`
b_path} shell input keyevent KEYCODE_MEDIA_NEXT`
us
b_path} shell input keyevent KEYCODE_MEDIA_PREVIOUS`

b_path} shell input keyevent KEYCODE_MEDIA_REWIND`
orward
b_path} shell input keyevent KEYCODE_MEDIA_FAST_FORWARD`
b_path} shell input keyevent KEYCODE_MUTE`
b_path} shell input keyevent KEYCODE_PAGE_UP`
b_path} shell input keyevent KEYCODE_PAGE_DOWN`
b_path} shell input keyevent KEYCODE_PICTSYMBOLS`
b_path} shell input keyevent KEYCODE_MOVE_HOME`
b_path} shell input keyevent KEYCODE_MOVE_END`
known special event: #{event}"
b
 => e

def self.invoke_event_listener(opts = {})

def self.invoke_event_listener(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
o_s.scrub
:as_root]
 if as_root
 getevent -l`
 => e

def self.list_installed_apps(opts = {})

def self.list_installed_apps(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
:as_root]
 if as_root
path} shell pm list packages` if as_root
path} shell pm list packages --user 0` unless as_root
ackage:", "\n").split("\n")
 => e

def self.open_app(opts = {})

def self.open_app(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
o_s.scrub
:as_root]
 if as_root
 monkey -p #{app} -c android.intent.category.LAUNCHER 1`
 => e

def self.screen_record(opts = {})

def self.screen_record(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
st]
t].to_s.scrub
screen.mp4'
:as_root]
ss CTRL+C to complete...')
 if as_root
 screenrecord #{dest}`
 => e

def self.swipe(opts = {})

def self.swipe(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
direction].to_s.scrub.to_sym
adb_path} shell input touchscreen swipe 300 1500 300 600 100`
adb_path} shell input touchscreen swipe 300 600 300 1500 100`
adb_path} shell input touchscreen swipe 1000 1000 90 1000 100`
adb_path} shell input touchscreen swipe 90 1000 1000 1000 100`
known direction to swipe: #{direction}"
rub
 => e

def self.take_screenshot(opts = {})

def self.take_screenshot(opts = {})
db_path].to_s.scrub if File.exist?(opts[:adb_path].to_s.scrub)
st]
t].to_s.scrub
screen.png'
:as_root]
 if as_root
 screencap -p #{dest}`
 => e