Pheodor Lab

Блог веб-разработчика

Обмен файлами между Galaxy Tab и Ubuntu

Pheodor в Android, Linux

Не так давно стал обладателем сего девайса - Samsung Galaxy Tab 10.1. Рассказывать про впечатления от приобретения, плюсы и минусы планшета я не буду, скажу лишь, что доволен.

Все бы хорошо, но надоумился Google в Android 3.0+ убрать возможность подключения устройства как USB накопителя (USB Mass Storage). Да и Samsung показал себя не с лучшей стороны, не допилив USB Mass Storage, как это делают другие производители, например Acer. Вместо этого в операционную систему всунули гнусный майкрософтовский MTP (Media Transfer Protocol). У которого помимо прочих минусов, есть очень большой недостаток - сырая реализация под Linux. Ну по крайней мере подружить свою убунту и планшет через него мне так и не удалось. Поэтому я расскажу об альтернативном способе обмена файлами между Android устройством и устройством с ОС Linux. В данном случае Samsung Galaxy Tab 10.1 с Android 3.2 на борту и моя любимая Ubuntu 11.10 :)
Кстати, этот способ также подойдет и для Mac OS юзеров.

 Сразу после обнаружения этой "фичи" я полез искать способ подключения к ПК. Пытался сначала все же задействовать этот MTP, но все безуспешно.
 После этого начал искать альтернативу. Нашел очень интересный способ - использовать стандартную утилиту ADB из Android SDK. Она представляет собой отладочный протокол (мост) для обмена данными между ПК и Андроид устройством. Помимо этого имеется возможность обмениваться файлами, просматривать дерево каталогов и файлов, создавать директории, что нам как раз и требуется.

 Так как утилита консольная, то для удобства использования нам потребуется графический интерфейс. Хоть выбор и не велик, но для себя я выбрал программку на Python - AAFM (Android ADB File Manager). Описание, установка и способ использования есть на официальной страничке, но я все же напишу краткий мануал на русском языке.

 Требования

- Python с библиотеками PyGTK
- GTK
- git
- Android SDK

 Для Ubuntu нам понадобится только git и Android SDK.

 Устанавливаем git и копируем репозиторий

sudo apt-get install git
git clone git://github.com/sole/aafm.git ~/Applications/aafm

 Устанавливаем Android SDK

sudo apt-get install ia32-libs

Скачиваем SDK отсюда - http://developer.android.com/sdk/index.html. Распаковываем в директорию ~/Applications/android-sdk и выполняем следующие команды в консоли:

sudo cp ~/Applications/android-sdk/platform-tools/adb /usr/bin/adb
sudo cp ~/Applications/android-sdk/platform-tools/aapt /usr/bin/aapt

 Настраиваем udev

sudo gedit /etc/udev/rules.d/51-android.rules
# Samsung
SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0777"

  Чтобы узнать idVendor нужно выполнить в консоле команду lsusb и найти там свое устройство. Список будет примерно такой:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 064e:a103 Suyin Corp. Acer/HP Integrated Webcam [CN0314]
Bus 002 Device 002: ID 0bda:0158 Realtek Semiconductor Corp. USB 2.0 multicard reader
Bus 006 Device 002: ID 147e:1000 Upek Biometric Touchchip/Touchstrip Fingerprint Sensor
Bus 001 Device 005: ID 04e8:6860 Samsung Electronics Co., Ltd 

  По последней строчке можно понять, откуда берется idVendor:
Bus 001 Device 005: ID 04e8:6860 Samsung Electronics Co., Ltd
 Редактируем idVendor, если требуется и сохраняем файл.
 Выставляем права и перезапускаем udev:

chmod a+r /etc/udev/rules.d/51-android.rules
sudo /etc/init.d/udev restart

 Настраиваем устройство

 Теперь нужно включить на Android устройстве режим отладки:
Настройки -> Приложения -> Разработка -> Отладка по USB
.

 Запускаем AAFM

 Подключаем телефон/планшет через USB шнур и выполняем следующие команды:

cd ~/Applications/aafm/src
chmod +x ./aafm-gui.py
python ./aafm-gui.py

  После этого должно открыться окно такого вида:

 Для себя я сделал кнопку запуска, привязал к ней иконку и добавил на панель Unity.
 Процесс настройки конечно кропотливый, но на самом деле не такой сложный как кажется и займет не больше получаса вашего свободного времени. Зато результат будет оправдан :)

P.S. Графический интерфейс программы подвисает при передаче больших файлов. На самом деле это не значит, что файл не перадается. Это как раз показатель обратного - передача идет успешно, поэтому не спешите закрывать окно, дождитесь пока она отвиснет. Видимо это связано с тем, что разработчик решил не выносить передачу файлов в отдельный поток. Надеюсь в следующей версии они это исправят.

9 комментариев
dmitriy
05.09.2012 21:58
Спасибо большое за статью. все сходится и запускается. единственное не совсем корректно все получается с правами доступа к каталогам на машинки с убунту и найти сдк туулс не сразу получилось. поэтому рекомендую выкачивать по ссылке android sdk(в нем нет почемуто platform-tools) и отдельно platform-tools по ссылке http://dl-ssl.google.com/android/repository/platform-tools_r14-linux.zip

Ответить
dmitriy
05.09.2012 22:01
а по поводу подвисания при копировании тут все просто. скорей всего нет графической оболочки для мониторинга процесса копирования, поэтому до выполнения команды падает таймаут на интерфейс, но если запупстиь последнюю строчку в терминале python ./aafm-gui.py, и начать процес копирования с убунту на девайс или обратно, то в окне терминала вы увидите что начался процес копирования, приблезительно это будет выглядеть так
EXECUTE= adb shell ls -l -a "/mnt/sdcard/Movies"
Copying /root/144001.69701.flv => /mnt/sdcard/Movies
EXECUTE= adb push "/root/144001.69701.flv" "/mnt/sdcard/Movies"
5874 KB/s (1154346705 bytes in 191.884s)
EXECUTE= adb shell ls -l -a "/mnt/sdcard/Movies/"

Ответить
Pheodor
06.09.2012 14:36
Пожалуйста!
По поводу прав доступа - не совсем понял в чем проблема. Но в любом случае можно тогда запускать aafm от имени рута.

Ответить
Игорь
24.06.2013 23:52
sudo apt-get install ia32-libs
при выполнении выдаёт следующее:
Пакет ia32-libs недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list

E: Для пакета ia32-libs не найден кандидат на установку
что делать?

Ответить
Pheodor
26.06.2013 13:43
ia32-libs нужно устанавливать только, если у вас 64-битная система.

Ответить
Алексей
30.09.2013 18:55
Возникла проблема: если запускать под пользователем, то не видно файлы на планшете, а если под рутом, то отказано в доступе на домашнюю папку. Что делать?

Ответить
Pheodor
02.10.2013 20:36
Не видно файлов - значит проблема определения устройства вашим компьютером.
Попробуйте выполните команду в консоли при подключенном устройстве к компьютеру: adb devices
Если все ок, то в списке должно появиться ваше устройство.

Ответить
ip
10.12.2013 15:13
а не проще ли поднять на планшете FTP-сервер и через "mc" и т.п. спокойно оперироваь с файлами?

Ответить
Pheodor
11.12.2013 13:30
Нужна была возможность манипулировать файлами именно через USB-кабель.

Ответить
Написать комментарий