Restricciones generales
Sólo puede instalar un archivo APK que tenga el mismo nombre de paquete que una aplicación ya instalada si se cumplen los dos requisitos siguientes.
- La aplicación instalada y el archivo APK que quieres instalar deben estar firmados por la misma clave de desarrollador, de lo contrario obtendrás el rror
INSTALL_FAILED_UPDATE_INCOMPATIBLE Package <packagename> signatures do not match previously installed version; ignoring!
- Existe una protección contra el downgrade de la aplicación, lo que significa que el
versionCode
(especificado en AndroidManifest.xml
) de la aplicación a instalar tienen que ser iguales o mayores que los de la aplicación ya instalada. En caso contrario, se producirá el error INSTALL_FAILED_VERSION_DOWNGRADE
. Esto sólo se puede evitar para las aplicaciones que tienen el debuggable
bandera fijada. Entonces puedes añadir la opción adb -d
para saltarse esta restricción.
El último factor es la versión de Android. El comportamiento de adb install
parece depender de la versión de Android.
Android 10+
En Android 10 y 11 pude observar que a Android no le importa si una aplicación ya está instalada o no.
Por lo tanto, mientras el nuevo archivo APK esté firmado con la misma clave de desarrollador, puedes simplemente ejecutar adb install
para instalar una versión actualizada de la aplicación.
Android 9 e inferior
En Android 9 y anteriores sin embargo por defecto el simple adb install
fallará con el error INSTALL_FAILED_ALREADY_EXISTS
si una aplicación con el mismo nombre de paquete ya está instalada. El archivo APK especificado no se instalará en ese caso.
Sólo si utiliza adb install -r
se puede sustituir una aplicación existente que tenga el mismo nombre de paquete que la que se quiere instalar, pero hay dos restricciones.
0 votos
Nunca ha saltado en silencio. Sobrescribe si la firma del nuevo APK coincide con y la versión es igual o mayor que la preinstalada. De lo contrario, lanza un error indicando claramente la razón, que podría ser también otra cosa que la firma y la versión, por ejemplo, un componente de la aplicación que se contradice con alguna aplicación preinstalada.
0 votos
Cuando sobreescribe lo hace en silencio o dice que se está sobreescribiendo?