La instalación manual de un APK actualizado falla con "las firmas no coinciden con la versión instalada anteriormente"

81

Creé una aplicación tonta para compartir con algunos amigos. No es necesario ponerlo en la tienda de aplicaciones.

Construí el primero apk(firmado), lo subí a un servidor web y todo funcionó bien.

Surgió un pequeño problema, lo arreglé, lo reconstruí, firmé con el mismo almacén de claves y lo cargué nuevamente. Ahora parece que no puedo instalar desde el nuevo apk. El depurador me dice:

signatures do not match the previously installed version

Así que desinstalé la versión anterior abriendo el cajón de la aplicación y arrastrándola al botón "desinstalar". Cuando abro "Configuración -> Aplicaciones", ya no lo veo por ningún lado. No veo ningún rastro de la aplicación en mi dispositivo.

Sin embargo, sigo recibiendo el mensaje de error anterior.

¿Es posible que todavía quede algo de información en el dispositivo en algún lugar? ¿Hay alguna forma de que pueda verificar eso?

exhuma
fuente
1
relacionado stackoverflow.com/questions/8137962/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respuestas:

166

Sí, es posible si de alguna manera su antigua aplicación no se elimina al 100% o sus datos no se eliminan.

Tratar:

adb uninstall "com.yourapp.yourapp"

Si no sabe exactamente qué poner como reemplazo de "com.yourapp.yourapp", simplemente abra Android Studio, ejecute su aplicación mientras está conectada a un dispositivo y luego mire la ventana Depurar.

Dice:

 Waiting for device.
 Target device: samsung-sm_t531-xxxxxxxxx
 Uploading file
 local path: C:\Users\myapp\app\build\outputs\apk\myapp.apk
 remote path: /data/local/tmp/com.myapp.myapp
 Installing com.myapp.myapp
 DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.myapp.myapp"
 pkg: /data/local/tmp/com.myapp.myapp
 Success

com.myapp.myapp en este caso es el nombre del paquete que debe usar para desinstalar.

Ehsan
fuente
1
De hecho, este era el problema. Lo implementé una vez en el teléfono directamente desde Android Studio. Parece que esta versión no se eliminó correctamente. Una última pregunta: ¿hay alguna forma de hacer esto desde Android Studio? ¿O ejecutar adb directamente desde allí?
exhuma
Sí, solo intente aprender a ejecutar comandos de shell desde su aplicación de Android. Este hilo es un buen punto de partida: stackoverflow.com/questions/20932102/…
Ehsan
no no no. No ejecuto comandos desde mi aplicación;) Me preguntaba si puedo ejecutar adbdirectamente desde "Android Studio".
exhuma
2
Esto es bueno cuando eres desarrollador. Pero para cualquier usuario final, si ocurre el mismo problema, debes seguir: El problema era que en las versiones más nuevas de Android, la desinstalación de alguna manera solo se desinstala para ese usuario específico. La respuesta es ir a configuración> aplicaciones> Ir dentro de una aplicación particular y luego seleccionar "desinstalar para todos los usuarios" en el elemento de menú "..." en la parte superior derecha.
AnkitRox
Me pasó porque cambié el nombre del paquete. desinstalar hizo el truco
Guy Sopher
23

Tuve el mismo problema y la adb uninstallsolución no funcionó para mí.

Lo que funcionó fue

  • En su dispositivo, vaya a Configuración-> Aplicaciones
  • Seleccione su aplicación y, en el menú, seleccione "Desinstalar para todos los usuarios".

Incluso si había desinstalado la aplicación anteriormente, todavía estaba en la lista allí.

Julien
fuente
Sí, esto también puede suceder si tiene varias cuentas de usuario en su dispositivo y la aplicación está instalada en más de una. Si lo desinstala para un usuario, solo se "desvincula" de esa cuenta. Pero permanece en el disco. Solo se eliminará por completo cuando cada usuario lo haya desinstalado.
exhuma
1
"Desinstalar para todos los usuarios" funcionó perfectamente. Se eliminaron todos los demás usuarios)))
Inoy
Solo veo "desinstalar", no "desinstalar para todos los usuarios" con un emulador de píxeles 3 29
Julie Pixie
6

Para mí, si la aplicación está destinada a ser distribuida, la adbsolución es imposible: ¡no puedes pedirle a un amigo que instale el sdk de Android en su máquina!

El camino a seguir aquí es editar AndroidManifest.xmle incrementar el android:versionCodeatributo en la <manifest>etiqueta (que es el elemento raíz).

Esto actualizaría su aplicación instalada

Greg Berger
fuente
1
En realidad, el problema fue causado porque instalé la aplicación en un dispositivo a través de Android Studio durante el desarrollo. Reconstruir un nuevo APK y distribuirlo estuvo perfectamente bien para todos menos para mí. Entonces, la solución adb estaba bien.
exhuma
4

Si ve esto mientras realiza pruebas conectadas, asegúrese de incluir .test al desinstalar a través de adb porque la desinstalación a través de la aplicación -> configuración no elimina el paquete de prueba

adb uninstall your.broken.package.test

si acaba de desinstalar a través de

adb uninstall your.broken.package

su paquete de prueba seguirá estando allí. Esto fue solo algo que noté mientras usaba la línea de comandos de gradle, no he encontrado este problema dentro de Android Studio

Joe Maher
fuente
3

Desinstale la aplicación anterior de su teléfono o emulador e intente ejecutarla nuevamente.

irfan AYDIN
fuente
Ésta no es una respuesta. SO declaró que ya había intentado esto y que el problema seguía ahí.
BenRoob
1

Recibí ese error al intentar instalar la versión mientras firmaba su certificado.

arreglado con la tarea: app Gradle uninstallRelease y luego installRelease de nuevo

EF5
fuente
0

Para los usuarios de Unity que llegan a esta pregunta, la mejor respuesta es de hecho la anterior por @Ehsan

adb uninstall "com.yourapp.yourapp"

Ya había instalado una versión anterior en mi dispositivo Android y luego la seleccioné Development Builden Unity> Build Settings, lo que provocó que el APK usara una firma diferente. Si instala a través de la GUI de Android, en realidad no elimina todo, por lo que debe usar ADB.

ow3n
fuente