Чому додаток Android повертається до попередньої версії після відключення пристрою?


11

Спостерігав це дуже дивне поведінку за допомогою програми Android. Орієнтовний сценарій:

  1. Версія A, встановлена ​​на пристрої
  2. Додаток працює добре
  3. Версія B, встановлена ​​на пристрої (B> A)
  4. Додаток працює добре
  5. Пристрій вимикається через розряджання акумулятора
  6. Пристрій увімкнено
  7. Версія 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 додатків і завантажує неправильний.

Однак я не маю поняття, чому б це зробити чи як запобігти такій поведінці.


Я також зіткнувся з такою поведінкою. можливо, це відбувається через миттєвий запуск, оскільки він розбиває apk, а перезавантажувальний пристрій порушує процес і зворотний відкат до попередньої версії.
touhid udoy

Ви використовуєте різних користувачів на цих пристроях? Може, гостьова сесія до однієї?
tynn

Це може бути залежно від пристрою (налаштування кеша за замовчуванням). Ви протестували на інших пристроях?
Таслім Осені

Ви тестували це на емуляторі Android?
Сквіт

@TaslimOseni, є одна конкретна модель планшета, що використовується для розгортання в полі. Крім того, це не те, що легко відтворюється. Ми його бачили лише один раз у лабораторії.
Василь

Відповіді:


2

Якщо ви користуєтесь Android Studio 3.5+, тоді замість миттєвого запуску ви, ймовірно, використовуєте Застосувати зміни.

Це відрізняється способом доставки змін на пристрій, не переписуючи apk, тому майте багато сенсу, що після перезавантаження, apk, який ви будете запускати, якщо виконувати додаток безпосередньо на пристрої, не має нічого спільного з одним що працював раніше

Застосувати зміни

Миттєвий запуск та реструктуризація та впровадження з нуля більш практичного підходу в Android Studio 3.5 під назвою Apply Changes. Apply Changes використовує API, орієнтовані на платформу від Android Oreo та новіших версій, щоб забезпечити надійне та послідовне поведінку; на відміну від миттєвого запуску, застосувати зміни не змінює ваш APK.

https://android-developers.googleblog.com/2019/08/android-studio-35-project-marble-goes.html


Ця проблема трапляється у виробництві, і додаток не встановлено на пристрої через AndroidStudio. Що стосується миттєвого запуску чи застосування змін?
Василь

о, вибачте, я припустив це, оскільки ви згадали "Додаток не поширюється через Google Play, а встановлено в приміщенні через USB-з'єднання", тому я автоматично подумав про Android Studio. Після вашого оновлення зрозуміло. Я подумаю ще трохи ...
Карлос Роблес

1

У цьому списку перелічені встановлені користувачем пакети:

adb shell cmd package help

pm list packages -f -U -3 --show-versioncode

А потім повністю видаліть перед перевстановленням:

adb uninstall com.myapp

При миттєвому запуску та не застосуванні патчу APK (див. pmДовідку), це може запустити базовий APK. Це нічого не відмовляє, але, ймовірно, один APK без іншого APK перевантажений (Android Studio може автоматизувати застосування гарячого патча, але під час завантаження це може бути не так). Не використовуючи миттєвий запуск, видаляє ці оновлення APK оновлення; і коли є лише один APK, більше нічого не можна запускати.


3
Вибачте, не бачу, як це відповідає на жодне моє запитання. Я також можу перейти і вручну стерти ці файли через ADB, але в цей момент я хочу зрозуміти, чому це відбувається.
Василь

@Vasiliy, ймовірно, тому, що Dalvik VM по-різному обробляє патч миттєвого запуску APK. Справжнє питання полягає в тому, чому існують навіть два різні екземпляри нібито однієї і тієї ж речі в різних версіях?
Мартін

Я не впевнений, що миттєвий запуск пов'язаний із усім цим. APK не було встановлено через AndroidStudio. Як ви кажете, одне із запитань - "чому є кілька примірників APK для одного і того ж додатка", але я не бачу, як відповідь на нього відповідає ...
Василь

@Vasiliy не повинно бути декілька APK для початку - і якщо, тоді потрібно застосувати патч APK. Існує різниця між "застосувати зміни" та часом завантаження.
Мартін

1

Чому пристрій кешував старішу версію APK (і де він її кешував)?

Хитрість тут полягає в коді версії. Встановлюючи нову версію, переконайтеся, що нова версія має інший код версії . ОС Android використовує коди версій, щоб розмежовувати різні версії одного APK, так що це може працювати.

Не зовсім зрозуміло, чому відбувається такий відкат. Це, очевидно, дивна проблема, пов’язана з пристроєм, але, тим не менш, може виникнути велика кількість факторів, включаючи інсталятор пристрою за замовчуванням, налаштування пам’яті / кешу, пам’ять пристрою, віруси тощо.


Я сподіваюся, що це допомагає. Веселого кодування!


1
Ми досі не розгадали проблему, але оскільки ваша відповідь є єдиною, яка теоретично могла бути пов’язана, виграш за вами!
Василь
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.