¿Hay alguna forma de ignorar INSTALL_FAILED_VERSION_DOWNGRADE en la instalación de la aplicación con Android Debug Bridge?

121

Parece que el Android 4.2 más reciente ha introducido esta condición de error en la instalación cuando se intenta instalar un APK con una versión inferior. En versiones anteriores de Android, uno podría instalar APK más antiguos simplemente a través de adb install -r <link to APK>. Para fines de depuración, con frecuencia necesito volver a probar APK más antiguos; y la -rbandera reemplazaría la compilación anterior en versiones anteriores de Android. ¿Hay una solución alternativa aquí para ignorar [INSTALL_FAILED_VERSION_DOWNGRADE]?

AaronMT
fuente
¿Quiere decir, además de desinstalar la versión más reciente?
CommonsWare
Correcto; Supuse que la -rbandera se encargaría de esto.
AaronMT
5
Esta pregunta también es válida para los casos en los que ha numerado incorrectamente compilaciones. Por ejemplo, tal vez su v1.0 de una caja de desarrollo tenga un código de versión superior al v2.0 de un servidor de compilación.
parkerfath

Respuestas:

288

Parece que la última versión de adb tools tiene un "indicador de permitir degradación" que no se muestra en la ayuda de adb, pero se muestra en la ayuda "pm" del dispositivo. Entonces usa: adb install -r -d <link to apk>

supereee
fuente
3
Intenté con adb install -rd <apkfile>lo que no funcionó. Su versino (con opciones separadas) funciona bien. ¡Gracias!
MarSoft
1
¡Y parece estar documentado ahora! No es que tenga que usar -r -d, -rd no funcionará
plaisthos
Por ejemplo, para desinstalar (degradar) Waze 4.0.0.2 e instalar la versión 3.9.5.3: adb install -r -d Waze_3.9.5.3.apk . De esta forma no perderá los datos de la aplicación.
Derek Gogol
12
Desde Android 7 (Nougat), adb install -d ya no funciona a menos que el paquete esté marcado como depurable. android.googlesource.com/platform/frameworks/base/+/921dd75
Darpan
20

Puede intentar usar adb uninstall -k <package>y luego instalar la aplicación anterior. De la guía de uso de adb:

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

Lo probé yo mismo con mi apk, y parece que funciona para la mayoría de los datos (algunos datos como RawContacts no se guardaron)

Talihawk
fuente
Parece que este comando no ejecuta realmente la desinstalación, sino que simplemente genera una advertencia. El comando para ejecutar realmente esto parece ser adb shell pm uninstall -k <package>.
Paul Lammertsma
Esto también es útil para degradar, si adb -d todavía se queja como lo hizo por mí.
Pointer Null
14

¿Habilitó varias cuentas en su dispositivo (y envió su apk a través de ADB)? Si es así, debe eliminar el apk en cada cuenta. Después de la desinstalación completa, su inserción estará bien.

OlivierTurpin
fuente
La restauración de la copia de seguridad a través de Titanium Backup no funcionó. La instalación nueva no funcionó. La instalación a través de APK y / o adb no funcionó. Esto me costó 1,5 horas y tu simple propina funcionó. ¡Gracias!
bentolor
3

En mi caso, era una versión obsoleta de Google Play Services incluida con mi proyecto. Estoy usando Android Studio. Ejecuté una actualización en el SDK e importé la biblioteca actualizada, y ese error desapareció. Entonces, mi sugerencia: actualice a las últimas bibliotecas a las que hace referencia su proyecto.

IgorGanapolsky
fuente
1

Intente desinstalar la versión previamente instalada de la aplicación usando-

adb uninstall com.package.name

y luego instale / ejecute su aplicación nuevamente

Krishna
fuente
0

Es posible que haya instalado desde una copia separada del código donde el número de versión era mayor que la copia con la que está trabajando en este momento. En cualquier caso, desinstale la copia instalada actualmente o abra Configuración> Aplicaciones para determinar el número de versión de la aplicación instalada e incremente su versionCode para que sea más alto en el AndroidManifest.

Ravindra
fuente
1
¿Por qué se votó en contra? Puede que no sea la mejor respuesta, ¡pero parece una solución viable (y quizás la más fácil) para alguien que es nuevo en esto! Por favor, dejar comentarios en busca de respuestas de este tipo, ya que son esenciales no sólo para el contestador, pero para los lectores que visitan esta cuestión más adelante. : - |
jedd.ahyoung
Por supuesto, esto es algo que se puede hacer. Ya es obvio. La pregunta es si hay una manera de omitir esta verificación y permitir la degradación. Y la respuesta es sí. Esta respuesta básicamente dice que no.
tasomaniac
0

También enfrenté el mismo problema Se puede resolver con los pasos a continuación, que son más fáciles que eliminar cualquier apk del dispositivo:

1) Ejecute el comando "adb logcat | grep -i version" en la terminal

2) Busque la línea en particular, que se mostrará al final del logcat -

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

3) copie la versión actual (por ejemplo, 9109) y péguela en AndroidManifest.xml como se muestra a continuación -

android:versionCode="9109"

Ahora limpie y reconstruya la aplicación y debería funcionar bien.

Sunita
fuente
0

Puede ser un problema con las dependencias de Google Play Services.

A veces, NO es el caso que:

a) hay una versión existente de la aplicación instalada, más nueva o no

b) hay una versión existente de la aplicación instalada en otra cuenta de usuario en el dispositivo

Entonces, el mensaje de error es falso.

En mi caso, tuve:

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'

Pero cuando lo intenté

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'

Recibí errores relacionados con androidX, ya que aún no me había actualizado a androidX y no estaba listo para hacerlo. Descubrí que usar las últimas versiones 16.xy funciona y ya no recibo el mensaje de error. Además, podría esperar hasta más tarde cuando esté listo para actualizar a 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.+'
auspicioso99
fuente
-3

Para las personas que enfrentan problemas con Xiaomi:

adb shell pm uninstall <package_name>
Vaigunth
fuente
Esto no ayuda en nada y debe explicarse por qué es necesario hacerlo de esta manera.
Benyamin Limanto