Руководство
MTP: протокол, на котором работает режим «Передача файлов»
Каждый раз, когда вы выбираете на телефоне Android «Передача файлов», вы включаете MTP. Здесь о том, что это такое, почему он ведёт себя именно так и почему Mac никогда не понимал его сам.
На MTP, Media Transfer Protocol, телефон Android общается по USB, когда вы нажимаете уведомление «Зарядка устройства через USB» и выбираете Передача файлов (на Pixel Передача файлов / Android Auto, File transfer / Android Auto). Это не диск. Телефон сам распоряжается своей памятью и отдаёт файлы компьютеру по одному запросу за раз, как пронумерованные объекты, а не как блоки на накопителе.
Windows понимает MTP уже много лет, поэтому на ПК телефон появляется в Проводнике. Собственной поддержки MTP в macOS никогда не было. Вот почему Mac всегда было нужно приложение, чтобы добраться до файлов телефона Android, и почему эти файлы обычно видны в окне этого приложения, а не в Finder.
Откуда взялся MTP
MTP вырос из PTP, Picture Transfer Protocol, которым пользуются цифровые фотоаппараты; этот протокол стандартизирован как ISO 15740. PTP создавался для фотографий. В начале 2000-х Microsoft расширила его для музыкальных плееров и других медиаустройств, а в одном блоге Microsoft о нём как-то пошутили, что название означает «More Than PTP», то есть «больше, чем PTP». Вместе с Windows Media Player 10 появился драйвер класса для устройств MTP, и новые плееры, которые продавались под маркой Microsoft PlaysForSure, были обязаны его поддерживать.
В мае 2008 года USB Implementers Forum принял MTP как полноценный класс устройств USB, и он перестал быть протоколом одной компании. Android взял его на вооружение в 2011 году. Планшеты на Honeycomb, такие как Motorola Xoom, первыми стали использовать MTP вместо того, чтобы показывать свою память как USB-диск, и Google с самого начала предлагала для Mac приложение Android File Transfer, потому что иначе macOS не могла с ними общаться.
Как работает MTP
В MTP две роли. Компьютер выступает инициатором и спрашивает; телефон выступает ответчиком и отвечает. Пока компьютер не спросит, ничего не происходит, если не считать небольших сообщений о событиях, которые может прислать телефон, например «добавлен файл».
Объекты и дескрипторы
Каждый файл и каждая папка на телефоне представляют собой объект с номером, который называется дескриптором. Чтобы показать вам папку, приложение для MTP запрашивает у телефона дескрипторы того, что в ней лежит, а затем сведения о каждом объекте: имя, размер, формат и дескриптор родителя. Папки тоже объекты, особого вида, который в MTP называется ассоциацией. Путей в самом протоколе нет. Приложению, которое хочет показать DCIM/Camera, приходится добираться туда от дескриптора к дескриптору.
По одной операции за раз
Каждый обмен устроен как транзакция: запрос, необязательный блок данных и ответ. По спецификации транзакции синхронны, так что новая операция не может начаться, пока не закончилась предыдущая. Собственный MTP-сервер Android читает один запрос, отвечает на него и только потом читает следующий, и сеанс он принимает только один. На практике это значит, что по MTP с телефоном может работать только одна программа за раз, а долгое копирование задерживает всё остальное, в том числе получение списка следующей папки.
Чтение и запись
Отправка файла на телефон в базовом протоколе состоит из двух шагов: описать новый объект, затем передать все его байты. Стандартного способа изменить часть уже существующего файла нет. С чтением свободнее: в MTP 1.1 есть GetPartialObject, которая получает диапазон байтов, хотя смещение в ней задаётся 32-битным числом. Google добавила в MTP на Android собственные расширения, среди них GetPartialObject64, SendPartialObject, TruncateObject и пару операций для редактирования объекта на месте. Будет ли от них польза, зависит от приложения на компьютере, потому что каждое само решает, какими операциями пользоваться.
Ещё одна деталь пригодится дальше. Запись, которая описывает объект, хранит его размер в 32-битном поле, а предел такого поля чуть меньше 4,3 GB. Для файлов крупнее нужно отдельное 64-битное свойство, которое получают отдельным запросом, и не каждое приложение его запрашивает. Скорее всего, именно отсюда ограничение Android File Transfer в 4 GB.
Почему Mac не может смонтировать его сам
За диском в Finder стоит файловая система. macOS рассчитывает, что сможет запросить файл по пути, прочитать любой диапазон его байтов, записать что-то в его середину, переименовать его на месте, задать ему даты и делать несколько таких вещей одновременно для разных приложений. MTP задумывался для более узкой задачи: медиатека на компьютере передаёт целые песни в медиаплеер. Он предлагает объекты по номерам, по одной транзакции за раз, а редактировать на месте позволяет только через собственные расширения Android.
Ничего, что переводило бы одно в другое, в macOS нет. Захват изображений понимает PTP, протокол фотоаппаратов, из которого вырос MTP, поэтому может импортировать фото и видео с телефона, у которого в настройках USB выбран PTP. Остальную память телефона он просматривать не умеет, а MTP не понимает.
Поэтому каждый инструмент для MTP на Mac приносит собственный переводчик. Большинство показывают телефон в своём окне: так делал Android File Transfer и так до сих пор делает бесплатный OpenMTP с открытым кодом. Некоторые идут дальше и строят поверх MTP том в Finder, превращая каждый запрос файловой системы в операции MTP: это MacDroid, платный за пределами бесплатного уровня и умеющий работать ещё и через adb, и новый бесплатный mtpfs для macOS 26. Построить полноценную файловую систему на протоколе, который работает с одним объектом за раз, совсем не просто, поэтому таких приложений гораздо меньше, чем приложений для MTP.
Что это значит в повседневной работе
| MTP | USB-накопитель (mass storage) | adb | |
|---|---|---|---|
| Что видит компьютер | Список пронумерованных объектов | Диск на уровне блоков | Командную оболочку и службу копирования файлов |
| Телефон продолжает пользоваться своей памятью | Да | Нет, ему приходится её отдать | Да |
| Есть в Android сегодня | Да, «Передача файлов» | Нет | Да, с отладкой по USB |
| Понимает сама macOS | Нет | Да | Нет |
| Файлы открываются на месте из любого приложения на Mac | Только через приложение, которое строит том | Да | Только через приложение, которое строит том |
В окне приложения для MTP вы просматриваете файлы, перетаскиваете их на Mac и обратно. Нельзя только одного: относиться к телефону как к месту, где файлы живут.
- Другие приложения не могут открыть файл на телефоне. Чтобы отредактировать фото в Lightroom или посмотреть фильм в VLC, вы сначала копируете его на Mac, а потом копируете результат обратно.
- Терминал и rsync не видят телефон. Им нечего дать в качестве пути.
- Только одна программа за раз. Если телефон уже занят одним приложением, следующее не сможет подключиться, и это одна из причин ошибки «Could not connect to device».
- Сначала разблокируйте телефон. Инструкция самой Google по передаче файлов начинается со слов «Разблокируйте мобильное устройство».
Скорость не такая уж проблема, как часто говорят. На современном телефоне с кабелем USB 3 MTP быстро передаёт большие файлы. Телефон или кабель USB 2 ограничивает любой способ скоростью примерно от 20 до 40 MB/s. Ограничения MTP заложены в его модели, а не в пропускной способности.
Другой путь по тому же кабелю
У Android есть второй способ передавать файлы по USB: adb, Android Debug Bridge, которым пользуются его инструменты разработчика. Для него нужно один раз включить отладку по USB, а взамен компьютер получает вместо списка объектов службу копирования файлов и командную оболочку. Сравнение adb и MTP разбирает их подробно.
SideMount идёт этим путём. Он сам общается с телефоном по кабелю через adb и представляет телефон через FSKit как том в Finder, так что любое приложение на Mac может открывать, сохранять и копировать файлы прямо на телефоне. Ему нужны macOS 26 или новее и отладка по USB; о том и другом рассказано в руководстве по настройке.
Вопросы
MTP и PTP одно и то же?
Нет, но MTP построен на PTP. PTP, Picture Transfer Protocol, используют фотоаппараты, и сделан он для фотографий. MTP расширяет его для файлов любого вида. На телефоне Android режим «PTP» в настройках USB даёт доступ только к фото и видео, а «Передача файлов» включает MTP.
MTP медленный?
На современном телефоне нет. По кабелю USB 3 MTP быстро передаёт большие файлы. Его настоящие ограничения в другом: Mac не может смонтировать его сам, он работает по одной операции за раз, и телефоном одновременно может пользоваться только одна программа. Телефон или кабель USB 2 ограничивает любой способ скоростью примерно от 20 до 40 MB/s.
Почему Mac не показывает телефон, когда я его подключаю?
В macOS нет собственной поддержки MTP, поэтому телефон в режиме «Передача файлов» нигде не появится, пока не запущено приложение, которое понимает MTP или adb. Что проверить, рассказано в статье Телефон Android не отображается на Mac.
Может ли MTP открыть файл на телефоне, не копируя его сначала?
Протокол умеет читать часть файла, а Android добавляет операции для редактирования файла на месте. Можно ли открыть файл на месте, зависит от приложения на Mac. Приложение со своим окном копирует файлы к себе; приложение, которое строит том в Finder, позволяет другим приложениям открывать их там, где они лежат.