Guide
adb or MTP: two ways to move files over the same cable
An Android phone offers its files to a computer in two ways. One is for everyone and needs no setup. The other is for developers, needs one switch, and does a great deal more.
MTP is what you get when you choose File Transfer in the phone's USB settings. It needs nothing else, works with any computer that has an MTP app, and shows the phone's files as a list to drag in and out of. adb, the Android Debug Bridge, is the protocol of Android's developer tools. It needs USB debugging turned on once, and in return it gives a computer a file copying service, a shell on the phone, and anything built on those.
For a few photos on a borrowed computer, MTP is the easy choice. For Terminal, scripts, large folders, files over 4 GB, or a phone you want to treat as a drive, adb is the stronger one. Neither is built into macOS, so on a Mac both come through an app or a download.
What MTP is
MTP, the Media Transfer Protocol, began at Microsoft as an extension of the camera protocol PTP, and Android has used it for USB file transfer since 2011. The phone keeps control of its storage and offers every file and folder as a numbered object. The computer asks for a list, then for each object, one operation at a time. MTP explained goes into how it works and why a Mac cannot mount it on its own.
What adb is
adb is part of Google's SDK Platform-Tools, a free download for macOS, Windows and Linux. It has three parts: the adb command you type, a server that runs in the background on the computer, and a daemon on the phone that answers it. You do not need Android Studio. On a Mac with Homebrew, one command installs it:
brew install --cask android-platform-tools
With the phone connected and allowed, these are the commands that matter for files:
adb devices
adb pull /sdcard/DCIM/Camera ~/Pictures/Phone
adb push ~/Music/Album /sdcard/Music/
adb shell ls -l /sdcard/Download
adb pull copies a file or a whole folder from the phone, adb push copies one to it, and adb shell runs a command on the phone, or opens an interactive shell if you give it none.
What each needs on the phone
MTP: File Transfer mode
- Unlock the phone and connect the cable.
- Tap the Charging this device via USB notification.
- Under Use USB for, choose File Transfer. On a Pixel it reads File transfer / Android Auto.
Most phones go back to charging only the next time you plug in. If you would rather they did not, Developer options has a Default USB configuration setting.
adb: USB debugging
- Open Settings > About phone and tap Build number seven times. On a Samsung it is under About phone > Software information.
- In the new Developer options, turn on USB debugging.
- Connect the cable. The phone asks Allow USB debugging? and shows the computer's RSA key fingerprint. Tick Always allow from this computer and tap Allow.
Makers move these menus around, so how to turn on USB debugging has the steps for Samsung, Pixel, Xiaomi, OnePlus and Motorola.
Is USB debugging safe?
USB debugging is safer than its name suggests, as long as you only allow computers you own. Since Android 4.2.2, a phone will not take a single adb command from a computer until someone has unlocked it and accepted that computer's key.
- Every computer has its own key. adb makes an RSA key pair the first time it runs. Google's adb keeps it on a Mac in
~/.android/adbkey. The fingerprint in the prompt is that key's. - The phone remembers the keys you allow. A computer it does not know gets nothing.
adb deviceslists the phone asunauthorizeduntil you tap Allow. - An allowed computer can do a lot. It can read and write the phone's shared storage, install apps and run shell commands. The shell runs as a limited user, so it cannot read other apps' private data, but treat the approval like handing over your unlocked phone.
- Approvals can expire. Since Android 11, the phone forgets a computer that has not reconnected within seven days by default, unless you turn on Disable adb authorization timeout.
- You can take them all back. Revoke USB debugging authorizations in Developer options forgets every computer at once. Turning USB debugging off closes the door entirely until you turn it on again.
MTP has a simpler model: the phone must be unlocked, and whoever holds the cable gets the shared storage while File Transfer is on. There is no per-computer approval.
What each can do
| An MTP app | adb in Terminal | SideMount (adb in Finder) | |
|---|---|---|---|
| On the phone | File Transfer, chosen when you plug in | USB debugging, turned on once | USB debugging, turned on once |
| Copy files both ways | Yes | Yes | Yes |
| Files over 4 GB | Depends on the app | Yes | Yes |
| Open a file in place from any Mac app | Only an app that mounts the phone | No, pull it first | Yes |
| Terminal, scripts and rsync | No | Its own commands, no rsync | Yes, on the volume |
| Shell on the phone, app installs | No | Yes | No |
| Over Wi-Fi | No | Yes, Android 11 or later | Yes, Android 11 or later |
MTP's object model is the reason for most of the left-hand column. It hands out whole objects by number, one operation at a time, which suits dragging files in and out of a window. adb's file service works with paths, which is what Terminal and scripts expect, and its shell lets you find, move and delete files on the phone without copying anything.
One thing they share: only one program at a time can hold a phone. A single MTP session, or a single adb connection. If an MTP app is open, another one cannot connect, and only one adb server can hold a phone at once.
Which to use when
- A handful of photos, or a computer you do not own. MTP. Nothing to switch on, and nothing to revoke afterwards.
- A work phone with Developer options locked. MTP, because adb is not available to you.
- Large folders, files over 4 GB, or anything you want to script. adb.
adb pullandadb pushtake whole folders, and the shell can tidy up on the phone. - The phone as a drive in Finder. An app that builds a volume. SideMount is the adb route made into a Finder volume: it speaks adb itself over the cable, so there is no adb server or Platform-Tools to install, and every Mac app can open, save and copy files on the phone in place. It needs macOS 26 or later. MacDroid also mounts phones in Finder, over MTP or adb.
If you use both SideMount and your own adb, they take turns: quit your adb server before mounting, and ejecting the phone in Finder gives it back to your adb. The setup guide walks through the first connection, and every way to move files between Android and a Mac covers the wireless options too.
Questions
Is adb faster than MTP?
Not by nature. On a modern phone with a USB 3 cable, both move large files quickly, and the app on the computer makes more difference than the protocol. A USB 2 phone or cable caps either at about 20 to 40 MB/s.
Do I need Android Studio to use adb?
No. adb comes in Google's SDK Platform-Tools, a small separate download, or through Homebrew with brew install --cask android-platform-tools. Some Mac apps speak adb themselves and need neither.
Can someone copy my files through USB debugging?
Only from a computer the phone has already allowed. A new computer needs the phone unlocked and its "Allow USB debugging?" prompt accepted. To be sure, use "Revoke USB debugging authorizations" in Developer options, or turn USB debugging off when you do not need it.
Why does adb devices say unauthorized?
The phone has not accepted this computer's key yet. Unlock it and look for the "Allow USB debugging?" prompt. If none appears, revoke the authorizations in Developer options and plug in again so the phone asks afresh.