原文链接:https://www.zhihu.com/question/19890258/answer/13800631
android系统使用包名(package name)来判定应用程序的同一性,但是由于包名可以由开发者自由设置,为了保护应用程序不被其他开发者开发的同包名应用覆盖,用于发布的Android应用程序需要加上开发者签名。在应用程序被升级的时候,Android系统将会验证被升级的应用程序包与升级后的应用程序包是否使用了同样的开发者签名,如果一致,该应用程序可以被升级;如果不一致,那么将被视为非同一开发者开发的应用程序,用户需要先卸载已经安装的应用然后再安装新应用,在卸载的过程中,应用在android系统中所保存的设置信息(SavedPreferences)将被删除,以保护应用本地保存的资料不被盗取。
应用升级的时候 系统做了两件事:1、检测包名是否一致,2、检测签名是否一致。if(1&&2) 的时候 才级升级成功,也就是 检测用户当的应用 和升级 的应用 两者是否是同一个app 如果是同一个app 则安装 否则则安装失败。
包名一致,才会提醒升级,升级时,签名不一致,无法升级。
流程就是,检测到包名一致且版本不一致—-提示升级—-签名不一致—-升级失败。
包名一致签名一致,就升级成功了