24 September 2014

Saving Your Android Media Purchases to External SD

My Android modding days are mostly behind me, but I recently found a solution to something that's been bugging me for a while and thought I'd share. More and more devices declare a chunk of internal storage "/sdcard," and many media apps with storefronts have no settings to let you save their content anywhere else. After Google Play Music added a download location setting (only in devices running KitKat, 4.4.1 or later), my worst offenders were Audible and Comixology. I was constantly having to delete old content and limit myself as to how many items I could have on hand to keep space free for apps, despite the nearly empty 64GB SD cards in both my phone and tablet.

This kind of finicky, not-enough-settings issue is exactly what Xposed Framework modules do best. From a user standpoint, Xposed itself doesn't do anything. It provides a framework where developers can plug in specialized apps, called modules. The module that saved the day for me was XInternalSD. 

Your device will need to be rooted with Unknown Sources enabled to install Xposed. If you don't know what those terms mean, you probably don't want to proceed. As usual, I hope you find this information helpful, but I am in no way responsible for anything YOU do to YOUR device. Make a NANDROID backup before you start messing with Xposed.

Before you start

Hopefully you have a file manager (I like ES), and I would recommend a storage visualizer like DiskUsage for tracking down where your data is now and making sure it gets where you want it to go. You may also want to track down the package names of all the apps you want to redirect to the external SD, though you can also let XInternalSD try to point anything and everything to external. The easiest way to get package names is to look up the app on Google Play in a web browser. The part of the URL following "id= " is the package name, for instance com.audible.application for Audible. 

Setting up XInternalSD

  1. Make a backup!
  2. Download and install the Xposed Framework app.
  3. Open the app, tap "Framework," and "Install".
  4. Go back and tap "Download".
  5. In the search (Magnifying glass up top) type "xint".
  6. Tap XInternalSD, swipe left to the Versions tab, and download latest release.
  7. Install, then hit Done.
  8. Go back to main menu (or until you have a drop-down menu up top) and choose "Modules".
  9. Check the box for XInternalSD, then tap XInternalSD to get to its settings.
  10. For "Path to internal SD card" you probably* want "/storage/sdcard1".
  11. Whether you want "Enable for all apps" checked is up to you. If yes, you don't need to list any package names. If you just have two or three apps in mind, I would say uncheck the box and list them individually.
  12. Reboot your device.

*Devices may vary, and apps will be picky about the path you use. Neither "/sdcard1" nor "/ext_card" worked for me, even though both are valid paths to the same place. I would just confirm in a file manager that there is a path "/storage/sdcard1" to the external card and, if so, use it. 

Setting up your media apps

Manually move your old data folders from the internal to external SD card. It'll be faster than re-downloading any content you already have on hand, and some apps will need to see a folder at the new location or they'll just keep saving internally. Most data folders will either be under "/sdcard/" or "/sdcard/Android/data/" or sometimes "/sdcard/". Make sure you duplicate the "/Android/data/" folder structure at /sdcard1. 

You may need to uninstall/reinstall some apps, too, or at least clear their cache. I reinstalled Audible on both my phone and tablet in the course of troubleshooting, but it may not have been strictly necessary. Comixology did not need any troubleshooting.

If this is your first Xposure (sorry), you'll probably find modules to take care of other annoyances, too. I ended up with almost a dozen on my un-ROM-able Jellybean phone, and four or five on my CM11 tablet.