If we look at the Android application info on device with Android 2.2 and above there is button which will have label Move to SD card or Move to phone and in some cases this button is disabled with label Move to SD card.
This button is controlled by android:installLocation manifest attribute.
There are different values to this attribute:
In case of app installed on external storage only .apk file is saved on the external storage, but all private user data, databases, optimized .dex files, and extracted native code are saved on the internal device memory.
Caution should be taken while declaring app to be installation on external storage as whenever external storage get unmounts or removed, the application get killed and becomes unavailable for user. If in the application, below services are to be used then value should be set to internalOnly:
This button is controlled by android:installLocation manifest attribute.
There are different values to this attribute:
- internalOnly (default value):
If the value is such then the application must be installed on the internal device storage only and it will never be installed on the external storage. If the internal storage is full, then the system will not install the application. This is when button in application info is disabled with label Move to SD card. - auto:
If the value is such then the system will install the application on the internal storage by default. If the internal storage is full, then the system will install it on the external storage. - preferExternal:
If the value is such then the application prefers to be installed on the external storage. There is no guarantee this as application might be installed on internal storage if the external media is unavailable or full.
In case of app installed on external storage only .apk file is saved on the external storage, but all private user data, databases, optimized .dex files, and extracted native code are saved on the internal device memory.
Caution should be taken while declaring app to be installation on external storage as whenever external storage get unmounts or removed, the application get killed and becomes unavailable for user. If in the application, below services are to be used then value should be set to internalOnly:
- Services
- Alarm Services
- Input Method Engines
- Live Wallpapers
- App Widgets
- Account Managers
- Sync Adapters
- Device Administrators
- Broadcast Receivers listening for "boot completed"