Руководство
adb или MTP: два способа передавать файлы по одному кабелю
Телефон Android отдаёт свои файлы компьютеру двумя способами. Первый для всех и не требует настройки. Второй для разработчиков, требует одного переключателя и умеет гораздо больше.
MTP вы получаете, когда выбираете Передача файлов в настройках USB на телефоне. Больше ему ничего не нужно: он работает с любым компьютером, где есть приложение для MTP, и показывает файлы телефона списком, в который и из которого их можно перетаскивать. adb, или Android Debug Bridge, служит протоколом инструментов разработчика Android. Для него нужно один раз включить параметр Отладка по USB, а взамен компьютер получает службу копирования файлов, оболочку на телефоне и всё, что построено на них.
Для нескольких фото на чужом компьютере проще MTP. Для Терминала, скриптов, больших папок, файлов больше 4 GB или телефона, с которым хочется работать как с диском, сильнее adb. Ни тот ни другой не встроен в macOS, так что на Mac оба приходят через приложение или отдельную загрузку.
Что такое MTP
MTP, Media Transfer Protocol, появился в Microsoft как расширение протокола камер PTP, и Android использует его для передачи файлов по USB с 2011 года. Телефон сохраняет контроль над своей памятью и предлагает каждый файл и каждую папку как пронумерованный объект. Компьютер запрашивает список, затем каждый объект, по одной операции за раз. В статье об устройстве MTP рассказано, как он работает и почему Mac не может смонтировать его сам.
Что такое adb
adb входит в SDK Platform-Tools от Google, бесплатную загрузку для macOS, Windows и Linux. У него три части: команда adb, которую вы вводите, сервер, который работает в фоне на компьютере, и демон на телефоне, который ему отвечает. Android Studio не нужен. На Mac с Homebrew его устанавливает одна команда:
brew install --cask android-platform-tools
Когда телефон подключён и разрешил доступ, для работы с файлами важны вот эти команды:
adb devices
adb pull /sdcard/DCIM/Camera ~/Pictures/Phone
adb push ~/Music/Album /sdcard/Music/
adb shell ls -l /sdcard/Download
adb pull копирует файл или целую папку с телефона, adb push копирует их на телефон, а adb shell выполняет команду на телефоне или открывает интерактивную оболочку, если команду не указать.
Что каждому нужно на телефоне
MTP: режим передачи файлов
- Разблокируйте телефон и подключите кабель.
- Нажмите на уведомление Зарядка устройства через USB.
- В разделе Режим работы USB выберите Передача файлов. На Pixel этот пункт называется Передача файлов / Android Auto (File transfer / Android Auto).
Большинство телефонов при следующем подключении снова переходят в режим зарядки. Если вам это не нужно, в разделе «Для разработчиков» есть настройка Конфигурация USB по умолчанию.
adb: отладка по USB
- Откройте Настройки > О телефоне и нажмите Номер сборки семь раз. На Samsung этот пункт находится в разделе Сведения о телефоне > Сведения о ПО.
- В появившемся разделе Для разработчиков включите параметр Отладка по USB.
- Подключите кабель. Телефон покажет запрос Отладка по USB с отпечатком RSA-ключа компьютера. Отметьте Всегда разрешать отладку с этого компьютера и нажмите Разрешить.
Производители переставляют эти меню, поэтому в статье о том, как включить отладку по USB, есть шаги для Samsung, Pixel, Xiaomi, OnePlus и Motorola.
Безопасна ли отладка по USB?
Отладка по USB безопаснее, чем звучит её название, если разрешать доступ только своим компьютерам. Начиная с Android 4.2.2 телефон не выполнит ни одной команды adb от компьютера, пока кто-нибудь не разблокирует его и не примет ключ этого компьютера.
- У каждого компьютера свой ключ. При первом запуске adb создаёт пару ключей RSA. adb от Google хранит её на Mac в
~/.android/adbkey. Отпечаток в запросе принадлежит именно этому ключу. - Телефон запоминает разрешённые ключи. Незнакомый компьютер не получает ничего.
adb devicesпоказывает телефон какunauthorized, пока вы не нажмёте «Разрешить». - Разрешённый компьютер может многое. Он может читать и записывать общую память телефона, устанавливать приложения и выполнять команды в оболочке. Оболочка работает от имени пользователя с ограниченными правами, поэтому не может читать личные данные других приложений, но относитесь к разрешению так, будто отдаёте свой разблокированный телефон.
- Разрешения могут истекать. Начиная с Android 11 телефон по умолчанию забывает компьютер, который не подключался семь дней, если не включить параметр Отключить автоматический отзыв авторизации adb.
- Их можно отозвать все сразу. Пункт Отозвать доступ для отладки по USB в разделе «Для разработчиков» забывает все компьютеры одновременно. А если выключить отладку по USB, дверь закрыта полностью, пока вы не включите её снова.
У MTP модель проще: телефон должен быть разблокирован, и тот, у кого в руках кабель, получает общую память, пока включена передача файлов. Отдельного разрешения для каждого компьютера нет.
Что умеет каждый
| Приложение для MTP | adb в Терминале | SideMount (adb в Finder) | |
|---|---|---|---|
| На телефоне | Передача файлов, выбирается при подключении | Отладка по USB, включается один раз | Отладка по USB, включается один раз |
| Копирование в обе стороны | Да | Да | Да |
| Файлы больше 4 GB | Зависит от приложения | Да | Да |
| Открыть файл на месте из любого приложения Mac | Только в приложении, которое монтирует телефон | Нет, сначала pull | Да |
| Терминал, скрипты и rsync | Нет | Свои команды, без rsync | Да, на томе |
| Оболочка на телефоне, установка приложений | Нет | Да | Нет |
| По Wi-Fi | Нет | Да, Android 11 или новее | Да, Android 11 или новее |
Объектная модель MTP объясняет большую часть первого столбца. Она выдаёт объекты целиком по номеру, по одной операции за раз, а это удобно для перетаскивания файлов в окно и из окна. Файловая служба adb работает с путями, чего и ждут Терминал и скрипты, а его оболочка позволяет находить, перемещать и удалять файлы на телефоне, ничего не копируя.
Общее у них одно: держать телефон одновременно может только одна программа. Одна сессия MTP или одно подключение adb. Если открыто одно приложение для MTP, другое подключиться не сможет, и держать телефон в каждый момент может только один сервер adb.
Что выбрать и когда
- Горстка фото или чужой компьютер. MTP. Ничего не нужно включать и потом отзывать.
- Рабочий телефон, на котором заблокирован раздел «Для разработчиков». MTP, потому что adb вам недоступен.
- Большие папки, файлы больше 4 GB или всё, что хочется автоматизировать скриптами. adb.
adb pullиadb pushпринимают целые папки, а в оболочке можно навести порядок прямо на телефоне. - Телефон как диск в Finder. Приложение, которое создаёт том. SideMount превращает путь через adb в том Finder: он сам говорит на adb по кабелю, поэтому не нужно ставить ни сервер adb, ни Platform-Tools, и любое приложение на Mac может открывать, сохранять и копировать файлы прямо на телефоне. Ему нужна macOS 26 или новее. MacDroid тоже монтирует телефоны в Finder, через MTP или adb.
Если вы пользуетесь и SideMount, и своим adb, они работают по очереди: остановите свой сервер adb перед монтированием, а извлечение телефона в Finder возвращает его вашему adb. Руководство по настройке проводит через первое подключение, а в статье обо всех способах передать файлы между Android и Mac есть и беспроводные варианты.
Вопросы
adb быстрее MTP?
Сам по себе нет. На современном телефоне с кабелем USB 3 оба быстро передают большие файлы, и приложение на компьютере значит больше, чем протокол. Телефон или кабель с USB 2 ограничивают любой из них примерно от 20 до 40 MB/s.
Нужен ли Android Studio, чтобы пользоваться adb?
Нет. adb входит в SDK Platform-Tools от Google, небольшую отдельную загрузку, или ставится через Homebrew командой brew install --cask android-platform-tools. Некоторые приложения для Mac сами говорят на adb, и им не нужно ни то ни другое.
Может ли кто-то скопировать мои файлы через отладку по USB?
Только с компьютера, который телефон уже разрешил. Новому компьютеру нужен разблокированный телефон и принятый на нём запрос на отладку по USB. Для надёжности воспользуйтесь пунктом «Отозвать доступ для отладки по USB» в разделе «Для разработчиков» или выключайте отладку по USB, когда она не нужна.
Почему adb devices пишет unauthorized?
Телефон ещё не принял ключ этого компьютера. Разблокируйте его и найдите запрос на отладку по USB. Если запрос не появляется, отзовите разрешения в разделе «Для разработчиков» и подключите кабель снова, чтобы телефон спросил заново.