Is there a viable alternative to MTP for file transfer? Since the latest versions (ICS+?) no longer have mass storage, is there any viable alternative to MTP?

The protocol seems inherently broken and the decision to regress to this format seems like a very 'iphone-esque' move (dumb things down, take away power from the users).

There seem to be numerous problems (eg) with files not showing and it seems to me that transferring a file should be simpler than requiring a system reboot - I am unreasonably demanding that way.

I'm aware of tools like Wi-Fi file transfer but often I find myself in areas without wifi, with just my laptop, phone and a usb cable. The other day, for example, I was one a plane, which is an environment decidedly non-conducive to using a wireless system.
The following methods are tested on Windows 7; Ubuntu based Distribution and Slackware with desktop environment KDE 4.1x. Nothing can be said about Mac. The answer is intended to serve as a consolidated guide for the various methods out there.  

Few following methods requires USB Tethering to be enabled. This can be achieved by instructions mentioned below:


  Some of this information applies only to devices running Android 5.0 and higher. If your device is running 4.4 or lower, the Menu icon looks like this  . If your device is running 4.3 or lower, the Settings icon looks like this . 
  
  Set up and use USB tethering connection (including instructions for Windows XP) 
  
  1. Connect your device to another device using a USB cable. 
  2. You'll see a USB icon and a notification Connected as a media device or Connected as a camera at the top of the screen. For the purposes of tethering, the type of connection doesn't matter. 
  3. Open your device's Settings menu . 
  4. Under "Wireless &amp; networks," touch More > Tethering &amp; portable hotspot. 
  5  Check the box or turn on the switch next to "USB tethering." When the connection is made, you’ll see one of the following notifications and you can connect to the Internet (your icons may look slightly different if your device is running Andriod 4.4 or lower): 
     Portable Wi-Fi hotspot active 
     USB tethering connection active 
     Multiple tethering or hotspot connections active 
  
  To stop sharing your data connection, uncheck the box or turn off the switch next to "USB tethering" in the Settings menu or simply disconnect the USB cable.
  
   USB tethering with Windows XP
  
  If you're using a computer running Windows XP, you need to install a configuration file before tethering your device to your computer.
  
  1. Follow the steps above to turn on USB tethering for your device. 
  2. Download the following configuration file (tetherxp.inf) to your Windows XP computer. Typically, you can right click on the link and choose "Save As". (If your browser adds “.html” to the file name, you’ll need to edit the name to remove the .html extension and replace it with “.inf” instead.) 
  3. Connect your mobile device to your computer using a USB cable. 
  4. When Windows XP's New Hardware Wizard opens, select No, not at this time, then click Next. 
  5. Select Install from a list or specific location, then click Next. 
  6. Click Browse to browse to the directory where you installed the configuration file you downloaded in step 2, then click Next. 
  7. When Windows XP finishes installing the software for Android USB Ethernet/RNDIS, click Finish. 
  
  (Source)




Method #1

This method uses USB Tethering and an app to access the phone storage.

Procedure:


Install MTP-Alternative USB Drive from Play Store.
Open MTP-Alternative app, select  CONNECT AND ENABLE USB TETHERING and choose Enable USB Tethering.
Come back to app by tapping Back key one time or opening the app from its icon in your launcher.
Instructions for Windows and Ubuntu will now be displayed in the app. Choose your OS: Windows or Ubuntu and follow the guide there.
Alternatively, you can follow the instructions mentioned below to save the network connection either in Windows or Ubuntu (Linux).


