06 March 2014

KitKat and removable SD cards

There has been a lot of panic and online discussion lately as Samsung (edit: and now Sony) have started rolling out KitKat to their devices, and people have suddenly found that things don't work as they used to with their SD cards.

Headline News:  SD cards have NOT stopped working - but some methods that apps used to use will no longer work.

Back when Honeycomb was released, Google introduced a new method of accessing SD cards, which was largely ignored at the time, but is now being implemented by Samsung (and maybe by other manufacturers who have devices with MicroSD card slots).  There's a long Android Police article about it, but here's the TL;DR version.
  • Every app still has read access to every file on your SD card.
  • Every app can still write to your SD card, but it will have to use one of the new methods.  Simply having write access to the card won't work any more. 
  • You do NOT need to root your device to regain write access to your SD card.
If your app doesn't support one of the new methods of writing to the card, you need to contact your app developer to ask them to update their app.  Be nice:  this change has rather been sprung on developers without much warning, so use whatever feedback method they request, rather than leaving a bad review in the Play Store.

Apps can use the following methods to gain write access to your SD card:
  • A private folder, which is created programmatically by the app, and will be named according the app's package name, e.g. Android/data/com.example.foo (to steal Android Police's example).  This is appropriate for apps which download and otherwise manipulate files on your behalf, without you ever knowing or needing to know their filenames or location (e.g. podcatchers).
    NB: If you uninstall the app, this folder and all the files in it will automatically be removed from your card
  • Use the Storage Access Framework.  This is appropriate for apps that use a file picker to allow you to open / edit a particular file (e.g. document editors).
  • MTP (Media Transfer Protocol) which has historically (well, recently,) more commonly been used by PCs (rather than apps on the device itself) to transfer and manipulate files when your device is attached to a PC as a mass storage device.  Anecdotally, it does seem to be slightly unreliable in some cases.  This is appropriate for apps that mass-manipulate general files and folders under user control, such as file managers. 
Unfortunately, the mechanism to create and use the special private folders was only introduced with KitKat, so there's a Catch-22 situation in that it's not possible for apps that take that approach to proactively move files they've previously had access to into a private storage folder before a KitKat update.  That means that each app will have to wait until after the update to move them, and you'll need to then use some other method (i.e. a file manager) to tidy up the files that they can't delete on your behalf.  Alternatively, you could temporarily move their files to your internal storage (if you have room) before the update, and back to the SD card, in the new private folder after the KitKat update. Update: Actually, this is not true.  There is nothing special about the folder on an SD card other than its name and path. 

Apps that have been updated / do work

  • BeyondPod 3.3.68 / 3.30.68 onwards (private folder)

Apps that don't yet work (can read, but not write/delete)

  • MX Player
Please feel free to feedback apps that you know of that do or don't work with SD cards on KitKat, and I'll update the list above.  (As you can see, this started as a very short list!)

No comments: