Android 에뮬레이터 : 설치 오류 : INSTALL_FAILED_VERSION_DOWNGRADE


142

현재 작은 Android 응용 프로그램을 컴파일하고 테스트하려고합니다.

Eclipse를 사용하고 있으며 SDK 4.2 (Api Level 17)가 설치되어 있습니다. 내가 설정했습니다

<uses-sdk android:targetSdkVersion="17" android:minSdkVersion="8" />

다른 값 (예 : 17/17)도 시도했지만.

GoogleAPI 함수를 사용하지 않으며 API 레벨 8에서 사용할 수없는 함수를 사용하지 않습니다. 또는 적어도 이와 관련하여 컴파일 오류나 경고가 표시되지 않습니다.

프로젝트를 컴파일하고 Android 2.2.1을 실행하는 실제 장치에서 실행하면 응용 프로그램이 제대로 실행됩니다. 그러나 Android 4.2, Api Level 17을 사용하여 에뮬레이터 (Android Virtual Device)에서 응용 프로그램을 실행하려고하면 다음 오류가 발생합니다.

[2012-12-10 21:10:29 - SoftKeyboard] Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
[2012-12-10 21:10:29 - SoftKeyboard] Please check logcat output for more details.
[2012-12-10 21:10:29 - SoftKeyboard] Launch canceled!

그러나 Logcat은 비어 있습니다. 나는 실마리가 없다.이 오류의 의미조차도 ...

답변:


353

에뮬레이터에 이미 설치된 앱과 동일한 packageName을 사용하여 앱을 설치하려고하지만 설치하려는 버전이 더 낮은 versionCode (버전 번호의 정수 값)를 갖습니다.

현재 작업중인 사본보다 버전 번호가 높은 별도의 코드 사본에서 설치했을 수 있습니다. 두 경우 모두

  • 현재 설치된 사본을 제거

  • 또는 휴대 전화의 설정> 응용 프로그램 관리자를 열어 설치된 앱의 버전 번호를 확인 <manifest android:versionCode 하고 AndroidManifest에서 더 높게 설정하십시오.

  • 또는 https://stackoverflow.com/a/13772620/632951


1
감사! 이전 SDK의 Softkeyboard 예제를 사용하여 에뮬레이터 장치에 Softkeyboard 예제가 이미 설치되어있는 것 같습니다 (기본적으로?!). 내 응용 프로그램의 이름을 바꾼 후 모든 것이 예상대로 작동했습니다 ...
ndbd

2
@Alexander : -d 플래그를 포함하도록이 답변을 업데이트 할 수 있습니까?
David Alves

8
앱을 제거 할 필요는 없습니다. 플래그 사용 : -r -d이 플래그는 재설치 및 다운 그레이드를 의미합니다.
petrsyn

1
@ petrsyn :이 플래그를 Eclipse에서 어디에 두어야합니까?
Violet Giraffe

2
@VioletGiraffe 명령 줄에서 사용됩니다 : adb install -r -d Application.apk
petrsyn

61

-dadb 설치에 플래그를 추가 할 수도 있습니다 . 이 오류는 무시해야합니다.

adb install -r -d abc.apk

8
문서화되지 않았지만 작동하는 것 같습니다. -rd가 작동하지 않았으므로 -d로 별도로 작성해야했습니다.
mhsmith 2016 년

3
이제 문서화되어 있습니다 : -d: allow version code downgrade. 와 분리해야합니다-r
wisbucky

1
문서 (2020)에서 : -d: allow version code downgrade (debuggable packages only)
Alex.K.

30

먼저 에뮬레이터에서 응용 프로그램을 제거하십시오.

adb -e uninstall your.application.package.name

그런 다음 응용 프로그램을 다시 설치하십시오.


8
또는 연결된 물리적 장치, adb -s DEVICESERIALNUMBER uninstall your.application.package.name여기서 DEVICESERIALNUMBER사용하여 찾을 수 있습니다 adb devices -l.
Joel Purra

응용 프로그램을 디버그하려는 경우 불필요한 단계처럼 보입니다.
IgorGanapolsky

8

XML 리소스를 사용하여 버전 코드를 설정했기 때문에 프로젝트에서 발생했습니다.

AndroidManifest.xml:
android:versionCode="@integer/app_version_code"

app.xml:
<integer name="app_version_code">64</integer>

이는 이전 버전에서 문제가되지 않았다 adb의로, 그러나, platform-tools이 더 이상 적절한 정수로 해석되고있다 R16. adb -r매니페스트의 리터럴을 사용 하여 강제로 다시 설치 하거나 문제를 완전히 피할 수 있습니다 .

