ADB Commands
Android ADB Cheat Sheet
ADB, Android Debug Bridge, is a command-line utility included with Google's Android SDK. ADB can control your device over USB from a computer, copy files back and forth, install and uninstall apps, run shell commands, and more. ADB is a powerful tool that can be used to control your Android device from a computer. Below are some of the most common commands you can use with ADB and their usage. You can find more information about ADB and its usage by visiting the official website.
Common ADB Commands¶
Push a file to Download folder of the Android Device¶
adb push example.apk /mnt/sdcard/Download/ Lists all the installed packages and get the full paths¶
adb shell pm list packages -f Pulls a file from android device¶
adb pull /mnt/sdcard/Download/example.apk Install apk from host to Android device¶
adb shell install example.apk Install apk from Android device storage¶
adb shell install /mnt/sdcard/Download/example.apk Set network proxy¶
adb shell settings put global http_proxy <address>:<port> Disable network proxy
adb shell settings put global http_proxy :0
ADB Basics Commands¶
Command Description
adb devices Lists connected devices
adb connect 192.168.2.1 Connects to adb device over network
adb root Restarts adbd with root permissions
adb start-server Starts the adb server
adb kill-server Kills the adb server
adb reboot Reboots the device
adb devices -l List of devices by product/model
adb -s <deviceName> <command> Redirect command to specific device
adb –d <command> Directs command to only attached USB device
adb –e <command> Directs command to only attached emulator
Logs¶
Command Description
adb logcat [options] [filter] [filter] View device log
adb bugreport Print bug reports
Permissions¶
Command Description
adb shell permissions groups List permission groups definitions
adb shell list permissions -g -r List permissions details
Package Installation¶
Command Description
adb shell install <apk> Install app
adb shell install <path> Install app from phone path
adb shell install -r <path> Install app from phone path
adb shell uninstall <name> Remove the app
Paths¶
Command Description
/data/data/<package name>/databases App databases
/data/data/<package name>/shared_prefs/ Shared preferences
/mnt/sdcard/Download/ Download folder
/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
-----------
adb shell ls List directory contents adb shell ls -s Print size of each file adb shell ls -R List subdirectories recursively adb shell pm path <package name> Get full path of a package adb shell pm list packages -f Lists all the packages and full paths
File Operations¶
Command Description adb push <local> <remote> Copy file/dir to device adb pull <remote> <local> Copy file/dir from device run-as <package> cat <file> Access the private package files Phone Info¶ Command Description 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
Package Info¶
Command Description adb shell list packages Lists package names adb shell list packages -r Lists package name + path to apks adb shell list packages -3 Lists third party package names adb shell list packages -s Lists only system packages adb shell list packages -u Lists package names + uninstalled adb shell dumpsys package packages Lists info on all apps adb shell dump <name> Lists info on one package adb shell path <package> Path to the apk file
Device Related Commands¶
Command Description 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 -a android.intent.action.VIEW -d URL Opens URL adb shell am start -t image/* -a android.intent.action.VIEW Opens gallery Comments
WSL Support
Environment Automatically for WSL
Setup TCP port forwarding
We can use socat to do port forwarding if the local and remote machine are in the same network and can connect directly. We can also use ssh to do port forwarding if we can access remote machine with ssh. Don’t forget to configure firewall if exists.
For WSL, we chose socat to do port forwarding. Run in WSL:
- get host Windows IP
HOST_IP=`cat /etc/resolv.conf | tail -n1 | cut -d " " -f 2`
- start socat port forward
socat TCP-LISTEN:5037,reuseaddr,fork TCP:${HOST_IP}:5037
For remote Linux machine, we chose ssh to do port forwarding. Run in local Linux machine:
- change this to your remote Linux machine user and address, make sure you have already configured ssh key, or you can input password manaully
USER='root' HOST='192.168.1.100'
ssh -R 5037:localhost:5037 -f -N $USER@$HOST -o ServerAliveInterval=240
Install adb on Windows and change $WSL_HOST_ADB to the adb location following the example format. Install adb and socat on WSL. Make sure you are using the same adb in terminal and Android Studio. And make sure you installed the same version of adb in Windows and WSL. Add the following content to your WSL ~/.bashrc and run source ~/.bashrc to refresh. Run wsl-start-adb-daemon / wsl-stop-adb-daemon to start/stop adb environment.
WSL_HOST_ADB='/mnt/d/AndroidSdk/platform-tools/adb.exe'
wsl-start-adb-daemon() {
if ! [ -x "$(command -v socat)" ]; then echo 'Please install socat first:' >&2 echo 'sudo apt update && sudo apt install -y socat' return 1 fi
# stop service wsl-stop-adb-daemon echo
echo "Get adb devices on host..." $WSL_HOST_ADB devices sleep 1 $WSL_HOST_ADB kill-server sleep 1
local HOST_IP=`cat /etc/resolv.conf | tail -n1 | cut -d " " -f 2`
echo "Start services..." nohup $WSL_HOST_ADB -a nodaemon server start > /dev/null 2>&1 & nohup socat TCP-LISTEN:5037,reuseaddr,fork TCP:${HOST_IP}:5037 > /dev/null 2>&1 & sleep 1 echo "Forward adb to ${HOST_IP}:5037." echo
echo "Get adb devices..." adb devices
}
wsl-stop-adb-daemon() {
echo "Kill running processes..." pkill -9 socat
# $WSL_HOST_ADB kill-server > /dev/null 2>&1 # adb kill-server > /dev/null 2>&1
pkill -9 adb.exe pkill -9 adb sleep 1 echo "Complete"
}
Start the Environment Automatically for Remote Linux Machine
Usage
Setup ssh key for remote machine. Install adb on local machine. Install adb on remote machine and change REMOTE_ADB_PATH value to the adb location. Make sure you are using the same adb in terminal and Android Studio. And make sure you installed the same version of adb in local and remote machine. Add the following content to your local ~/.bashrc and run source ~/.bashrc to refresh. Run startRemoteAdb USER HOST / stopRemoteAdb USER HOST to start/stop adb environment.
REMOTE_ADB_PATH='$HOME/Android/Sdk/platform-tools/adb'
_remoteCmd() {
local USER=$1 local HOST=$2 ssh $USER@$HOST $3
}
_remoteAdb() {
local USER=$1 local HOST=$2 _remoteCmd $USER $HOST "$REMOTE_ADB_PATH $3"
}
startRemoteAdb() {
if [ $# -ne 2 ]; then echo 'Usage: startRemoteAdb USER HOST' echo 'Example: startRemoteAdb jzj 192.168.5.200' return 1 fi
local USER=$1 local HOST=$2
stopRemoteAdb $USER $HOST echo
echo 'Get adb devices on local...' adb devices sleep 1 adb kill-server sleep 1
echo 'Start services...' nohup adb -a nodaemon server start > /dev/null 2>&1 & ssh -R 5037:localhost:5037 -f -N $USER@$HOST -o ServerAliveInterval=240
sleep 1 echo "Forward localhost:5037 to $HOST:5037." echo
echo 'Remote get adb devices...' _remoteAdb $USER $HOST devices
}
stopRemoteAdb() {
local USER=$1 local HOST=$2
echo 'Kill running processes...' _remoteAdb $USER $HOST kill-server adb kill-server # kill ssh command which contains 5037 ps -lef | grep ssh | grep 5037 | awk "{print \$2}" | xargs kill
sleep 1 echo 'Complete'
}
For WSL ADB kill:
Run in windows:
adb kill-server
Run in WSL:
adb kill-server
- kill adb process
pkill -9 adb
- kill Windows adb.exe process in WSL
pkill -9 adb.exe
- kill socat process
pkill -9 socat
For remote linux machine adb kill:
Run in local:
adb kill-server
- kill adb process
pkill -9 adb
- kill ssh command which contains 5037 (used for port forward)
ps -lef | grep ssh | grep 5037 | awk "{print \$2}" | xargs kill
Run in remote:
adb kill-server pkill -9 adb