Android - Unable to move few Apps to SD Card

An app must explicitly support App2SD, or you cannot move it to the card. There are several reasons why an app might not support it:

  • using widgets (both mentioned apps seem to fall into this category. AK Notepad: "Pin notes to your home screen"; Any.DO: "You can even add our widget to your homescreen")
  • running a service

As the sdcard would be unaccessible when connecting to a computer, both things would "crash" (as they could no longer access their data etc.). Of course there's always the possibility the developer simply didn't care -- in which case you should contact him and ask.


There are some factors that may affect this:

  1. An app must explicitly declare that it's preferable/possible to be installed on SD card.

    Beginning with API Level 8, you can allow your application to be installed on the external storage (for example, the device's SD card). This is an optional feature you can declare for your application with the android:installLocation manifest attribute. If you do not declare this attribute, your application will be installed on the internal storage only and it cannot be moved to the external storage.

    (Emphasis mine)

  2. An app is set to compile using API 7 (Froyo) or lower, which doesn't support installing an app on SD card (even if it's installed on GingerBread or newer devices)

    The ability for your application to install on the external storage is a feature available only on devices running API Level 8 (Android 2.2) or greater. Existing applications that were built prior to API Level 8 will always install on the internal storage and cannot be moved to the external storage (even on devices with API Level 8). However, if your application is designed to support an API Level lower than 8, you can choose to support this feature for devices with API Level 8 or greater and still be compatible with devices using an API Level lower than 8.

    (Emphasis mine)

The reasons why some apps are not preferable to be installed on SD card are as following:

When the user enables USB mass storage to share files with their computer (or otherwise unmounts or removes the external storage), any application installed on the external storage and currently running is killed. The system effectively becomes unaware of the application until mass storage is disabled and the external storage is remounted on the device. Besides killing the application and making it unavailable to the user, this can break some types of applications in a more serious way. In order for your application to consistently behave as expected, you should not allow your application to be installed on the external storage if it uses any of the following features, due to the cited consequences when the external storage is unmounted:

  • Services

    Your running Service will be killed and will not be restarted when external storage is remounted. [...]

  • Alarm Services

    Your alarms registered with AlarmManager will be cancelled. [...]

  • Input Method Engines

    Your IME will be replaced by the default IME. [...]

  • Live Wallpapers

    Your running Live Wallpaper will be replaced by the default Live Wallpaper. [...]

  • App Widgets

    Your App Widget will be removed from the home screen. When external storage is remounted, your App Widget will not be available for the user to select until the system resets the home application (usually not until a system reboot).

  • Account Managers

    Your accounts created with AccountManager will disappear until external storage is remounted.

  • Sync Adapters

    Your AbstractThreadedSyncAdapter and all its sync functionality will not work until external storage is remounted.

  • Device Administrators

    Your DeviceAdminReceiver and all its admin capabilities will be disabled, which can have unforeseeable consequences for the device functionality, which may persist after external storage is remounted.

  • Broadcast Receivers listening for "boot completed"

    The system delivers the ACTION_BOOT_COMPLETED broadcast before the external storage is mounted to the device. If your application is installed on the external storage, it can never receive this broadcast.

If your application uses any of the features listed above, you should not allow your application to install on external storage.

(Some parts are redacted. They are explaining what developers have to do to make their apps working properly after the SD card is remounted.)

Note: this answer serves as general information to "Why some apps cannot be moved to SD card"

Source: Android Developers: App Install Location.