Android Debug Bridge

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

The Android Debug Bridge (ADB) is a command-line tool that can be used to install, uninstall and debug apps, transfer files and access the device's shell.

Installation

ADB is part of the Platform-Tools SDK package and the android-tools package.

Usage

Connect device

Tip:
  • For some devices, you may have to enable MTP on the device, before ADB will work. Some other devices require enable PTP mode to work.
  • Many devices' udev rules are included in libmtp, so if you have this installed, the following steps may not be necessary.
  • Make sure your USB cable is capable of both charge and data. Many USB cables bundled with mobile devices do not include the USB data pin.

To connect to a real device or phone via ADB under Arch, you must:

  1. You might want to install android-udev if you wish to connect the device to the proper /dev/ entries.
  2. plug in your android device via USB.
  3. Enable USB Debugging on your phone or device:
    • Jelly Bean (4.2) and newer: Go to Settings > About Phone tap Build Number 7 times until you get a popup that you have become a developer. Build number may be under a menu called Software info on newer Android OS versions. Then go to Settings > Developer > USB debugging and enable it. The device will ask to allow the computer with its fingerprint to connect. Allowing it permanently will copy ~/.android/adbkey.pub onto the devices /data/misc/adb/adb_keys folder.
    • Older versions: This is usually done from Settings > Applications > Development > USB debugging. Reboot the phone after checking this option to make sure USB debugging is enabled.

If ADB recognizes your device (adb devices shows it as "device" and not as "unauthorized", or it is visible and accessible in IDE), you are done. Otherwise see the instructions below.

Figure out device IDs

Each Android device has a USB vendor/product ID. An example for HTC Evo is:

vendor id: 0bb4
product id: 0c8d

Plug in your device and execute:

$ lsusb

It should come up something like this:

Bus 002 Device 006: ID 0bb4:0c8d High Tech Computer Corp.

Adding udev rules

Use the rules from android-udev (or android-udev-gitAUR), install them manually from Android developer, or use the following template for your udev rules, just replace [VENDOR ID] and [PRODUCT ID] with yours. Copy these rules into /etc/udev/rules.d/51-android.rules:

/etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="[VENDOR ID]", MODE="0660", GROUP="adbusers"
SUBSYSTEM=="usb",ATTR{idVendor}=="[VENDOR ID]",ATTR{idProduct}=="[PRODUCT ID]",SYMLINK+="android_adb"
SUBSYSTEM=="usb",ATTR{idVendor}=="[VENDOR ID]",ATTR{idProduct}=="[PRODUCT ID]",SYMLINK+="android_fastboot"

Then, to reload your new udev rules, execute:

# udevadm control --reload-rules

Make sure you are member of adbusers user group to access adb devices.

Detect the device

After you have setup the udev rules, unplug your device and replug it.

After running:

$ adb devices

you should see something like:

List of devices attached 
HT07VHL00676    device

If adb still does not detect the device after plugging your device back in, kill and restart the adb server as root and check devices again:

# adb kill-server
# adb start-server
$ adb devices

If adb devices still shows "unauthorized" next to your device, make sure that that device has debugging permission allowed on the device itself. A 'Allow USB Debugging?' dialog should be presented when you physically connect the device. Select 'Always Allow...", then tap "OK". If the dialog was never presented, try Settings > Developer Options > Revoke USB Debugging Authorizations (then "OK"), and repeat the steps in this section. If you still do not see the 'Allow USB Debugging?' dialog, and the device is listed as unauthorized, then enter the Developer Options on the device and first uncheck "USB Debugging" and then check it again.

Transferring files

You can now use adb to transfer files between the device and your computer. To transfer files to the device, use

$ adb push <what-to-copy> <where-to-place>

To transfer files from the device, use

$ adb pull <what-to-pull> <where-to-place>

Also see #Tools building on ADB.

Backup and restore

You can also backup and restore your device with adb. Moreover, no root is required to follow the process. The commands below led to backup your device to a single file which can also be successively restored.

The command to create a backup is

$ adb backup -apk -shared -all -f backupFileName.ab

The command parameters list is

adb backup [-f <file>] [-apk|-noapk] [-shared|-noshared] [-all] [-system|nosystem] [<packages...>]

Then confirm the process on your device's display and provide a password whether a backup password has been set before.

The command to restore a previous backup is

$ adb restore mybackup.ab
Note: Remember that restoring replaces your device contents with the backup.

Tips and tricks

Bash completion

In order to enable Bash completion, install one of the following:

Tools building on ADB

Troubleshooting

Empty device list

A possible cause for your device not showing up is not having enabled USB debugging on your device. You can do that by going to Settings > Applications > Development and enabling USB debugging. Since Android 4.2 (Jelly Bean), the development menu is hidden; to enable it go to Settings > About phone and tap Build number 7 times.

No permissions error

If the device shows up with a "no permissions" label, it probably has a different vendor/product ID with respect to the ones collected by android-udev.

This can happen for instance when the device uses a custom ROM, or when it is switched from MTP to USB tethering mode, sideload and/or fastboot mode. Verify the actual device's ID with lsusb and add the appropriate udev rules as described above.