Заметил это очень странное поведение с приложением Android. Примерный сценарий:
- Версия A установлена на устройстве
- Приложение работает нормально
- Версия B установлена на устройстве (B> A)
- Приложение работает нормально
- Устройство выключается из-за разряда батареи
- Устройство включено
- Версия A приложения снова запускается на устройстве
Дополнительная информация:
- Приложение не распространяется через Google Play, но устанавливается локально через USB-соединение (ПРИМЕЧАНИЕ: приложение работает в рабочем режиме; оно не устанавливается через AndroidStudio).
- киоск
- Android 5.1 (API 22)
Я думаю, у меня есть два вопроса:
- Почему устройство кэшировало старую версию APK (и где оно кешировало ее)?
- При каких обстоятельствах приложения могут откатиться к предыдущим версиям?
Изменить (дополнительная информация):
- Похоже, после отката APK приложение теряет некоторые разрешения (может быть, даже все). Функциональность, которая работала до прекращения отката из-за исключения SecurityException из API-интерфейсов Android. Это происходит, даже если эта версия Android еще не имеет прав доступа!
- После просмотра файловой системы планшета, я действительно вижу APK - приложений несколько проживающего в сходных путях:
/data/app/com.myapp-2/base.apk
,/data/app/com.myapp-3/base.apk
и т.д.
Моя текущая гипотеза заключается в том, что разряд батареи приводит к тому, что планшет «сбрасывает» свое состояние (например, часы также сбрасываются), а при повторном включении он путает APK-файлы приложения и загружает неправильный.
Тем не менее, я понятия не имею, почему он это делает, или как предотвратить такое поведение.
Ответы:
Если вы используете Android Studio 3.5+, то вместо мгновенного запуска вы, вероятно, используете Apply Changes.
Это другой способ доставки изменений на устройство, без переписывания apk, поэтому имейте большой смысл, что после перезагрузки apk, который вы запустите, если вы запустите приложение прямо на устройстве, не имеет ничего общего с это было раньше
https://android-developers.googleblog.com/2019/08/android-studio-35-project-marble-goes.html
источник
Здесь перечислены установленные пользователем пакеты:
А затем полностью удалить перед повторной установкой:
При мгновенном запуске и без применения патча APK (см.
pm
Вывод справки) это может запустить базовый APK. Это ничего не отменяет, но, скорее всего, один APK без другого перегруженного APK (Android Studio может автоматизировать применение исправления, но во время загрузки это может быть не так). Не используя мгновенный запуск удаляет эти обновления обновления APK; и когда есть только один APK, запускать больше нечего.источник
Хитрость здесь в коде версии. При установке новой версии убедитесь, что новая версия имеет другой код версии . Android OS использует коды версий, чтобы различать разные версии одного и того же APK, так что это будет работать.
Не совсем понятно, почему происходит этот откат. Это, очевидно, странная проблема, специфичная для конкретного устройства, но, тем не менее, за это может ответить множество факторов, в том числе установщик устройства по умолчанию, настройки хранения / кэша, память устройства, вирусы и т. Д.
Надеюсь, это поможет. Веселого кодирования!
источник