Skip to content

Instantly share code, notes, and snippets.

@teocci
Last active November 28, 2022 15:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save teocci/a7594251e0f871d31b8e6f3895df084b to your computer and use it in GitHub Desktop.
Save teocci/a7594251e0f871d31b8e6f3895df084b to your computer and use it in GitHub Desktop.
adb useful commands list
## Delete files
adb devices
List of devices attached
21344ca0530c7ece        device

adb -s 21344ca0530c7ece  shell 
cd /sdcard/Telegram/Telegram\ Video/
touch -mt 202209010000 end_marker
find . -newer start_marker ! -newer end_marker -print
find . -newer start_marker ! -newer end_marker -delete

## List all comands
adb help 

## Adb Server
adb kill-server
adb start-server 

## Adb Reboot
adb reboot
adb reboot recovery 
adb reboot-bootloader
# restarts adb with root permissions
adb root

## Shell
# Open or run commands in a terminal on the host Android device.
adb shell

## Devices
adb usb
adb devices   //show devices attached
adb devices -l //devices (product/model)
adb connect ip_address_of_device

## Get device android version
adb shell getprop ro.build.version.release 

## LogCat
adb logcat
# The parameter -c will clear the current logs on the device.
adb logcat -c // clear
# Save the logcat output to a file on the local system.
adb logcat -d > [path_to_file]
# Will dump the whole device information like dumpstate, dumpsys and logcat output.
adb bugreport > [path_to_file]

## Files
# Copy files from your computer to your phone.
adb push [source] [destination]
adb pull [device file location] [local file location] // Copy files from your phone to your computer.

## App install
adb -e install path/to/app.apk

-d                        - directs command to the only connected USB device...
-e                        - directs command to the only running emulator...
-s <serial number>        ...
-p <product name or path> ...
The flag you decide to use has to come before the actual adb command:

## Install the given app on all connected devices.
adb devices | tail -n +2 | cut -sf 1 | xargs -IX adb -s X install -r com.myAppPackage

## Uninstalling app from device
adb uninstall com.myAppPackage
adb uninstall <app .apk name>
adb uninstall -k <app .apk name> -> "Uninstall .apk withour deleting data"

adb shell pm uninstall com.example.MyApp
# Deletes all data associated with a package.
adb shell pm clear [package] 

## Uninstall the given app from all connected devices
adb devices | tail -n +2 | cut -sf 1 | xargs -IX adb -s X uninstall com.myAppPackage 

## Update app
# -r means re-install the app and keep its data on the device.
adb install -r yourApp.apk  
adb install -k <.apk file path on computer> 

## Home button
adb shell am start -W -c android.intent.category.HOME -a android.intent.action.MAIN

## Activity Manager
adb shell am start -a android.intent.action.VIEW
adb shell am broadcast -a 'my_action'

## Make a call
adb shell am start -a android.intent.action.CALL -d tel:+972527300294

## Open send sms screen with phone number and the message:
adb shell am start -a android.intent.action.SENDTO -d sms:+972527300294 --es  sms_body "Test" --ez exit_on_sent false

## Reset permissions
adb shell pm reset-permissions -p your.app.package 
## Grant a permission to an app. 
adb shell pm grant [packageName] [ Permission]
## Revoke a permission from an app.
adb shell pm revoke [packageName] [ Permission]


## Emulate device
adb shell wm size 2048x1536
adb shell wm density 288
## And reset to default
adb shell wm size reset
adb shell wm density reset

## Print text
adb shell input text 'Wow, it so cool feature'

## Screenshot
adb shell screencap -p /sdcard/screenshot.png

$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png

adb shell screenrecord /sdcard/NotAbleToLogin.mp4

$ adb shell
## shell@ $ screenrecord --verbose /sdcard/demo.mp4
# (press Control + C to stop)
## shell@ $ exit
$ adb pull /sdcard/demo.mp4

## Key event
## Home btn
adb shell input keyevent 3
## Back btn
adb shell input keyevent 4
## Call
adb shell input keyevent 5
## End call
adb shell input keyevent 6
## Turn Android device ON and OFF. It will toggle device to on/off status.
adb shell input keyevent 26
## Camera
adb shell input keyevent 27
## Open browser
adb shell input keyevent 64
## Enter
adb shell input keyevent 66
## Delete (backspace)
adb shell input keyevent 67
## Contacts
adb shell input keyevent 207
## Brightness down/up
adb shell input keyevent 220 / 221
## Cut/Copy/Paste
adb shell input keyevent 277 / 278 / 279

