기기 종료 후 Android 앱이 이전 버전으로 롤백되는 이유는 무엇입니까?


11

Android 애플리케이션에서이 매우 이상한 동작을 관찰했습니다. 대략적인 시나리오 :

  1. 장치에 설치된 버전 A
  2. 응용 프로그램 괜찮아요
  3. 장치에 설치된 버전 B (B> A)
  4. 응용 프로그램 괜찮아요
  5. 배터리 방전으로 인해 장치가 종료 됨
  6. 장치가 켜졌습니다
  7. 응용 프로그램의 버전 A가 장치에서 다시 실행됩니다.

추가 정보:

  • 애플리케이션은 Google Play를 통해 배포되지 않지만 USB 연결을 통해 온 프레미스에 설치됩니다 (참고 : 애플리케이션은 프로덕션에서 실행되며 AndroidStudio를 통해 설치되지 않음).
  • 정자
  • 안드로이드 5.1 (API 22)

두 가지 질문이 있습니다.

  • 기기가 이전 버전의 APK를 캐시 한 이유는 무엇이며 어디에 캐시 했습니까?
  • 어떤 상황에서 애플리케이션이 이전 버전으로 롤백 할 수 있습니까?

편집 (자세한 정보) :

  • APK가 롤백 된 후 애플리케이션이 일부 권한을 잃어버린 것 같습니다 (아마도 모두). Android API에서 SecurityException이 발생하여 롤백 이전에 작동 한 기능입니다. 이 버전의 Android에 아직 런타임 권한이없는 경우에도 발생합니다!
  • : 태블릿의 파일 시스템을 검색 후, 나는 참으로 여러 응용 프로그램의 APK가 비슷한 경로 아래에 존재하는 참조 /data/app/com.myapp-2/base.apk, /data/app/com.myapp-3/base.apk

나의 현재 가설은 배터리 소모로 인해 태블릿이 상태를 "재설정"하게하고 (예 : 시계도 재설정 됨) 다시 전원을 켜면 앱의 APK간에 혼동되어 잘못된 것을로드한다는 가설입니다.

그러나 나는 왜 그렇게 할 것인지, 또는이 행동을 막는 방법에 대한 단서가 없습니다.


나는 또한이 행동에 직면했다. apk를 분할하고 장치를 다시 시작하면 프로세스가 중단되고 이전 버전으로 롤백되므로 즉시 실행으로 인해 발생할 수 있습니다.
touhid udoy

이 기기에서 다른 사용자를 사용하고 있습니까? 어쩌면 손님 세션 하나?
tynn

이것은 장치에 따라 다를 수 있습니다 (기본 캐시 설정). 다른 장치에서 테스트 했습니까?
Taslim Oseni

안드로이드 에뮬레이터에서 테스트 했습니까?
Squti

@TaslimOseni, 현장 배포에 사용되는 특정 태블릿 모델이 있습니다. 또한 쉽게 재현 할 수있는 것이 아닙니다. 실험실에서 한 번만 보았습니다.
Vasiliy

답변:


2

Android Studio 3.5 이상을 사용하는 경우 즉시 실행 대신 변경 사항 적용을 사용하고있을 가능성이 있습니다.

이것은 APK를 다시 쓰지 않고 장치에 변경 사항을 전달하는 다른 방법이 있으므로 재부팅 후 장치에서 직접 앱을 실행하면 실행되는 APK가 apk와 관련이 없다는 것을 이해하십시오. 그 전에 실행

변경 승인

즉각적인 실행 및 재 설계 및 변경 사항 적용이라는 Android Studio 3.5의보다 실용적인 접근 방식을 기초로 구현했습니다. Apply Changes는 Android Oreo 이상의 플랫폼 별 API를 사용하여 안정적이고 일관된 동작을 보장합니다. Instant Run과 달리 Apply Changes는 APK를 수정하지 않습니다.

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


이 문제는 프로덕션에서 발생하며 앱이 AndroidStudio를 통해 기기에 설치되지 않습니다. 즉석 실행 또는 변경 사항 적용과 관련이 있습니까?
Vasiliy

죄송합니다. "애플리케이션은 Google Play를 통해 배포되지 않지만 USB 연결을 통해 온 프레미스로 설치되었습니다"라고 언급 했으므로 Android Studio에 대해 자동으로 생각했습니다. 업데이트 후 명확합니다. 좀 더 생각해
Carlos Robles

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

@Vasiliy는 Dalvik VM이 즉시 실행 패치 APK를 다르게 처리하기 때문에 가능합니다. 실제 질문은, 왜 다른 버전에서 아마도 같은 것의 두 개의 다른 인스턴스가 있는가?
Martin Zeitler

이 모든 것과 즉각적인 실행이 어떤 관계가 있는지 잘 모르겠습니다. APK는 AndroidStudio를 통해 설치되지 않았습니다. 당신이 말하는 것처럼, 질문 중 하나는 "동일한 앱에 대해 여러 개의 APK 인스턴스가있는 이유"입니다. 그러나 귀하의 답변이 어떻게 대답하는지 모르겠습니다 ...
Vasiliy

@Vasiliy로 시작하기 위해 여러 개의 APK가 없어야하며-그렇다면 패치 APK를 적용해야합니다. "변경 사항 적용"과 부팅 시간에는 차이가 있습니다.
Martin Zeitler

1

기기가 이전 버전의 APK를 캐시 한 이유는 무엇이며 어디에 캐시 했습니까?

트릭은 버전 코드에 있습니다. 새 버전을 설치할 때 새 버전의 버전 코드가 다른지 확인하십시오 . Android OS는 버전 코드를 사용하여 동일한 APK의 다른 버전을 구별하므로 작동합니다.

이 롤백이 발생하는 이유는 확실하지 않습니다. 이것은 분명히 이상한 장치 관련 문제이지만 그럼에도 불구하고 장치의 기본 설치 프로그램, 저장소 / 캐시 설정, 장치 메모리, 바이러스 등을 포함한 많은 요인이 원인이 될 수 있습니다.


이게 도움이 되길 바란다. 메리 코딩!


1
우리는 여전히 문제를 파악하지 못했지만 귀하의 답변은 이론적으로 관련 될 수있는 유일한 답변이므로 현상금은 귀하의 것입니다!
Vasiliy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.