What is "App2SD"?
First, it is a generic term for methods to move apps from the device's (often quite limited) internal-storage to an sd-card. Originally, the latter was the external-sd. With more recent devices, it might as well be the internal-sd.
Second, there are different methods around today (see also the "historical part" below). Rawly:
- App2SD as it was introduced to stock-rom starting with 2.2-froyo. Here an app must explicitly support to be moved (the developer must specify that in the apps
Manifest); it may not feature e.g. any service or widget (as they would break when the SDCard is unmounted/removed), and it may not request to be started right after boot (
boot_completed, as that event is fired before the SDCard becomes available)
- App2SD+ is as described in the historical part below. It requires the SDCard to be partitioned. While Android only offers the first partition found on a SDCard to be mounted to the PC, the second remains available to the device. Thus services and widgets won't break, and almost any app can be moved without explicitly supporting it. A comparable method is used by link2sd. This method is available with some custom-roms
- link2sd also uses a second partition on the SDCard. Other than above methods (which still leave parts of the apps in internal storage), Link2SD moves the complete app to the SDCard, and symlinks it to its original place on internal storage -- thus fooling the system into thinking it would still be there.
While above methods can be used to move the app, not all of them move data or the Dalvik executables (DEX, see odex). So if your device is rooted, and your internal storage very limited, you might be interested in e.g. Data2SD, which also moves the apps data (e.g. Data2SD, which uses an "embedded ext2 partition" for this issue – but was not updated since 2011). Then there's also Simple2Ext (S2E), moving app, data, and some cache. Or DirectoryBind to move selected directories to SDcard. And there might be more I'm not even aware of...
Why can't I move with App2SD?
There are certain conditions to be met to make an app "movable". If an app provides some service or widgets, or wants to be started directly after boot, it cannot go to an external SDCard, for example: the card is only mounted after
boot_completed (which would prevent auto-start), and it might be removed (which would break services and widgets). There are several more exceptions, plus finally the developer must explicitly mark the app "movable".
So much in "easy terms". If you are interested in details, please refer to the corresponding API guide page.
Some history from the beginnings in CyanogenMod
The CyanogenMod wiki has some good information about Apps2SD. In CM5 and earlier, the term referred to what is now called Apps2EXT, which required partitioning your SD card to have a secondary EXT partition. This was used to trick the Android system into thinking that apps were on the main storage rather than the SD card, allowing you to move any app to SD.
In CM6+, the term refers to the method where app preferences are ignored and apps can be moved to the SD card even if their default is for the internal storage. Certain apps, such as those that run services, cannot be moved to the SD card; this is because the system starts services before the SD card is initialized, and some services need to run even when the SD card is removed from the system.