На це можуть вплинути деякі фактори:
Додаток повинен чітко заявляти, що бажано / можливо встановити на SD-карту.
Починаючи з рівня 8 API, ви можете дозволити встановлення вашої програми на зовнішній сховище (наприклад, SD-карта пристрою). Це необов'язкова функція, яку можна оголосити для вашої програми за допомогою android:installLocation
атрибута маніфесту. Якщо ви не декларуєте цей атрибут, ваш додаток буде встановлено лише на внутрішній сховище, і він не може бути переміщений до зовнішнього сховища .
(Наголос мій)
Додаток налаштовано для компіляції за допомогою API 7 (Froyo) або нижче, який не підтримує встановлення програми на SD-карті (навіть якщо він встановлений на GingerBread або новіших пристроях)
Можливість вашої програми встановлювати на зовнішній сховище - це функція, доступна лише на пристроях, на яких працює API рівня 8 (Android 2.2) або вище. Існуючі додатки, які були створені до рівня API 8, завжди встановлюватимуться на внутрішній сховище і не можуть бути переміщені до зовнішнього сховища (навіть на пристроях з рівнем API 8) . Однак якщо ваша програма призначена для підтримки рівня API нижче 8, ви можете вибрати цю функцію для пристроїв з рівнем API 8 або вище та все ще бути сумісним із пристроями, що використовують рівень API нижче 8.
(Наголос мій)
Причини, чому деякі програми не бажано встановлювати на SD-карту, такі:
Коли користувач дозволяє USB-накопичувачу для обміну файлами зі своїм комп’ютером (або іншим чином відключить або видаляє зовнішню пам’ять), будь-яка програма, встановлена на зовнішньому сховищі та на даний момент працює, вбивається. Система фактично не знає про програму, поки масове зберігання не вимкнено та зовнішній накопичувач не перезавантажиться на пристрої. Окрім того, що вбиває додаток і робить його недоступним для користувача, це може зламати деякі види додатків більш серйозно. Для того, щоб ваша програма послідовно вела себе так, як очікувалося, ви не повинні дозволяти вашій програмі встановлюватись на зовнішній сховище, якщо вона використовує будь-яку з наведених нижче функцій, через цитовані наслідки, коли зовнішній накопичувач відключений:
Послуги
Ваша робота Service
буде знищена і не буде перезапущена, коли зовнішнє сховище буде перераховано. [...]
Служби сигналізації
Ваші сигнали тривоги зареєстровані AlarmManager
будуть скасовані. [...]
Двигуни методу введення
Ваш IME буде замінено IME за замовчуванням. [...]
Живі шпалери
Ваші запущені Живі шпалери будуть замінені Живими шпалерами за замовчуванням. [...]
Віджети додатків
Ваш віджет програми буде видалено з головного екрану. Після ремонту зовнішнього сховища ваш віджет програми не буде доступний для вибору користувача, поки система не скине домашню програму (як правило, до перезавантаження системи).
Менеджери облікових записів
Ваші облікові записи, створені за допомогою AccountManager
, зникнуть, поки зовнішнє сховище не перераховано.
Синхронізатори
Ваш AbstractThreadedSyncAdapter
та всі його функції синхронізації не працюватимуть, поки зовнішнє сховище не буде перероблено.
Адміністратори пристроїв
Ваші DeviceAdminReceiver
та всі його можливості адміністратора будуть відключені, що може мати непередбачувані наслідки для функціональності пристрою, які можуть зберігатися після перезарядки зовнішнього зберігання.
Транслятори трансляції прослуховування "завершено завантаження"
Система забезпечує ACTION_BOOT_COMPLETED
трансляцію до монтажу зовнішнього накопичувача на пристрій. Якщо ваша програма встановлена на зовнішньому сховищі, вона ніколи не може приймати цю трансляцію.
Якщо ваша програма використовує будь-яку з перелічених вище функцій, ви не повинні дозволяти вашій програмі встановлюватись на зовнішньому сховищі.
(Деякі частини відредаговані. Вони пояснюють, що розробники повинні зробити, щоб їх програми працювали належним чином після перезарядження SD-карти.)
Примітка . Ця відповідь слугує загальною інформацією на тему "Чому деякі програми не можна перемістити на SD-карту"
Джерело: Android Developers: Location Install Location .