Post

유용한 ADB 명령어

유용한 ADB 명령어

ADB 명령어 모음

Adb help

1
$ adb help // List all comands

Adb Server

1
2
$ adb kill-server
$ adb start-server 

Adb Reboot

1
2
3
4
$ adb reboot
$ adb reboot recovery 
$ adb reboot-bootloader
$ adb root //restarts adb with root permissions

Shell

1
$ adb shell    // Open or run commands in a terminal on the host Android device.

Devices

1
2
3
4
$ adb usb
$ adb devices   //show devices attached
$ adb devices -l //devices (product/model)
$ adb connect ip_address_of_device

Get device android version

1
$ adb shell getprop ro.build.version.release 

LogCat

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

Files

1
2
3
$ adb push [source] [destination]    // Copy files from your computer to your phone.
$ adb pull [device file location] [local file location] // Copy files from your phone to your computer.

App install

1
2
3
4
5
6
7
8
9
10
$ 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:

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

Uninstalling app from device

1
2
3
4
5
6
7
8
9
$ 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
$ adb shell pm clear [package] // Deletes all data associated with a package.

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

Update app

1
2
$ adb install -r yourApp.apk  //  -r means re-install the app and keep its data on the device.
$ adb install –k <.apk file path on computer> 

Home button

1
$ adb shell am start -W -c android.intent.category.HOME -a android.intent.action.MAIN

Activity Manager

1
2
3
4
5
6
7
$ adb shell am start -a android.intent.action.VIEW
$ adb shell am broadcast -a 'my_action'

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

// 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

1
2
3
4
$ adb shell pm reset-permissions -p your.app.package 
$ adb shell pm grant [packageName] [ Permission]  // Grant a permission to an app. 
$ adb shell pm revoke [packageName] [ Permission]   // Revoke a permission from an app.

Emulate device

1
2
$ adb shell wm size 2048x1536
$ adb shell wm density 288

And reset to default

1
2
$ adb shell wm size reset
$ adb shell wm density reset
1
$ adb shell input text 'Wow, it so cool feature'

Screenshot

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ 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

1
2
3
4
5
6
7
8
9
10
11
12
$ adb shell input keyevent 3 // Home btn
$ adb shell input keyevent 4 // Back btn
$ adb shell input keyevent 5 // Call
$ adb shell input keyevent 6 // End call
$ adb shell input keyevent 26  // Turn Android device ON and OFF. It will toggle device to on/off status.
$ adb shell input keyevent 27 // Camera
$ adb shell input keyevent 64 // Open browser
$ adb shell input keyevent 66 // Enter
$ adb shell input keyevent 67 // Delete (backspace)
$ adb shell input keyevent 207 // Contacts
$ adb shell input keyevent 220 / 221 // Brightness down/up
$ adb shell input keyevent 277 / 278 /279 // Cut/Copy/Paste
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
96
97
98
99
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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

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

Paths

1
2
3
4
5
6
7
8
/data/data/<package>/databases (app databases)
/data/data/<package>/shared_prefs/ (shared preferences)
/data/app (apk installed by user)
/system/app (pre-installed APK files)
/mmt/asec (encrypted apps) (App2SD)
/mmt/emmc (internal SD Card)
/mmt/adcard (external/Internal SD Card)
/mmt/adcard/external_sd (external SD Card)
1
2
3
$ adb shell ls (list directory contents)
$ adb shell ls -s (print size of each file)
$ adb shell ls -R (list subdirectories recursively)

Device onformation

1
2
3
4
5
6
7
8
9
10
11
12
$ adb get-statе (print device state)
$ adb get-serialno (get the serial number)
$ adb shell dumpsys iphonesybinfo (get the IMEI)
$ adb shell netstat (list TCP connectivity)
$ adb shell pwd (print current working directory)
$ adb shell dumpsys battery (battery status)
$ adb shell pm list features (list phone features)
$ adb shell service list (list all services)
$ adb shell dumpsys activity <package>/<activity> (activity info)
$ adb shell ps (print process status)
$ adb shell wm size (displays the current screen resolution)
dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp' (print current app's opened activity)

Package info

1
2
3
4
5
6
7
8
$ adb shell list packages (list package names)
$ adb shell list packages -r (list package name + path to apks)
$ adb shell list packages -3 (list third party package names)
$ adb shell list packages -s (list only system packages)
$ adb shell list packages -u (list package names + uninstalled)
$ adb shell dumpsys package packages (list info on all apps)
$ adb shell dump <name> (list info on one package)
$ adb shell path <package> (path to the apk file)

Configure Settings Commands

1
2
3
4
5
$ adb shell dumpsys battery set level <n> (change the level from 0 to 100)
$ adb shell dumpsys battery set status<n> (change the level to unknown, charging, discharging, not charging or full)
$ adb shell dumpsys battery reset (reset the battery)
$ adb shell dumpsys battery set usb <n> (change the status of USB connection. ON or OFF)
$ adb shell wm size WxH (sets the resolution to WxH)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ adb reboot-recovery (reboot device into recovery mode)
$ adb reboot fastboot (reboot device into recovery mode)
$ adb shell screencap -p "/path/to/screenshot.png" (capture screenshot)
$ adb shell screenrecord "/path/to/record.mp4" (record device screen)
$ adb backup -apk -all -f backup.ab (backup settings and apps)
$ adb backup -apk -shared -all -f backup.ab (backup settings, apps and shared storage)
$ adb backup -apk -nosystem -all -f backup.ab (backup only non-system apps)
$ adb restore backup.ab (restore a previous backup)
$ adb shell am start|startservice|broadcast <INTENT>[<COMPONENT>]
-a <ACTION> e.g. android.intent.action.VIEW
-c <CATEGORY> e.g. android.intent.category.LAUNCHER (start activity intent)

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

Logs

1
2
$ adb logcat [options] [filter] [filter] (view device log)
$ adb bugreport (print bug reports)

Other

1
2
3
4
5
6
7
8
$ adb backup // Create a full backup of your phone and save to the computer.
$ adb restore // Restore a backup to your phone.
$ adb sideload //  Push and flash custom ROMs and zips from your computer.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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

1
2
//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

1
2
// 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

1
2
3
// 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

1
2
// Will print android version of all connected devices
ad$ b devices | tail -n +2 | cut -sf -1 | xargs -I X adb -s X shell getprop ro.build.version.release  

Using alias

Example 1

1
$ alias tellMeMore=echo tellMeMore "hi there" Output => hi there

Example 2

1
2
3
4
// 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  // Install an apk on all devices

Example 3

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

Example 4

1
2
$ 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

1
2
$ 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 // Launch a deep link on all devices
1
2
3
4
5
6
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.
1
2
3
4
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"

Reference

출처는 여기를 참고했습니다.

This post is licensed under CC BY 4.0 by the author.
If you find any errors, please let me know by comment or email. Thank you.

© Ruffalo. Some rights reserved.

I'm

Using the Chirpy theme for Jekyll.