For Windows:


  
  Make sure you have administrative privileges. Download and install this Microsoft Update.
  The WebClient service needs to be enabled for accessing network folder. To ascertain the service status, press  + R to open a Run dialog box. Type services.msc and click OK. Services window will open with a list of services.
  Scroll down to see WebClient and check the corresponding Startup Type. If its not Disabled then close the window. If it is then do
  
  Right-Click -&gt; Properties -&gt; General -&gt; Startup Type -&gt; Automatic -&gt; Apply -&gt; OK.  You can also choose Manual over Automatic to save System from start-up overtax.
  Now press  + R, type regedit and click OK`, choose Yes and Registry Editor window will open.
  On the Toolbar click Edit -&gt; Find. In the dialog box, corresponding to Find What field, type WebClient. Uncheck Values and Data or otherwise, check only Keys below Look at. Click Find Next. It will search and should show an entry already selected. Make sure (at the bottom panel) the location of selected entry is 
  
  Computer/HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\WebClient.
  On the WebClient entry, click the right direction arrow to access the content inside it. 
  Click Parameters. On the right hand side, click BasicAuthLevel -&gt; Modify. In Value data field, change the value to 2 and click OK. 
  If there was no BasicAuthLevel entry then create it by doing Right-click in empty white space, choose DWORD (32-bit) Value and name it to BasicAuthLevel. Follow step 7.   
  Restart the system now for all changes to take effect. You will have to open MTP-Alternative app to connect the phone again to PC now.
  To map Phone Storage, open My Computer.
  Below the Address Bar click Map Network Drive. 
  In the corresponding Folder field, type \\192.168.42.129@8081 and click Finish. A window will open with the content of / directory of your phone.  
  If you have only Internal [SD card] in Smartphone then enter sdcard folder. Otherwise, enter storage folder and enter into your desired storage.
  You can  access this network drive in My Computer -&gt; Network Location. You can also rename this drive by doing Right-Click -&gt; Rename over the drive, enter the name and hit Enter. Note that the drive won't be accessible if the smartphone with above mentioned instructions is not connected to the PC. 
  
  
  (Source: ykasidit, Yeehawup, MTP-Alternative)


For Ubuntu (Linux) with KDE 4.1x:


Launch Dolphin file browser. In Places click Network. 
Click Add Network Folder -&gt; WebFolder (webdav).
Enter any Name, leave User field blank, enter 192.168.42.129 in Server field, enter 8081 in Port field. As per step 13 of Windows OS, type either /sdcard/ or /storage/ in Location field, check Create and icon for this remote folder and click Save and Connect. A window will open with the storage contents now.
The network location is saved in Places -&gt; Network -&gt; Name where Name is from step 3. You can also pin this folder into Places by doing over that folder Right-click -&gt; Add to Places.  




Method #2

This method utilizes ADB interface to access your phone storage. It has already been extensively covered by many users and some answers can be accessed here. To make it short, below are the instructions quoted from some answers by Android Enthusiasts users.

Installation of ADB in your OS


  In fact, it is not necessary to install the entire SDK if one does not want to use it for development. To be able to run basic ADB commands in the context needed by an average user, a rudimentary installation is completely sufficient. I will try to explain how to do this, and hopefully cover the most used computer systems.
  
  Requirements
  
  First, you will need the basic binaries. These can be found on the official download page, for Linux, Windows, and Mac.
  
  Windows users
  
  If your computer is running Windows, you will also need the special drivers for your device (no generic solution here, so you need to check this out yourself; usually, those drivers are offered for download on the manufacturer's website).
  
  Linux and Mac OS users
  
  Linux and Mac OS users might need to make their device known to their operating system. For Linux, you find the necessary steps described in my answer here. Not being familiar with Mac OS, I can not speak for it.
  
  Installation
  
  Linux
  
  For Linux, this is quite easy: Simply unpack the downloaded binaries into a directory of your choice. At the time I'm writing this, this will only be two files: adb and aapt (the latter being used by QtADB, and not necessarily needed to execute ADB commands directly). Adjust their file permissions to make them executable (e.g. from the command line: chmod 0755 adb aapt). Finally, it's a good idea to include the chosen directory with your $PATH variable, so you can call adb from wherever you are. A good place for that is at the end of your ~/.profile file to include an additional line like export PATH="~/bin:$PATH" (if you extracted the binaries to ~/bin).
  
  Windows
  
  The Windows download holds a couple more files. Also extract them into a directory of your choice. If you want them to be callable from wherever you are, without preceding the complete path, you need to add that path to your environment variables as well. Not being a Windows user, I must leave the "how to do this" to you.
  
  What else?
  
  You should be done at this point, and can use the full powers of the ADB command line.
  
  Further readings
  
  
  Everything about ADB (A reference for everyone at XDA Developers)
  ADB for Dummies (again available via XDA Developers. If you miss the guides as I did firstly: The first article is consisting of links only, colorful as they might look :))
  Android ADB Quick Guide
  
  
  (Source)


And,


  I do not really understand why anyone would prefer downloading an old version of unknown origin from a malware-ridden website to downloading the latest official version directly from Google itself. I guess to each its own.
  
  Here are the links to the Google repository:
  
  The latest version of the platform tools (contains just a few binaries - less than 10Mb in size each):
  
  
  Windows
  Linux
  Mac
  
  
  For users of Ubuntu and Debian (distributions I personally use) I have put together a small bash script which finds and installs the latest version of the platform tools - Installing Android platform tools (ADB) on Ubuntu
  
  (Source)


To access Phone Storage in Ubuntu (Linux) using ADB interface :


  I cannot answer the Windows part – but the Ubuntu part I can answer for sure, as I'm using that as well and mount my devices from my computer, sometimes with full r/w access. What I use needs ADB tools to be installed on your computer. If you didn't already install them, see e.g. Is there a minimal installation of ADB?
  
  Prepare your Droid
  
  First a basic requirement, applying to any OS which might run on your computer: To be able to get full access, the ADB daemon needs to be running in root-mode. This is not the case with stock ROMs, even if rooted, by default (though many custom ROMs have it enabled by default). So first check: If an "ordinary" adb shell directly brings you to the root-prompt (#) without invoking su, you're fine. Otherwise, you will need a helper like adbd insecure: Run it, and enable the "patched insecure mode". Optionally check the box to have that accomplished automatically on every boot of your device.
  
  Prepare for write access to read-only file systems
  
  Second, again independent from the OS on your computer: to read and write to file systems, they need to be mounted in read/write mode. You can accomplish that via adb shell anytime you need to write there (I don't recomment leaving those partitions in permanent read/write mode), e.g. issuing a mount -o remount,rw /system for the /system partition.
  
  Mount your Droid
  
  Now let's go for the specifics. I mount the Android file system via ADB, utilizing FUSE. The tool for that is adbfs-rootless. Compiling the code is easy given the instructions there; that done, copy the resulting adbfs binary to a directory in your $PATH. Then create a mount-point on your computer; in my example, I will use ~/droid for that. Now here we go:


# Mount the Android FS:
adbfs ~/droid
# Unmount it again:
fusermount -u ~/droid



  To ease the process, I've created two aliases:


alias mdroid="adbfs ~/droid"
alias udroid="fusermount -u ~/droid"



  You surely already have guessed: mdroid stands for "mount droid", udroid for "unmount droid".
  
  A different approach to manually mounting/unmounting is using Midnight Commander with a specific VFS: mc-extfs-adb is doing that. A version I've spefically adapted for Ubuntu is available in the download area at IzzyOnDroid, where you can simply pick it (installation instructions included).
  
  Both variants have their pros and cons: mc-extfs-adb takes quite a while on first access (while it caches the entire file system structure) – but then is pretty fast browsing the file system (as it is cached), only slowing down when you copy/edit files remotely. Using adbfs directly starts up much faster, but then always "hesitates" for a second when switching directories (as it does not cache the entire structure, but only reads on demand). I usually prefer the latter, but YMMV – hence I've given you both options :)
  
  (Source)


To access Phone Storage in Windows using ADB interface


  Windows File Explorer by default doesn't let you access the Android root files. You'll need to download a different application (to your PC) for that. Many places (like this guidingtech.com tutorial recommend Android Commander. Another recommended file explorer program is Droid Explorer.
  
  (Source)




Method #3

This method uses an app and USB Tethering. This method has roots in this answer (this answer only mentioned the possibilities but not the actual usage in steps).

Procedure: 


Download a file server app that allows WebDav/FTP/SSH/Samba server creation. You can either look on this list by Izzy here, or choose them viz., WebDav, FTP, Samba, SSH, Multifarious. Google is your friend if none of them helps.
Following Instructions are for {WebDav,FTP} Ultimate (Free) and Servers Ultimate Pro (Paid).


Using WebDav Server Ultimate :


Enable USB Tethering.
Launch WebDav Server Ultimate.
Go to Add -&gt; WebDAV Server -&gt;. 
Enter any name in Server Name. Choose a Port number greater than 1024 which you can remember (e.g. 5000) and enter it in Run on port.
In Document root, choose / to remain consistent with Method #1.
Uncheck all the options. You may choose to run this server automatically whenever you launch this app. To do so, check Start directly when app starts clean. Tap Back key once and choose Yes to save server settings.
Tap once on newly created server entry and choose Start/Stop. You will get a dialog box with Information The server has been started. You can close the app (including the server) by sliding left the many icons at the top of the app and choose Exit. Note that without choosing the Exit, the server will continue to run unless stopped explicitly.
You may now use procedure explained in Method #1 for either Windows or Linux. Note that for Windows, the address will now be \\192.168.42.129@5000 and for Linux, it will be webdav://192.168.42.129:5000/.


Using FTP Server Ultimate:


Enable USB Tethering.
Launch FTP Server Ultimate app.
Go to Add -&gt; FTP Server -&gt;. 
Enter any name in Server Name. Choose a Port number greater than 1024 which you can remember (e.g. 6000) and enter it in Run on port.
Uncheck all the options. You may choose to run this server automatically whenever you launch this app. To do so, check Start directly when app starts clean. Similarly, choose Respawn (auto restart when server crashed). 
Go to Users (adjacent to Settings at the top), tap Add, leave Username and Password blank and check Auto write access. You may choose to restrict the PC by choosing Force stay in document root. 
In Document root, choose / to remain consistent with Method #1.
Tap Back key once and choose Yes to save server settings.
Tap once on newly created server entry and choose Start/Stop. You will get a dialog box with Information The server has been started. You can close the app (including the server) by sliding left the many icons at the top of the app and choose Exit. Note that without choosing the Exit, the server will continue to run unless stopped explicitly.
You may now use procedure explained in for Linux. Note that for Windows, the address will now be ftp://192.168.42.129:6000 and for Linux, it will be ftp://192.168.42.129:6000/. To map ftp in Windows, follow the following instructions from Step 13.


Using Servers Ultimate Pro:
Note that this app requires certain other packages(free) to be installed.


Enable USB Tethering.
Launch Servers Ultimate Pro app.
Go to Servers. Tap + icon and scroll down to tap FTP Native Server. 
Enter Name, choose a Port number greater than 1024 which you can remember (e.g. 2121).
Under LISTEN ON NETWORK INTERFACE, choose rndis0 -Ipv4 (192.168.42.129).
Check Start directly when app starts.
In the LOCKS, check Enable WIFI lock.
At the top panel of the app, go to SPECIFIC and uncheck everything except Allow upload. 
In Document root, choose / to remain consistent with Method #1.
Touch floppy icon to save settings.
Tap the server entry once and choose Start. 
You may now use procedure explained in Method #1 for Linux. Note that for Linux, the network location will be ftp://192.168.42.129:2121/.
For Windows, follow steps 1-11 in Method #1 For Windows.
Click Connect to a website that you can use to store your documents and pictures.
A new windows with title Add Network Location will be shown. Click Next -&gt; Choose a custom network location -&gt; Next.
Under Internet or Network Address, type ftp://192.168.42.129:2121/sdcard/ and click Next. You can replace sdcard with storage.
Check Log on anonymously and click Next. Type a name to recognize this in future and click Next.
Check Open this network location when I click Finish and click Finish. A new window with your phone's storage content will show up.
Step 14 of Method #1 applies here too.


Note that for WebDav server in Servers Ultimate Pro, the settings are similar to one covered in aforementioned procedures in Method #3. 



About MTP-Alternative


  USB file transfers with PC - without 'MTP' problems.
  
  No more USB ‘MTP driver not found’ or ‘can’t find my files’ issues - Supports both Windows and Ubuntu GNU/Linux!
  
  'MTP-Alternative' shares this device's storage as a 'Drive' to Computers via USB Tethering instead of the default android 'MTP' file transfer method and makes you avoid the 3 common 'MTP' problems.


About WebDav Server Ultimate


  A free, secure and complete WebDAV Server! The app supports adding multiple users, has WebDAV over SSL/TLS (HTTPS) support and can be set to automatically start a WebDAV Server when your device is connected to a specific WIFI network!


About FTP Server Ultimate


  A free, secure and complete FTP Server for transferring files using an FTP client. The app supports adding multiple users, has FTPS Implicit / SFTP / SCP support and can be set to automatically start an FTP Server when your device is connected to a specific WIFI network!


About Servers Ultimate Pro


  ★★Run over 60 servers with over 70 protocols!★★
  
  Now you can run a CVS, DC Hub, DHCP, UPnP, DNS, DDNS, eDonkey, Email (POP3 / SMTP), FTP Proxy, FTP, FTPS, FTPES, Flash Policy, Git, Gopher, HTTP Snoop, ICAP, IRC Bot, IRC, ISCSI, Icecast, LPD, Load Balancer, MQTT, Memcached, MongoDB, MySQL, NFS, NTP, NZB Client, Napster, PHP, Lighttpd, PXE, Port Forwarder, RTMP, Remote Control, Rsync, SIP, SMB/CIFS, SMPP, SMS, Socks, SFTP, SSH, Server Monitor, Styx, Syslog, TFTP, Telnet, Time, Torrent Client, Torrent Tracker, Trigger, Unison, UPnP Port Mapper, VNC, VPN, Wake On Lan, Web, WebDAV, WebSocket, X11 and/or XMPP server! 




Note:


WebDAV may limit the file size upto 4 Gigabytes only.
File transfer through WebDav enabled by MTP-Alternative wasn't very responsive and created a cache size of 800 MB for me in Android.
2. issue didn't arise on Linux and worked smoothly.
I prefer Servers Ultimate Pro with FTP Native Server. It works flawlessly on both Windows and Linux for me.
I only use adb push|pull commands of Method #2 for data transfer. It is mentioned for covering the common options as an alternative.  
If you're rooted, then you can port forward in Servers Ultimate Pro.
There could be methods that I'm unaware of yet. Please post them as an answer.