Android ICS & the MTP pain

With Android 3.0, Google switched the way of accessing files on Android devices from USB mass storage device behaviour, to Media Transfer Protocol, a standard initially created by Microsoft, but later developed into part of the USB standard for media devices.

For most Android users, new ICS phones are where they will first encounter this new approach to sharing file content. Phones previously upgraded from Android 2.x may still provide the conventional mass storage device behaviour, but any new ICS devices force the option of either MTP or the camera-focused PTP.

MTP is one of those technologies designed with the best of intentions – the fundamental design around it is that it abstracts the underlying filesystem, enabling the phone/device to store the files in whatever way suits it best and then exposing them to the computer.

Unlike the traditional mass storage mount, the files can be available to both the phone and the computer at the same time, whereas previously Android applications would lose access to the “sdcard” storage space when mounted on the computer.

It’s a great idea, except that it’s nowhere near as compatible with computers as a generic mass storage device is. Whilst Windows has native support for MTP, thanks to MS being the original creator of the standard, MacOS has no native support and requires a download, and Linux systems are all kinds of fail when it comes to MTP.

Considering I use a Linux laptop, this situation is very unhelpful – reading online suggests various options (the arch wiki was quite helpful):

  • Use of GNOME with GVFS or KDE’s KIO to connect the storage using the GUI’s device handling functionality. Unfortunately with my tests performed using Nautilus (GNOME’s file manager) on Debian Testing (recent app versions), I wasn’t able to connect to the device, instead experiencing a lot of timeout errors.
  • Linux has a FUSE driver that is able to read MTP, with corresponding usertools called mtpfs – however in my tests, this driver has some serious usability, stability and trust issues, thanks to it repeatedly failing and randomly unmounting, as well as hiding many files that are known to exist.
  • An alternative driver called “go-mtpfs” (written in Go) which provides user space connectivity to MTP Android devices at reasonable speeds and a reasonable UI for mounting the drives.
  • Failing these, a network transfer over WiFi could be an option, such as Samba or SSH. Bluetooth is also a possibility, but the performance is quite poor for numerous file transfers.

I’ve ended up using go-mtpfs which appears to work quite nicely, at least with my ICS Google Nexus phone, however it’s annoying that it’s not in the Debian repositories yet.

Whilst I understand the design decisions and issues solved by Google moving to using MTP rather than USB Mass Storage, the sudden deprecation of a feature that previously existed is a real pain for a user like myself who is wondering why their new phone won’t connect to their computer…

Personally I think Google should have included a legacy USB Mass Storage option for at least another release (ie till Android 5) to have provided time for desktop OS developers to improve the handling of this protocol.

It would also have been useful if they had included a “Install Android Driver” option to expose a small USB mass storage drive (eg 20MB) that includes drivers/apps for common platforms such as MacOS and Linux, so that users could connect and load on drivers without needing

For now, go-mtpfs seems to work OK, meanwhile one of the GVFS/GNOME developers is re-working the MTP handling to properly support Android devices, so hopefully we won’t have the headaches around this protocol for too much longer…

4 thoughts on “Android ICS & the MTP pain

  1. Joshua Boyd

    Supporting USB mass storage for another generation would have meant another generation of phones were the storage was partitioned to make most of it FAT32 and unavailable for internal application storage.

    At the time you posted this, ICS was over a year old. MTP was moved from being a MS thing to an open standard about 3 years earlier still. I find it astounding that the MTP on linux continues to work so poorly.

    Reply
    1. Jonathan

      Ironic that “serious” Linux fails at supporting by far the most successful Linux distro out of all things.

      Reply
  2. Bill

    I use Windows 7 and MTP is a huge pain. It’s slow, and removes many (important) functions that are available to a device mounted as a disk. I have the google phone, which doesn’t have an SD card, so removing and manually mounting the card isn’t even an option.

    They should provide the choice of how you’d like to mount the phone, MTP, PTP, or Drive.

    Cmon Google!

    Reply
    1. ctsurv553

      While Google undoubtedly had some good reasons to push MTP, it has been a disaster for me on my Samsung Galaxy Note 3 tablet (Android 4.4.2 KitKat). The two worst aspects of it:
      1. It’s terribly quirky, corruption-prone, and unreliable. File transfers between my tablet and my Windows 7 desktop PC – in either direction – are frequently corrupt. For example, JPEG photos that I have stored on my desktop PC and want to copy over to the tablet often are a total mess, if they will even load at all. GPX files that I create in Garmin Basecamp on my PC and transfer to the tablet won’t load into Map Factor Navigator, and GPX files aren’t even complex – they’re simple XML text files! The only solution to this corruption issue that I’ve been able to find is to un-install the MTP drivers in Windows, re-boot the PC, and then allow the system to re-install them the next time the tablet is plugged in. This is completely unacceptable. If I had hired a software engineer and his product was even half as buggy as MTP, I’d fire him.
      2. MTP isn’t supported by Windows utilities like WinMerge or TeraCopy, and probably never will be because Android devices with MTP connections don’t appear to a PC as a mountable drive with a drive letter. Because I can’t use TeraCopy, or any copy utility that uses CRC Checksum verification, I have no way to be sure that any file that I have copied is complete and accurate. And I already know that MTP file transfers are wonky and corruption-prone!
      3. MTP is much slower than Mass Storage Mode in USB2, and the larger a file is, the slower it seems to get. Video or music files larger than about 10 megabytes sometimes won’t transfer at all; MTP simply crashes or freezes up.
      The usual workarounds that people suggest, like Dropbox or FTP, are also unacceptable, as they require WiFi. What is one supposed to do when the task at hand is to do a file transfer to or from someone else’s computer, and all they have is a USB connection and they don’t have WiFi? All I am left with is to remove the microSD card from the tablet and mount it to the PC with a card reader. This means prying the tablet out of it’s case every time, and fumbling with a tiny, easy-to-drop-and-lose-in-the-carpet microSD card. Mass Storage Mode was simple, it worked well, it was reliable and fast, and I could use TeraCopy for all of the file transfers. MTP on this Samsung tablet is so horrible that it could actually force me to consider moving to “the dark side” – meaning Apple’s IPad – if that would give me a portable device with Mass Storage Mode.

      Reply

Leave a Reply