A nice feature many Android devices offer is a microSD slot, and nicer still is the fact that the Android OS allows you to move many apps over to external storage to help free up space on the main device. For those with devices that offer lots of storage, this perk might not matter much, but for those with older or budget devices, it could be the only way that additional apps can be installed.
Take, for example, the HTC Legend I used to use, which offered a mere 160MB of storage space, or Sony’s Xperia Ray, which boosted that to a still-insulting 300MB. Sure, these devices weren’t expensive when new, but storage that limited is downright ridiculous. It’s no wonder, then, why so many users seek out ways to move apps to their SD card.
If you’re an Android user who’s moved apps before, chances are good that you’re well aware of the limitations. Some apps are deemed as too important by their developer, and thus can’t be moved via normal methods. Many apps that ship with the device can’t be moved either.
Ultimately, it’s up to the app’s developer to allow or disallow its move permissions, and even with the tweaks mentioned on this page (with the exception of using root), the apps still may not be movable afterwards. Your best bet would be to then email the developer and ask why, or go the way of rooting your phone so that you can force it. It shouldn’t be so complicated, but it is.
It needs to be stressed that even if an app (or game) can be moved, there are potential risks for going through with it. Here are some general guidelines of what not to move:
Apps That Shouldn’t Ever Be Moved
- Widgets: If you want to use a certain widget, don’t move the app that provides it.
- System Tools: Important tools might not operate well or at all on external storage.
- Important Apps: If you can’t afford a certain app becoming unavailable, don’t move it.
Consider that to be your first and final warning!
Things to bear in mind: Some apps may remain unmovable after these tweaks are applied, which is common of apps that come preinstalled on the device. In this instance, the best fix is to root the phone and either delete the app from the system’s ROM with Titanium Backup, or force the app to me moved with Link2SD. Either one of these options is required for Android 5.0 and later. It’s also important to note that even after certain apps are moved, some data is likely required to remain on the internal storage. Don’t consider these tweaks to be miracle solutions.
With that all covered, let’s get right to it.
Part 1 – Downloading Android’s ‘ADB’
NOTE! If you’re interested in running this tweak right on the device itself, rather than a computer, please refer to the fourth section, “Running The Tweak On The Device Itself“, as it can be a major time-saver.
The first step to running this tweak on a computer is downloading Android’s ADB tool. That acronym stands for “Android Debugging Bridge”, a protocol that allows users to interface with their phone as if they were accessing a command prompt on the device itself.
There are three options for acquiring ADB and its related files.
The easiest method is to download it from our servers:
Once the archive is downloaded, extract it to a location of your choice, and then move onto Part 2. Alternatively, you can procure the correct files via these other means:
For Linux users, ADB can often be installed via a distro repository. In Ubuntu, for example, ‘sudo apt-get install android-tools-adb‘ will install it in a flash. For other distros, a simple Google search should help. In some cases, adding a third-party software source might be required. If ADB can’t be installed through a repo, move on to the next method.
For those who would rather download the tool on their own, it can be grabbed here. You’ll have the option to download a developer suite called Android Studio, or the standalone SDK tools. You’ll want to go with the second option, as it’s a much smaller download and doesn’t need to be installed. Unfortunately, Java is required regardless of which route you take.
In Windows, the “android” file in the “tools” folder can be double-clicked. In OS X and Linux, a terminal needs to be opened that the “android” file can be dragged and dropped into. That will enter the exact path into the terminal, at which point you can hit enter and the SDK manager will load. In all OSes, it’ll look like what’s seen below. From here, the SDK Platform-tools can be checked and installed (I’d recommend clicking “Deselect All” and selecting only the platform tools.)
Once the platform tools are installed, ADB will be found in a folder called “platform-tools” somewhere on the machine. As seen in the above screenshot, the install folder can be wherever the folder was extracted to. You are free to move the folder somewhere else before running the ‘android’ application.
Part 2 – Setting Up Your Phone Or Tablet
What needs to be configured on a device can vary, but often, enabling the “USB debugging” option in the developer menu is enough. If this menu isn’t present in the main menu of the system settings screen, you’ll need to go to the “About phone” or “About tablet” section and look for “Build number”. Sometimes, this is located right inside this menu; other times it can be nestled inside another (eg: “Software Information”). Tap the build number seven times, and the developer options menu will be unlocked.
If enabling USB debugging alone isn’t enough, you’ll want to fish around for other USB-related options. One thing worth checking is whether or not the phone is set to “MTP” mode. Having this option disabled shouldn’t matter, but on some devices, it could.
If running Windows: before connecting the device to the computer, you’ll want to make sure that its official drivers are installed. Note that whether or not you’re able to access the device’s storage from within the computer when it’s connected is unrelated to interacting with it through ADB. Almost always, you’ll need to go out of your way to install a driver. Starting here is a good idea. If the official driver doesn’t help, or you can’t find one, you may wish to try installing Intel’s ADB driver, meant to be used in conjunction with Intel USB ports.
If that fails, I’d recommend heading to Google and searching for your exact device along with “official driver” or “ADB” (eg: “Sony Xperia Ray official driver”.) Otherwise, you’ll be forced to run the tweak on the device itself (so scroll down to part 4!)
Part 3 – Moving Apps On Android 4 & Earlier
With the software and device prepped, it’s time to connect the Android device to the computer, load up a command prompt or terminal, and head to the ‘platform-tools’ folder. If you’re on Linux and installed ADB through your distro’s repository, chances are good that you can simply open a terminal and be set (running the ‘adb’ command, without quotes, will verify that). For everyone else, there are a few ways to go about this.
The most common method is to manually type in the commands that will bring you to that folder; eg: in Windows: ‘cd C:\Users\Username\Downloads\platform-tools‘. Alternatively, you can:
In Windows: Open the ‘platform-tools’ folder, and while holding Shift, right-click an area inside the folder and choose “Open command window here”. An example can be seen below:
In OS X: Open System Preferences and then go to the Keyboard section. From here, click on the Shortcuts tab, and then Services to the left. In the list to the right, scroll down and enable the “New Tab At Folder” option. Right-click the ‘platform-tools’ folder afterwards and choose “New Tab At Folder”. Here’s an example.
In Linux: Open the ‘platform-tools’ folder and right-click an area inside to see if it offers you the ability to open a terminal right there. If it doesn’t, open a terminal manually and move to the folder (eg: ‘cd Downloads/android-sdk-linux/platform-tools’). Here’s an example.
Once a command prompt or terminal is opened and you’re in the right location, the first thing to do is see if the computer can see the device. Typing in ‘adb devices’ can take care of that. Be sure to uninstall Android emulators (eg: Bluestacks) before attempting this tweak, and make sure no other Android devices are plugged in. Just one device should be present, as seen in the example below.
A random string of numbers and “device” following it means that the computer can interact with it just fine. If it says “unauthorized”, it means that you’ll need to keep the phone unlocked and grant permission for the access (it’s an automatic pop-up). Running ‘adb devices’ again should properly show the device.
The basic commands are:
adb shell pm getInstallLocation (To see what it’s set to.)
adb shell pm setInstallLocation 2 (To set it to external storage.)
adb shell pm getInstallLocation (To verify that the tweak worked.)
(0 = Auto; 1 = Internal Phone Storage; 2 = microSD External Storage
Android 4 and newer:
adb shell pm get-install-location (To see what it’s set to.)
adb shell pm set-install-location 2 (To set it to external storage.)
adb shell pm get-install-location (To verify that the tweak worked.)
(0 = Auto; 1 = Internal Phone Storage; 2 = microSD External Storage
Note: As seen in the above screenshot, an alternative method is to type ‘adb shell’ first, which essentially logs you into the device. Then the commands can be run without ‘adb shell’ at the start. The ‘su’ command seen in the same screenshot is only necessary if the device is rooted (and that should only matter for Android 5+.)
Note: In Mac OS X and Linux, each command might need to be prefaced with a dot and a backslash ( ./ ). The exception would be if you installed ADB through a repository in Linux. Here are example shots from Mac OS X and Linux.
Once the storage location is set to “2”, you can check through the apps that were unmovable and see if the situation has changed. Below is an example of an app that was unmovable before the tweak, and movable afterwards.
Figuring out which apps can or can’t be moved is the most tedious part of using Android, but fortunately, apps exist to make the chore a lot easier to deal with. One solution I’ve used is an app called “App 2 SD“, as it’s both free and intuitive.
If you compare these two screenshots, the tweak was extremely effective in this particular case. If you’re not so lucky, and you’re still desperate for space, you should consider rooting your device and either using Link2SD to force the apps to move, or use Titanium Backup to delete the apps you’ll never use from the system ROM. The latter is something you’ll want to be careful with, but the former is something I talk about in part 5.
Part 4 – Running The Tweak On The Device Itself
Tweaking the “Move to SD” option on the device itself can save a lot of time versus doing it on a computer, though it can still be a little tedious. The first step is to hope that you have sufficient free space for a terminal emulator, and if so, the second step is to go to the Play Store and download one. I don’t have a particular preference, but this one has served me well. Note: This method of tweaking requires the device to be rooted.
After opening, the commands can be run right away. Because we’re already inside of the shell, ‘adb shell’ does not need to preface the rest of the commands. So ‘adb shell pm get-install-location’ will simply become ‘pm get-install-location‘. If for some reason the commands do not work and the device is rooted, enter ‘su’ (making sure to grant permission on the device), and then proceed with the commands.
In the emulator I used, typing the commands out proved to be a real chore. ‘su’ wants to become ‘sure’, as one example. If you’re stuck, and the application wants to keep changing what you’re trying to write, type in a comma right before a space, delete it, and then hit space to continue with the next part.
If the command set just fine, you can refer to the latter half of part 3.
Part 5 – Moving Apps On Android 5.0 & Beyond
For the most part, the “Move to SD” mechanic on Android 4 and earlier is good. It’s a bit of a chore to tweak, but it can at least be pulled off without having to root the phone. We’re not so lucky when it comes to Android 5+. After all of the comments I’ve seen up to this point, I think it’s safe to say that this tweak will not work on Lollipop (and probably Marshmallow) unless the device is rooted.
If that’s not bad enough, even more has to be done if we’re to take proper advantage of Link2SD, the app that will allow us to move apps to external storage through sheer force.
By default, Android will format external storage as FAT or exFAT, which is fine for regular storage, but poor for applications. This boils down to the lack of support for the permissions system Android uses. That means that in order to take advantage of Link2SD’s move ability without running into issues, your microSD card will need to be split into two partitions; one for regular storage, and the other for Android app storage.
Important: You don’t have to go through the hassle of repartitioning, but it could cause issues with certain apps that rely on being able to read and write permissions. Your mileage will vary if you decide to take this route.
To take care of the partitioning, I’d recommend using an open-source tool for the PC called GParted. It can be downloaded here, and can either be burned to a CD, or copied to a flash drive (instructions are found at the link). If you have a USB flash drive of at least 4GB, and the data can be backed-up, I’d recommend downloading the ISO and copying it over to the drive using Rufus.
After making absolute sure that the data on your microSD card is backed up, unmount it through Android’s “Storage” section. You can then plug the card into your computer (via an adapter or card reader), and open up GParted. You’ll see a screen like this (make sure that the proper drive is selected in the top-right drop-down menu):
There should just be one partition, and if it happens to be “fat32”, you’re in luck: you’ll just need to shrink that partition in order to make room for the new one. If it’s exFAT, the partition will have to be destroyed, as GParted doesn’t support the file system due to licensing issues. My card was formatted in Android to exFAT, so what I did was delete all of the partitions, and then create a FAT32 partition for storage that uses about 80% of the card’s available space, and then created an “ext4” partition using the remaining space. After configuring the partition layout to your liking, you can apply the changes, and then eject the card.
Note: exFAT will be required if files greater than 4GB will need to be stored. To pull this trick off, you’ll need to find a partitioner (in Windows, likely), that can handle both exFAT and ext for both reading and writing.
After that’s all dealt with, the card can be returned to the mobile device, and the device can be booted back up. Once Link2SD is opened, it’ll automatically detect the partition setup, and then ask you what file system you made the partition that will store the app data. In my case, I used ext4.
With that configured, we can get to moving some apps to the SD card. As with the tweak with Android 4 and earlier, there are cases when 100% of an app’s data cannot be moved; but most will be. This is the case with Grand Theft Auto Vice City, which I am using for this example. Originally, the entire 1.4GB game is stored on the phone, but after moving, most of the data is moved while 10MB remains on the device itself.
This leads me to another important point: Link2SD’s free version can move just the app itself. If you’re looking to move a massive application that has additional data, such as this one, the paid version will be needed. Fortunately, it costs about $2, which I consider well worth it for the amount of future headache it will save you.
Once an app is moved to the SD card, Link2SD’s main program list will reflect it. One thing I found interesting in testing is that while GTA Vice City was unmovable before Link2SD got involved, the unusable “Move to SD card” button became “Move to device storage” after the tweak. Why this is notable is that it proves that Android could allow the app to move over using the same tweak we use in Android 4 and earlier.
Oh well… at least there are other options!
This article was originally published on December 21, 2011, and was updated in September 2013, and October 2015.