0 -->  "KEYCODE_0" 
1 -->  "KEYCODE_SOFT_LEFT" 
2 -->  "KEYCODE_SOFT_RIGHT" 
3 -->  "KEYCODE_HOME" 
4 -->  "KEYCODE_BACK" 
5 -->  "KEYCODE_CALL" 
6 -->  "KEYCODE_ENDCALL" 
7 -->  "KEYCODE_0" 
8 -->  "KEYCODE_1" 
9 -->  "KEYCODE_2" 
10 -->  "KEYCODE_3" 
11 -->  "KEYCODE_4" 
12 -->  "KEYCODE_5" 
13 -->  "KEYCODE_6" 
14 -->  "KEYCODE_7" 
15 -->  "KEYCODE_8" 
16 -->  "KEYCODE_9" 
17 -->  "KEYCODE_STAR" 
18 -->  "KEYCODE_POUND" 
19 -->  "KEYCODE_DPAD_UP" 
20 -->  "KEYCODE_DPAD_DOWN" 
21 -->  "KEYCODE_DPAD_LEFT" 
22 -->  "KEYCODE_DPAD_RIGHT" 
23 -->  "KEYCODE_DPAD_CENTER" 
24 -->  "KEYCODE_VOLUME_UP" 
25 -->  "KEYCODE_VOLUME_DOWN" 
26 -->  "KEYCODE_POWER" 
27 -->  "KEYCODE_CAMERA" 
28 -->  "KEYCODE_CLEAR" 
29 -->  "KEYCODE_A" 
30 -->  "KEYCODE_B" 
31 -->  "KEYCODE_C" 
32 -->  "KEYCODE_D" 
33 -->  "KEYCODE_E" 
34 -->  "KEYCODE_F" 
35 -->  "KEYCODE_G" 
36 -->  "KEYCODE_H" 
37 -->  "KEYCODE_I" 
38 -->  "KEYCODE_J" 
39 -->  "KEYCODE_K" 
40 -->  "KEYCODE_L" 
41 -->  "KEYCODE_M" 
42 -->  "KEYCODE_N" 
43 -->  "KEYCODE_O" 
44 -->  "KEYCODE_P" 
45 -->  "KEYCODE_Q" 
46 -->  "KEYCODE_R" 
47 -->  "KEYCODE_S" 
48 -->  "KEYCODE_T" 
49 -->  "KEYCODE_U" 
50 -->  "KEYCODE_V" 
51 -->  "KEYCODE_W" 
52 -->  "KEYCODE_X" 
53 -->  "KEYCODE_Y" 
54 -->  "KEYCODE_Z" 
55 -->  "KEYCODE_COMMA" 
56 -->  "KEYCODE_PERIOD" 
57 -->  "KEYCODE_ALT_LEFT" 
58 -->  "KEYCODE_ALT_RIGHT" 
59 -->  "KEYCODE_SHIFT_LEFT" 
60 -->  "KEYCODE_SHIFT_RIGHT" 
61 -->  "KEYCODE_TAB" 
62 -->  "KEYCODE_SPACE" 
63 -->  "KEYCODE_SYM" 
64 -->  "KEYCODE_EXPLORER" 
65 -->  "KEYCODE_ENVELOPE" 
66 -->  "KEYCODE_ENTER" 
67 -->  "KEYCODE_DEL" 
68 -->  "KEYCODE_GRAVE" 
69 -->  "KEYCODE_MINUS" 
70 -->  "KEYCODE_EQUALS" 
71 -->  "KEYCODE_LEFT_BRACKET" 
72 -->  "KEYCODE_RIGHT_BRACKET" 
73 -->  "KEYCODE_BACKSLASH" 
74 -->  "KEYCODE_SEMICOLON" 
75 -->  "KEYCODE_APOSTROPHE" 
76 -->  "KEYCODE_SLASH" 
77 -->  "KEYCODE_AT" 
78 -->  "KEYCODE_NUM" 
79 -->  "KEYCODE_HEADSETHOOK" 
80 -->  "KEYCODE_FOCUS" 
81 -->  "KEYCODE_PLUS" 
82 -->  "KEYCODE_MENU" 
83 -->  "KEYCODE_NOTIFICATION" 
84 -->  "KEYCODE_SEARCH" 
85 -->  "KEYCODE_MEDIA_PLAY_PAUSE"
86 -->  "KEYCODE_MEDIA_STOP"
87 -->  "KEYCODE_MEDIA_NEXT"
88 -->  "KEYCODE_MEDIA_PREVIOUS"
89 -->  "KEYCODE_MEDIA_REWIND"
90 -->  "KEYCODE_MEDIA_FAST_FORWARD"
91 -->  "KEYCODE_MUTE"
92 -->  "KEYCODE_PAGE_UP"
93 -->  "KEYCODE_PAGE_DOWN"
94 -->  "KEYCODE_PICTSYMBOLS"
...
122 -->  "KEYCODE_MOVE_HOME"
123 -->  "KEYCODE_MOVE_END"
## https://developer.android.com/reference/android/view/KeyEvent.html


