1

我正在尝试在运行 Windows 10 的机器上安装 android 设备,以便通过 Java 应用程序访问文件。我知道大家一致认为应该使用 WebDav 或 FTP 服务器,但如果可能的话,我想避免这种情况。我花了好几个星期研究这个问题,最终决定接触堆栈溢出的聪明才智。

要挂载 MTP 设备,我们需要一个类似于 Unix 的 fuse 的文件系统库。对于 Windows,两个明显的选择是:

  1. 多卡尼
  2. winfsp

据我了解,有两个主要的 API/库可以访问 MTP 设备:

  1. libmtp
  2. WPD

我已经设法使用 msys2/Mingw64 为 windows 编译 libmtp。

在我看来,我应该使用像mtpmount这样的应用程序,或者尝试使用像 dokany 这样的文件系统库而不是 fuse来移植像simple-mtpfs这样的 linux 应用程序。

但是,当我尝试使用 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并发现它也可以正常工作。

4

1 回答 1

1

我在寻找非常相似的东西时发现了您的问题:如何在 Windows 10 上使用 Python 3 与 MTP(Garmin Alpha 200i 手持 GPS 装置 - 不是电话)交谈。

很高兴看到您找到了解决方案!我使用您的潜在客户(特别是mtpmount )找到了我的问题的部分解决方案,并且想知道它是否为您的问题提供了另一种替代解决方案。

我还想知道自从您找到解决方案以来,您是否发现了更多关于 mtpmount 的信息。

根据您的引导,我去了 mtpmount 链接。我能够通过以下方式获得 Windows 命令行的完整解决方案:1)下载并运行最新的 .msi for dokany,确保选择所有要安装的组件,然后 2)下载最新的 .exe(它不是安装程序 -它是 mtpmount 的实际 mtpmount 可执行文件)。这与在这个领域所希望的安装过程一样顺利!向这两个项目的开发人员致敬!

与我发现的 mtpmount 文档的唯一区别是 1) 文档中的可执行文件名称与下载的可执行文件名称不完全匹配 - 当然不是什么大问题,以及 2) 井号必须用双引号引起来 -至少在 powershell 中是这种情况,并且 3)一件好事:您可以使用相同的 ID# 语法指定驱动器号:

PS C:\Users\caver\Downloads> .\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:\Users\caver\Downloads> .\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 200i\Internal Storage. Don't forget to unmount the drive (using unmount command) before disconnecting your device
PS C:\Users\caver\Downloads>

然后你做你的驱动器访问工作。然后你运行这个来卸载:

PS C:\Users\caver\Downloads> .\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 200i\Internal 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:\Users\caver\Downloads>

我对此的疑问:

  1. dokany 是否会通过其所有驱动器的代理运行所有文件系统操作来影响您的文件系统访问的其余部分?如果是这样,如果在 dokany 等中出现未发现的错误,这是否会减慢速度或增加文件系统损坏的另一个可能途径?

  2. 我们在无法真正可靠控制拔出时间的环境中使用 Garmin GPS 装置。换句话说,我们确实需要能够在传输完成后立即拔出,而无需在卸载过程中等待怀孕的暂停。关于热拔出使用 mtpmount 安装的 MTP 设备的说法是什么?在不运行“mtpmount unmount”的情况下拔掉插头,以及在怀孕暂停期间拔掉插头?在这两个选项中,似乎不运行卸载会更安全 - 你会觉得 5 秒同步将是一个非常糟糕的拔出时间......对于 USB 大容量存储设备,我知道它总是被推荐在物理拔出之前,首先从 Windows 正确弹出设备,但我们'

  3. 你有没有把这一切变成一个交钥匙安装程序解决方案,即一个安装 dokany 然后安装 mtpmount 然后还安装应用程序的其余部分的整体安装程序?我不熟悉 Nullsoft 之类的安装程序,我肯定计划在那里使用 RTFM,但只是想知道您是否在这些线路上遇到过任何特定的问题。

感谢并祝贺它开始工作!

于 2021-04-24T13:27:50.947 回答