Команда adb push C:\file.zip /sdcard/ завершается ошибкой permission denied чаще всего из-за попытки записи в системный раздел — это первое, что стоит проверить, если передача файла на Android-устройство не работает. В остальных случаях виноваты неправильный путь назначения, отключённая отладка по USB или проблемы с драйвером.
В этой статье разберём синтаксис команды adb push, рабочие примеры для Windows, Linux и macOS, а также типичные ошибки и способы их устранения. Материал подойдёт как новичкам, впервые настраивающим Android Debug Bridge, так и тем, кто уже сталкивался со сбоями при копировании файлов.
Что делает команда adb push
Утилита adb входит в состав Android SDK Platform Tools и позволяет управлять устройством с компьютера через USB-кабель или сеть. Команда adb push выполняет одну задачу — копирует файл или папку с компьютера на Android-устройство. Обратная операция выполняется командой adb pull.
Базовый синтаксис выглядит так:
adb push <локальный_путь> <путь_на_устройстве>
Локальный путь указывается в формате вашей операционной системы, а путь на устройстве — в формате Linux, поскольку Android построен на ядре Linux. Например, /sdcard/ — это общедоступное внутреннее хранилище, куда можно писать без root-прав.
Подготовка: включение отладки по USB
Перед первым использованием команды необходимо активировать отладку по USB на смартфоне. Для этого откройте настройки, найдите раздел «О телефоне» и несколько раз нажмите на пункт «Номер сборки», пока не появится сообщение о разблокировке режима разработчика. Точное название пунктов зависит от оболочки производителя — MIUI, One UI, ColorOS размещают их по-разному.
Затем перейдите в появившийся раздел «Для разработчиков» и включите переключатель «Отладка по USB». После подключения кабеля к компьютеру на экране смартфона появится запрос на разрешение отладки — подтвердите его, при желании отметив «Всегда разрешать с этого компьютера».
Проверить, видит ли компьютер устройство, можно командой:
adb devices
Если в списке отображается серийный номер со статусом device — всё готово к работе. Статус unauthorized означает, что на смартфоне не подтверждён запрос, а пустой список — что проблема в кабеле, драйвере или самой отладке.
Примеры команды adb push
Начнём с самого простого сценария — передачи одного файла в корень внутреннего хранилища:
adb push C:\Users\Ivan\Documents\photo.jpg /sdcard/
Файл появится в корне хранилища и будет виден в галерее или файловом менеджере. Если нужно сохранить его под другим именем, укажите новое имя в конце пути назначения:
adb push photo.jpg /sdcard/Pictures/renamed_photo.jpg
Для копирования целой папки со всем содержимым укажите путь к каталогу без имени файла:
adb push C:\Music\Album /sdcard/Music/
На Linux и macOS команда отличается только форматом локального пути:
adb push ~/Downloads/firmware.zip /sdcard/Download/
- 📁 Передача одного файла:
adb push file.apk /sdcard/ - 📂 Передача папки целиком:
adb push MyFolder /sdcard/Documents/ - ✏️ Переименование при копировании:
adb push a.zip /sdcard/b.zip - 🔌 Выбор устройства при нескольких подключениях:
adb -s SERIAL push file /sdcard/
Полезные опции и флаги
Команда поддерживает несколько параметров, которые меняют поведение копирования. Флаг -a сохраняет время модификации и доступа к файлу, что полезно при синхронизации. Опция -n включает режим «сухого прогона»: команда покажет, какие файлы будут переданы, но фактического копирования не произойдёт.
Флаг --sync передаёт только те файлы, которые изменились с прошлой копии — это заметно ускоряет повторную передачу больших каталогов:
adb push --sync C:\Project\res /sdcard/backup/
Также доступен параметр -z, задающий алгоритм сжатия при передаче (например, brotli или lz4, если поддерживается версией adb и устройством). Для небольших файлов разница незаметна, но при передаче гигабайтных архивов сжатие может сократить время копирования.
Куда можно и нельзя писать без root
Главное ограничение adb push — права доступа к файловой системе Android. Без root-прав запись разрешена только в пользовательские разделы: /sdcard/, /storage/emulated/0/ (это тот же раздел) и подкаталоги внешней SD-карты. Системные каталоги вроде /system/, /data/, /vendor/ защищены.
| Путь назначения | Доступ без root | Назначение |
|---|---|---|
/sdcard/ | Да | Внутреннее хранилище пользователя |
/sdcard/Download/ | Да | Стандартная папка загрузок |
/data/local/tmp/ | Да (через adb) | Временные файлы, используется установщиками |
/system/ | Нет | Системный раздел, требует root и перемонтирования |
/data/data/ | Нет | Приватные данные приложений |
Каталог /data/local/tmp/ заслуживает отдельного упоминания: он доступен для записи через adb даже без root, поэтому именно туда скрипты и установщики обычно помещают временные файлы перед выполнением операций с повышенными привилегиями.
⚠️ Внимание: попытка записи в системные разделы через adb push без root завершится ошибкой, а с root и перемонтированием раздела может привести к невозможности загрузки устройства. Изменяйте системные файлы только при полном понимании последствий и с резервной копией.
Типичные ошибки и их решение
Ошибка adb: error: failed to copy ... Permission denied означает отсутствие прав на запись в целевой каталог. Решение — изменить путь назначения на /sdcard/ или /data/local/tmp/. Если запись в системный раздел действительно необходима и устройство имеет root, потребуется перемонтирование раздела, но эта процедура зависит от конкретной версии Android и не является универсальной.
Сообщение no such file or directory указывает, что локальный путь указан неверно либо целевой каталог не существует. Проверьте оба пути: локальный — через проводник, удалённый — командой adb shell ls /sdcard/. Учтите, что в путях Android используются прямые слеши, а регистр символов имеет значение.
Если команда «зависает» или передача обрывается на больших файлах, возможные причины — нестабильный USB-порт, дешёвый кабель без поддержки передачи данных или энергосбережение USB в операционной системе. Попробуйте другой порт (желательно напрямую, без хаба) и другой кабель.
- 🚫 Permission denied — нет прав на запись, смените каталог назначения
- ❓ No such file or directory — проверьте оба пути и регистр символов
- 🔌 Device not found — устройство не обнаружено, проверьте кабель и отладку
- 🔐 Unauthorized — подтвердите запрос на отладку на экране смартфона
☑️ Проверка перед запуском adb push
Установка APK через adb push и adb install
Частая задача — установить приложение, файл которого лежит на компьютере. Для этого даже не обязательно копировать APK на устройство: команда adb install app.apk выполняет установку напрямую. Однако связка через push тоже рабочая и иногда нужна, например, для последующей установки через терминал устройства:
adb push app.apk /data/local/tmp/
adb shell pm install /data/local/tmp/app.apk
Первый способ проще и предпочтительнее в большинстве случаев. Второй вариант полезен, когда требуется передать установщику дополнительные флаги через pm install или когда файл уже находится на устройстве.
⚠️ Внимание: установка APK из непроверенных источников — распространённый вектор заражения вредоносным ПО. Перед установкой убедитесь в происхождении файла, а на устройстве должна быть разрешена установка из соответствующего источника (для adb это обычно не требуется, но зависит от версии Android).
Передача файлов по Wi-Fi
Начиная с Android 11, доступна беспроводная отладка без предварительного USB-подключения — через сопряжение по коду в разделе «Беспроводная отладка» настроек разработчика. На более старых версиях сначала требуется подключить устройство по USB и выполнить adb tcpip 5555, после чего подключиться по сети:
adb connect 192.168.1.50:5555
adb push file.zip /sdcard/
IP-адрес устройства можно посмотреть в настройках Wi-Fi. Учтите, что скорость передачи по сети обычно ниже, чем по кабелю, а соединение разрывается при перезагрузке устройства — процедуру подключения придётся повторить.
Почему /sdcard/, если это внутренняя память?
Путь /sdcard/ — историческое название общего раздела пользовательских данных. Даже на устройствах без физической SD-карты этот каталог существует как символическая ссылка на /storage/emulated/0/. Оба пути ведут в одно и то же место, поэтому в командах можно использовать любой из них.
Частые вопросы
Чем adb push отличается от adb install?
Команда adb push просто копирует файл в указанный каталог устройства, а adb install устанавливает APK-приложение напрямую с компьютера. Для установки приложения используйте install, для передачи любых файлов — push.
Можно ли передать файл на устройство без root-прав?
Да, в пользовательские разделы — /sdcard/ и /data/local/tmp/ — запись через adb доступна без root. Ограничения касаются только системных каталогов.
Почему adb не видит устройство?
Проверьте, включена ли отладка по USB, подтверждён ли запрос на экране смартфона, исправен ли кабель (некоторые кабели передают только питание) и установлены ли драйверы на компьютере. Команда adb kill-server с последующим adb devices перезапускает сервер и иногда решает проблему.
Как скопировать файл с устройства на компьютер?
Используйте обратную команду: adb pull /sdcard/photo.jpg C:\Backup\. Синтаксис зеркальный — сначала путь на устройстве, затем локальный путь назначения.
Работает ли adb push в режиме recovery?
Зависит от рекавери: стоковые режимы восстановления обычно не поддерживают adb push, а кастомные вроде TWRP — поддерживают, причём с расширенными правами доступа к разделам. В режиме sideload стокового рекавери доступна только команда adb sideload для пакетов обновлений.