## ShPref
# replace org.example.app with your application id

# Add a value to default shared preferences.
adb shell 'am broadcast -a org.example.app.sp.PUT --es key key_name --es value "hello world!"'

# Remove a value to default shared preferences.
adb shell 'am broadcast -a org.example.app.sp.REMOVE --es key key_name'

# Clear all default shared preferences.
adb shell 'am broadcast -a org.example.app.sp.CLEAR --es key key_name'

# It's also possible to specify shared preferences file.
adb shell 'am broadcast -a org.example.app.sp.PUT --es name Game --es key level --ei value 10'

# Data types
adb shell 'am broadcast -a org.example.app.sp.PUT --es key string --es value "hello world!"'
adb shell 'am broadcast -a org.example.app.sp.PUT --es key boolean --ez value true'
adb shell 'am broadcast -a org.example.app.sp.PUT --es key float --ef value 3.14159'
adb shell 'am broadcast -a org.example.app.sp.PUT --es key int --ei value 2015'
adb shell 'am broadcast -a org.example.app.sp.PUT --es key long --el value 9223372036854775807'

# Restart application process after making changes
adb shell 'am broadcast -a org.example.app.sp.CLEAR --ez restart true'

## Monkey
 // monkey tool is generating 10.000 random events on the real device
adb shell monkey -p com.myAppPackage -v 10000 -s 100

## Paths
# app databases
/data/data/<package>/databases
# shared preferences
/data/data/<package>/shared_prefs/
# apk installed by user
/data/app
# pre-installed APK files
/system/app
# encrypted apps (App2SD)
/mmt/asec
# internal SD Card
/mmt/emmc
# external/Internal SD Card
/mmt/adcard
# external SD Card
/mmt/adcard/external_sd

## list directory contents
adb shell ls
## print size of each file
adb shell ls -s
## list subdirectories recursively
adb shell ls -R

## Device information
# print device state
adb get-state
# get the serial number
adb get-serialno
# get the IMEI
adb shell dumpsys iphonesybinfo
# list TCP connectivity
adb shell netstat
# print current working directory
adb shell pwd
# battery status
adb shell dumpsys battery
# list phone features
adb shell pm list features
# list all services
adb shell service list
# activity info
adb shell dumpsys activity <package>/<activity>
# print process status
adb shell ps
# displays the current screen resolution
adb shell wm size
# print current app's opened activity
dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'

## Package info
# list package names
adb shell list packages
# list package name + path to apks
adb shell list packages -r
# list third party package names
adb shell list packages -3
# list only system packages
adb shell list packages -s
# list package names + uninstalled
adb shell list packages -u
# list info on all apps)
adb shell dumpsys package packages
# list info on one package
adb shell dump <name>
# path to the apk file
adb shell path <package>

## Configure Settings Commands
# change the level from 0 to 100
adb shell dumpsys battery set level <n>
# change the level to unknown, charging, discharging, not charging or full
adb shell dumpsys battery set status<n>
# reset the battery
adb shell dumpsys battery reset
# change the status of USB connection. ON or OFF
adb shell dumpsys battery set usb <n>
# sets the resolution to WxH
adb shell wm size WxH


## Device Related Commands
# 
adb reboot-recovery (reboot device into recovery mode)
# 
adb reboot fastboot (reboot device into recovery mode)
# capture screenshot
adb shell screencap -p "/path/to/screenshot.png"
# record device screen
adb shell screenrecord "/path/to/record.mp4"
# backup settings and apps
adb backup -apk -all -f backup.ab
# backup settings, apps and shared storage
adb backup -apk -shared -all -f backup.ab
# backup only non-system apps
adb backup -apk -nosystem -all -f backup.ab
# restore a previous backup
adb restore backup.ab
# start activity intent
adb shell am start|startservice|broadcast <INTENT>[<COMPONENT>]
-a <ACTION> e.g. android.intent.action.VIEW
-c <CATEGORY> e.g. android.intent.category.LAUNCHER

