Android 디버그 브리지를 사용하여 애플리케이션을 설치할 때 INSTALL_FAILED_VERSION_DOWNGRADE를 무시하는 방법이 있습니까?


121

최신 Android 4.2에서 더 낮은 버전으로 APK를 설치하려고 할 때 설치시 이러한 오류 조건이 도입 된 것 같습니다. 이전 버전의 Android에서는 단순히 adb install -r <link to APK>. 디버깅을 위해 이전 APK를 자주 다시 테스트해야합니다. 그리고 -r플래그는 이전 안드로이드 버전에서 이전 빌드를 대체 할 것이다. 여기에 무시할 해결 방법이 [INSTALL_FAILED_VERSION_DOWNGRADE]있습니까?


최신 버전을 제거하는 것 말고요?
CommonsWare

옳은; 나는 -r깃발이 이것을 처리 할 것이라고 생각했다 .
AaronMT 2012

5
이 질문은 빌드 번호가 잘못 지정된 경우에도 유효합니다. 예를 들어 개발 상자의 v1.0이 빌드 서버의 v2.0보다 높은 versionCode를 가질 수 있습니다.
parkerfath

답변:


288

최신 버전의 adb 도구에는 adb 도움말에는 표시되지 않는 '다운 그레이드 허용 플래그'가 있지만 기기의 'pm'도움말에는 표시됩니다. 따라서 다음을 사용하십시오. adb install -r -d <link to apk>


3
adb install -rd <apkfile>작동하지 않는 시도 했습니다. Versino (옵션 분리)가 정상적으로 작동합니다. 감사!
MarSoft 2015

1
그리고 그것은 지금 문서화되어있는 것 같습니다! 그냥 당신은하지 않습니다 작업 -r -d, -RD을 사용할 필요가 있음
plaisthos

예를 들어, Waze 4.0.0.2를 제거 (다운 그레이드)하고 버전 3.9.5.3을 설치하려면 : adb install -r -d Waze_3.9.5.3.apk . 이렇게하면 앱 데이터가 손실되지 않습니다.
Derek Gogol

12
Android 7 (Nougat)부터 adb install -d는 패키지가 디버그 가능으로 표시되지 않는 한 더 이상 작동하지 않습니다. android.googlesource.com/platform/frameworks/base/+/921dd75
Darpan

20

adb uninstall -k <package>이전 APK를 시도하고 사용한 다음 설치할 수 있습니다 . adb 사용 가이드에서 :

  adb uninstall [-k] <package> - remove this app package from the device
                                 ('-k' means keep the data and cache directories)

내 apk로 직접 시도해 보았고 대부분의 데이터에서 작동하는 것 같습니다 (RawContacts와 같은 일부 데이터는 저장되지 않았습니다)


이 명령은 실제로 제거를 실행하지 않고 단순히 경고를 표시하는 것으로 보입니다. 이것을 실제로 실행하는 명령은 다음과 같습니다 adb shell pm uninstall -k <package>.
Paul Lammertsma

이것은 또한 adb -d가 나를 위해했던 것처럼 여전히 불평하는 경우 다운 그레이드하는 데 유용합니다.
포인터 Null

14

장치에서 다중 계정을 활성화 했습니까 (그리고 ADB를 통해 APK를 푸시 했습니까)? 그렇다면 모든 계정에서 APK를 제거해야합니다. 제거가 완료되면 푸시가 정상입니다.


티타늄 백업을 통한 백업 복원이 작동하지 않았습니다. 새로 설치가 작동하지 않았습니다. APK 및 / 또는 adb 설치를 통한 설치가 작동하지 않았습니다. 이것은 나에게 1,5 시간의 비용이 들었고 간단한 팁이 트릭을했습니다. 감사!
bentolor

3

제 경우에는 프로젝트에 포함 된 Google Play 서비스의 오래된 버전이었습니다. Android Studio를 사용하고 있습니다. SDK에서 업데이트를 실행하고 업데이트 된 라이브러리를 가져 왔는데 그 오류가 사라졌습니다. 그래서 내 제안 : 프로젝트에서 참조하는 최신 라이브러리로 업데이트하십시오.


1

다음을 사용하여 이전에 설치 한 앱 버전을 제거해보십시오.

adb uninstall com.package.name

그런 다음 앱을 다시 설치 / 실행하십시오.


0

버전 번호가 지금 작업중인 복사본보다 높은 별도의 코드 복사본에서 설치했을 수 있습니다. 두 경우 모두 현재 설치된 사본을 제거하거나 설정> 앱을 열어 설치된 앱의 버전 번호를 확인하고 AndroidManifest에서 versionCode를 더 높게 올리십시오.


1
왜 이것이 반대표를 받았습니까? 최선의 답은 아닐지 모르지만, 이것에 익숙하지 않은 사람에게는 실행 가능한 해결책 (그리고 아마도 가장 쉬운 해결책)처럼 보입니다! 이와 같은 답변 은 답변자뿐만 아니라 나중에이 질문을 방문하는 독자에게도 필수적 이므로 댓글을 남겨 주세요 . :-|
jedd.ahyoung

물론 이것은 할 수있는 일입니다. 이미 분명합니다. 문제는이 검사를 건너 뛰고 다운 그레이드를 허용하는 방법이 있는지 묻는 것입니다. 그리고 대답은 '예'입니다. 이 대답은 기본적으로 아니오라고 말합니다.
tasomaniac

0

나는 또한 같은 문제에 직면했습니다. 장치에서 APK를 삭제하는 것보다 쉬운 아래 단계로 해결할 수 있습니다-

1) 터미널에서 "adb logcat | grep -i version"명령 실행

2) logcat 끝에 표시되는 특정 줄을 찾습니다.

"Downgrade detected: Update version code 5011  is older than current 9109"

3) 현재 버전 (예 : 9109)을 복사하여 아래와 같이 AndroidManifest.xml에 붙여 넣습니다.

android:versionCode="9109"

이제 응용 프로그램을 정리하고 다시 빌드하면 제대로 작동합니다.


0

Google Play 서비스 종속성에 문제가있을 수 있습니다.

때로는 다음과 같은 경우가 아닙니다.

a) 설치된 앱의 최신 버전이 있거나 최신 버전이 아닙니다.

b) 기기의 다른 사용자 계정에 설치된 앱의 기존 버전이 있습니다.

따라서 오류 메시지는 단지 가짜입니다.

제 경우에는 :

implementation 'com.google.android.gms:play-services-maps:16.0.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'com.google.android.gms:play-services-gcm:16.0.0'

하지만 내가 시도했을 때

implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-gcm:17.0.0'

아직 androidX로 업그레이드하지 않았고 그렇게 할 준비가되지 않았기 때문에 androidX 관련 오류가 발생했습니다. 최신 16.xy 버전을 사용하는 것이 작동하고 더 이상 오류 메시지가 표시되지 않음을 발견했습니다. 또한 AndroidX로 업그레이드 할 준비가되면 나중에 기다릴 수 있습니다.

implementation 'com.google.android.gms:play-services-maps:16.+'
implementation 'com.google.android.gms:play-services-location:16.+'
implementation 'com.google.android.gms:play-services-gcm:16.+'

-3

Xiaomi에 문제가있는 사람들을 위해 :

adb shell pm uninstall <package_name>

이것은 아무 도움이되지 않으며 왜 이렇게해야하는지 설명해야합니다.
Benyamin Limanto
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.