#android #mount #libusb #mtp #dokan
#Android #монтировать #libusb #mtp #dokan
Вопрос:
Я пытаюсь смонтировать устройство Android на компьютере под управлением Windows 10 с целью доступа к файлам через приложение Java. Я знаю, что консенсус заключается в том, что следует использовать WebDAV или FTP-сервер, но я хотел бы избежать этого, если это возможно. Я потратил много недель на изучение этого и, наконец, решил обратиться к блестящим умам stack overflow.
Для монтирования MTP-устройства нам нужна библиотека файловой системы, похожая на fuse для Unix. Для Windows два очевидных варианта:
- dokany
- winfsp
Насколько я понимаю, существует два основных API / библиотеки для доступа к устройствам MTP:
- libmtp
- WPD
Мне удалось скомпилировать libmtp для Windows с использованием msys2 / Mingw64.
На мой взгляд, я должен использовать приложение, подобное mtpmount, или попытаться портировать приложение Linux, например simple-mtpfs, используя библиотеку файловой системы, такую как dokany, вместо fuse.
Однако, когда я пытаюсь использовать mtp-mount (который использует WPD API), он не отображает никаких устройств, и когда я тестирую libMTP, используя предоставленные примеры, я получаю такие ошибки:
libusb_open() failed!: No error
libmtp version: 1.1.18
Listing raw device(s)
Device 0 (VID=04e8 and PID=6860) is a Samsung Galaxy models (MTP).
Found 1 device(s):
Samsung: Galaxy models (MTP) (04e8:6860) @ bus 1, dev 10
Attempting to connect device(s)
OK.
LIBMTP PANIC: Unable to initialize device
Unable to open raw device 0
Я не знаю, как поступить. Любая помощь будет с благодарностью.
Обновить
Я получил libmtp, работающий с использованием libusbk-dev-kit. В частности, я использовал libusbK-inf-wizard для создания драйверов для своего устройства. Я протестировал драйвер libusbk и драйвер WinUSB и обнаружил, что они оба решают мою проблему. Кроме того, я создаю mtpmount из исходных текстов и обнаружил, что он также работает.
Ответ №1:
Я нашел ваш вопрос, когда искал что-то очень похожее: как общаться с MTP (карманным GPS-устройством Garmin Alpha 200i, а не телефоном), используя Python 3 в Windows 10.
Рад видеть, что вы нашли решение! Я нашел частичное решение своей проблемы, используя ваши данные (в частности, mtpmount), и мне интересно, предоставляет ли оно другое альтернативное решение вашей проблемы.
Мне также интересно, узнали ли вы что-нибудь еще о mtpmount с тех пор, как нашли свое решение.
Основываясь на вашем предположении, я перешел по ссылке mtpmount. Я смог получить полное решение для командной строки Windows, 1) загрузив и запустив последнюю версию .msi для dokany, убедившись, что выбрал все компоненты для установки, затем 2) загрузив последнюю версию .exe (это не установщик — это фактический исполняемый файл mtpmount) для mtpmount. Это примерно такой же плавный процесс установки, на который можно надеяться в этой области! Снимаю шляпу перед разработчиками обоих этих проектов!
Единственные отличия от документов mtpmount, которые я нашел, заключались в том, что 1) имя исполняемого файла в документах не совсем соответствовало имени исполняемого файла из загрузок — конечно, это не имеет большого значения, и 2) знак фунта должен быть в двойных кавычках — по крайней мере, так было в powershell, и 3) хорошая вещь: вы можете указать букву диска в том же синтаксисе ID #:
PS C:UserscaverDownloads> .mtpmount-x64.exe list available
This is mtpmount, version 19.8.0 from commit 43033d6
This program comes with NO WARRANTY. Usage only at your own risk.
Available Connections and Storage Media:
Connection Elements: Contains 1 storages that can be mounted
|-- Storage E: [ID #0]
Connection My Passport: Contains 1 storages that can be mounted
|-- Storage F: [ID #1]
Connection Alpha 200i: Contains 2 storages that can be mounted
|-- Storage Internal Storage [ID #3]
|-- Storage Memory Card [ID #4]
Use mount command to make one of them a windows removable drive
PS C:UserscaverDownloads> .mtpmount-x64.exe mount "#3" h:
This is mtpmount, version 19.8.0 from commit 43033d6
This program comes with NO WARRANTY. Usage only at your own risk.
Drive H: is now Alpha 200iInternal Storage. Don't forget to unmount the drive (using unmount command) before disconnecting your device
PS C:UserscaverDownloads>
Затем вы выполняете свою работу по доступу к диску. Затем вы запускаете это для демонтажа:
PS C:UserscaverDownloads> .mtpmount-x64.exe unmount "#3"
This is mtpmount, version 19.8.0 from commit 43033d6
This program comes with NO WARRANTY. Usage only at your own risk.
Alpha 200iInternal Storage has been unmounted successfully.
Syncing Alpha 200i. DO NOT UNPLUG THIS DEVICE YET!
здесь терминал останавливается примерно на 5 секунд
Cache OK
All content synced to Alpha 200i. You may now unplug this device.
PS C:UserscaverDownloads>
Мои вопросы по этому поводу:
-
влияет ли dokany на остальной доступ к вашей файловой системе, выполняя все операции с файловой системой через свой прокси для всех дисков? Если да, замедляет ли это работу или добавляет другой возможный путь повреждения файловой системы в случае неоткрытой ошибки в dokany или тому подобное?
-
мы работаем с GPS-устройствами Garmin в условиях, когда невозможно надежно контролировать время отключения. Другими словами, нам действительно нужно иметь возможность отключаться сразу после завершения передачи, не дожидаясь паузы во время процесса размонтирования. Что говорят о горячем отключении устройства MTP, смонтированного с помощью mtpmount? Отключение без запуска «mtpmount unmount», а также отключение во время паузы ожидания? Из этих двух вариантов, похоже, было бы безопаснее просто не запускать размонтирование — создается впечатление, что 5-секундная синхронизация была бы действительно неподходящим временем для отключения… Я знаю, что для устройств массового хранения данных USB всегда рекомендуется сначала правильно извлечь устройство из Windows, прежде чем физически отключать, но у нас никогда не возникало проблем из-за горячего отключения USB-накопителей Garmin GPSEES.
-
превратили ли вы все это в готовое установочное решение, то есть в один общий установщик, который устанавливает dokany, затем устанавливает mtpmount, а затем также устанавливает остальную часть вашего приложения? Я не знаком с установщиками, такими как Nullsoft или такими, и я определенно планирую использовать RTFM там, но просто интересно, сталкивались ли вы с какими-либо конкретными сбоями в этих строках.
Спасибо и поздравляю с тем, что оно заработало!
Комментарии:
1. Этот вопрос, похоже, указывает на то, что безопасно «просто отключить» с точки зрения устройства, но это также нормально с точки зрения mtpmount? Я постараюсь уточнить у разработчика mtpmount. superuser.com/questions/1131590 /…
2. Смотрите этот ответ: superuser.com/a/1724634/134192