# open URL
adb shell am start -a android.intent.action.VIEW -d URL
# opens gallery
adb shell am start -t image/* -a android.intent.action.VIEW

## Logs
# view device log
adb logcat [options] [filter] [filter]
# print bug reports
adb bugreport

## Other
# Create a full backup of your phone and save to the computer.
adb backup
# Restore a backup to your phone.
adb restore
#  Push and flash custom ROMs and zips from your computer.
adb sideload

fastboot devices
## Check connection and get basic information about devices connected to the computer.
## This is essentially the same command as adb devices from earlier. 
## However, it works in the bootloader, which ADB does not. Handy for ensuring that you have properly established a connection.

## Shared Preferences
# replace org.example.app with your application id
# Add a value to default shared preferences.
adb shell 'am broadcast -a org.example.app.sp.PUT --es key key_name --es value "hello world!"'

# Remove a value to default shared preferences.
adb shell 'am broadcast -a org.example.app.sp.REMOVE --es key key_name'

# Clear all default shared preferences.
adb shell 'am broadcast -a org.example.app.sp.CLEAR --es key key_name'

# It's also possible to specify shared preferences file.
adb shell 'am broadcast -a org.example.app.sp.PUT --es name Game --es key level --ei value 10'

# Data types
adb shell 'am broadcast -a org.example.app.sp.PUT --es key string --es value "hello world!"'
adb shell 'am broadcast -a org.example.app.sp.PUT --es key boolean --ez value true'
adb shell 'am broadcast -a org.example.app.sp.PUT --es key float --ef value 3.14159'
adb shell 'am broadcast -a org.example.app.sp.PUT --es key int --ei value 2015'
adb shell 'am broadcast -a org.example.app.sp.PUT --es key long --el value 9223372036854775807'

# Restart application process after making changes
adb shell 'am broadcast -a org.example.app.sp.CLEAR --ez restart true'
## Few bash snippets
# @Source (https://jonfhancock.com/bash-your-way-to-better-android-development-1169bc3e0424)

## Using tail -n
# Use tail to remove the first line. Actually two lines. The first one is just a newline. The second is “List of devices attached.”
$ adb devices | tail -n +2

## Using cut -sf
# Cut the last word and any white space off the end of each line.
$ adb devices | tail -n +2 | cut -sf -1

## Using xargs -I
# Given the -I option, xargs will perform an action for each line of text that we feed into it.
# We can give the line a variable name to use in commands that xargs can execute.
$ adb devices | tail -n +2 | cut -sf -1 | xargs -I X echo X aw yiss

## Three options below together
# Will print android version of all connected devices
adb devices | tail -n +2 | cut -sf -1 | xargs -I X adb -s X shell getprop ro.build.version.release  

## Using alias

## - Example 1 
alias tellMeMore=echo
tellMeMore "hi there"
Output => hi there

## - Example 2
# Install an apk on all devices
# Define alias
alias apkinstall="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X install -r $1"
# And you can use it later 
apkinstall ~/Downloads/MyAppRelease.apk

## - Example 3
# Uninstall a package from all devices
alias rmapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X uninstall $1"
rmapp com.example.myapp

## - Example 4
alias clearapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell pm clear $1"
clearapp com.example.myapp  // Clear data on all devices (leave installed)

## - Example 5
# Launch a deep link on all devices
alias startintent="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell am start $1"
startintent https://twitter.com/JonFHancock


## Setting up your .bash_profile
# Finally, to make this all reusable even after rebooting your computer (aliases only last through the current session), we have to add these to your .bash_profile. # You might or might not already have a .bash_profile, so let’s make sure we append to it rather than overwriting it. Just open a terminal, and run the following command

touch .bash_profile && open .bash_profile

# This will create it if it doesn’t already exist, and open it in a text editor either way. Now just copy and paste all of the aliases into it, save, and close.

alias startintent="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell am start $1"
alias apkinstall="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X install -r $1"
alias rmapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X uninstall $1"
alias clearapp="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X shell pm clear $1"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment