Use ADB to bypass dog-slow MTP transfer of files from Android to Linux

Last night I had to backup 2760 photos and videos, about 6.3G worth, from my Nexus 4 Android phone to my Linux laptop.

The Nexus 4, like many other Android phones, only supports the Media Transfer Protocol, or MTP, for transferring files via USB connection. With Ubuntu 14.04, this is a fortunately a plug and play situation: Connect the phone via USB cable, and start dragging and dropping files to and fro using the built-in file manager on the Linux side.

Unfortunately, this turned out to be dog slow. Stabilising at about 1Mbyte/s, this was going to take more time than I had at my disposal. This looks like it could be a Linux-only problem, but I’d like to see that confirmed. Whatever the case may be, I had to find alternatives.

Accessing the AirDroid web-interface on my Android telephone.

My next stop was the ssh server app on the android side. I confirmed that I could ssh in to my unrooted phone (pretty cool that!), and then I confirmed, using the built in ssh:// filesystem support in the Linux file manager, that file transfer throughput was still dog slow (also about 1Mbit/s). After some minutes, it looked like the whole transfer stalled completely.

btsync was of no help in this case, because I have 1.4 on my phone, and use 1.3 on all my other devices (1.4 was completely useless in its beta phase, so I decided to stick with 1.3 until convinced otherwise).

AirDroid is an extremely well done app that enables one to remote control one’s android phone via a super attractive web interface, over its wifi interface. One of its many functions is file transfer, up and down. Selecting to download a whole directory of files results in a huge ZIP file being streamed. This came down at between 2 and 3 Mbyte/s, staying close to 3 for most of the time.

I was still curious whether we could do better via the USB cable, instead of over wifi, so I fired up the Android Debug Bridge, or ADB. This only works if developer mode has been activated on the android phone, and USB debugging mode has been activated. In other words, this is probably not for novice users.

By using adb pull on the whole directory of files, it started downloading all 6.3G worth of photos and videos. At the end of this, the average throughput was 4.2Mbyte/s, the best of all methods I had tested.

Conclusion

If you need to transfer many files from your MTP-only Android telephone to a Linux host, either use AirDroid if you want this to be as easy (and as pretty!) as possible, or use ADB if you want the maximum throughput and don’t mind getting your hands dirty.

11 thoughts on “Use ADB to bypass dog-slow MTP transfer of files from Android to Linux”

  1. I’ve been seeing the same thing. Only my connectivity and transfer speeds are even worse on my Nexus 4 running both 4.4.x and Lollipop. I’m seeing around 5mb/hour.

    It used to be *really* fast. It was on the order of several MBytes/sec. It’s also almost unusable on a Windows 7 desktop I have at work. And I’ve tried about a half dozen different cables, deoxit on the phone contacts, nothing makes it better.

    I resorted to using “SSH Server” (Olive Tree) which is an Android app. It transfers through wireless at about 500KBytes/sec. Not great but at least I can get my images.

    Also of note, I tried “SSH Server” (Ice Cold Apps) which works and transfers, but the files are corrupted so it turns out to be useless.

  2. Yes! Thank you! I’ve been searching all over Google to figure out the fastest way to transfer files from android to pc. The answer is adb. Thanks for doing these tests!

  3. thanks for the pointers.

    I had a few 8gb of images – airdroid hung – then copy using file explorer hung then died… both failures.

    wasting around 7hours !!

    All in I have 1400 files – and it carked at 1000 – thought on finding the rogue 400 ?

    Found this – went down the road to adb via google sdk and adb – and it’s almost done in just under 1 hour.

    Thanks again… sanity almost restored.

    cheers

  4. BitTorrent Sync is way better now than at the time of this article — I get speeds upwards of 6-7 MB/s for any number of files using Sync (limited mainly by your wifi capabilities).

  5. An interesting option is to use “usb tethering” and access airdroid over the sharing ip on the virtual ethernet interface. This way you had the easy airdroid interface and wire speed from USB, I usually get ~7MB/s.

    1. Good tips! Would an FTP server app on the phone work the same way as Airdroid over Usb tether? (I prefer FTP for its simplicity, resume support in Filezilla client and sometimes faster thruput speed.)

  6. Yes. It works flawlessly with a FTP server. Actually with multi threaded ftp connection you can archive twice even thrice that speed.

  7. adb file transfer works like a charm – much better than transferring via MTP over Windows. Thanks a lot for this tip!

Leave a Reply

Your email address will not be published. Required fields are marked *