android:versionCode="64"

이것은 나에게 문제 였고 versionCode를 올바르게 해결하지 못하고 (예 : 65) 증가해도 INSTALL_FAILED_VERSION_DOWNGRADE를 피하지 못합니다.
Stan Kurdziel

5

Play 스토어에서 서명 된 릴리스 APK 위에 디버그 / 서명되지 않은 APK를 설치하려고 할 때 발생할 수 있습니다.

H:\>adb install -r "Signed.apk"
2909 KB/s (220439 bytes in 0.074s)
        pkg: /data/local/tmp/Signed.apk
Success

H:\>adb install -r "AppName.apk"
2753 KB/s (219954 bytes in 0.078s)
        pkg: /data/local/tmp/AppName.apk
Failure [INSTALL_FAILED_VERSION_DOWNGRADE]

이에 대한 해결책은하는 것입니다 제거 하고 다시 설치하거나 IDE에서 실행 다시.


나는 downvoter가 아니지만 이것이 이것이 일어날 수있는 유일한 이유는 아니라고 생각합니다.
Viccari

3

INSTALL_FAILED_VERSION_DOWNGRADE

모든 Android 앱에는 패키지 이름이 있습니다. 패키지 이름은 기기에서 앱을 고유하게 식별합니다. 장치에 이미 설치된 앱 과 동일한 packageName 인 경우이 오류가 표시됩니다.

  1. 먼저 장치 에서 응용 프로그램을 제거한 다음 새로 설치할 수 있습니다 .
  2. 새 버전이 출시 될 때마다 숫자를 하나씩 늘릴 수 있습니다.

1
각 릴리스에서 versionCode를 늘려야합니다. 그러나 릴리스 이전에는 개발 시간이 아닙니다. 또한 이미 설치된 apk 위에 동일한 versionCode를 가진 apk를 제거 할 수 있어야합니다. 내 직감이 문제는 자원이 versionCode를 참조하고있다 - 참조 : stackoverflow.com/a/14946938/431296
스탠 Kurdziel을

3

마시멜로에서이 오류가 발생했습니다.

Installation error: INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE
Please check logcat output for more details.
Launch canceled!

내가 찾고 해결책을 찾고 여기에 왔습니다. 앱을 삭제했지만 여전히 Nexus 6에서이 문제가 발생합니다.

Settings > Apps > [My app name] have to removed for all user. 

2

... \ android-22 \ android \ content \ pm \ PackageManager.java의 SDK src 코드에 따르면

/**
 * Installation return code: this is passed to the {@link IPackageInstallObserver} by
 * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
 * the new package has an older version code than the currently installed package.
 * @hide
 */
public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25;

새 패키지에 현재 설치된 패키지보다 이전 버전의 코드가있는 경우


같은 버전의 코드로 발생해서는 안됩니다
Stan Kurdziel

2

나는 같은 문제가 있었다. 에뮬레이터가 아닌 내 안드로이드 장치에서 실행하려고 할 때 오류가 발생했습니다 .

sudo ionic run android 

나는 이것을 실행하여 이것을 고칠 수있다

adb uninstall com.mypackage.name

2

당신은 이것을 시도 할 수 있습니다 : adb install -r -d -f your_Apk_path


1

이것은 안드로이드 스튜디오 앱을 일식으로 가져 왔을 때 나에게 일어났다.

안드로이드 스튜디오 프로젝트에서 가져올 때 andoridmanifest.xml 파일을 약간 수정해야한다는 것을 알았습니다. 새 테스트 프로젝트를 만들고 제목 위에 복사하여 일치시킵니다. 짜잔, 문제가 해결되었습니다.


1

이 오류는 여러 종류의 gfx 파일과 함께 내 안드로이드 프로젝트에 나타납니다. 결국 매니페스트 파일의 변경 사항이 수락되지 않았습니다.

안드로이드 장치에 대한 지식이 부족하기 때문에 테스트 장치에 두 번째 사용자가 있다는 것을 잊었습니다. 이 사용자에게는 내 앱 버전도 설치되어 있으므로이 사용자 계정의 앱도 삭제해야합니다.


0

나를 죽이는 것은이 앱이 내 게스트 계정에 설치되어 있다는 것을 몰랐다는 것입니다 (다른 계정에서는 제거했지만).

앱 관리자에서 앱을 검색하고 모든 사용자에 대한 제거를 클릭하기 만하면됩니다.

여기에 이미지 설명을 입력하십시오


0

이전 APK를 제거하고 업데이트 된 APK를 설치하십시오.


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.+'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.