为啥更新一个安卓应用可以让它出现两次?

Posted

技术标签:

【中文标题】为啥更新一个安卓应用可以让它出现两次?【英文标题】:Why updating an android app can make it appear twice?为什么更新一个安卓应用可以让它出现两次? 【发布时间】:2010-10-27 14:21:00 【问题描述】:

我对我的应用程序进行了很多更改:数据库方案、图形、代码等。最大的是我将包名称重命名为完全不同的名称。应用程序在 manifeste.xml 文件中具有相同的名称和 Id,而 apk 具有相同的名称,具有相同的数字签名。

不过,当使用./adb install -r myapp.apk 时,myapp 会在菜单中出现两次。当然,由于数据库是以包名作为名称存储在目录中的,因此用户感觉它的数据丢失了。

如何防止这种情况发生,如果不能,如何实现迁移自动化?

我有几个线索:提示用户卸载旧应用程序,将数据库从旧文件复制到新文件等。

【问题讨论】:

【参考方案1】:

直接的答案是应用程序出现两次,因为 android Market 和 Android OS 将两个不同的包视为两个不同的应用程序。代码可以相同,但如果包不同,应用程序就完全不同了

Android 电子市场通过包名称识别应用程序。我怀疑这是因为操作系统按包跟踪程序......这是有道理的,您不希望安装两个具有完全相同名称的包,操作系统如何知道要调用哪个包?因此,如果您安装的软件包与已安装的软件包同名,操作系统会将其视为软件包升级,并让新程序访问旧用户数据。

您声明包共享相同的 ID,我假设这是用户 ID。这使您能够在包之间共享数据。更多信息在这里:

http://developer.android.com/guide/topics/security/security.html#userid

建议:发布对旧包的小升级,提供所需的任何胶水,使其与新包共享数据。然后使用代码发布您的新包以从旧包中导入用户数据(需要相同的 UserId 和签名)。过渡对用户来说是无缝的(无需手动备份和导入)。

【讨论】:

唯一不整洁的部分是现在您有一个程序供用户卸载...我希望他们卸载正确的程序。程序化卸载,我的下一个 SO 问题。 对这个问题也很感兴趣。【参考方案2】:

应用程序签名必须相同。如果您在另一个 Eclipse 中导入项目,构建它并将其上传到市场,您将看到 2 个单独的应用程序。

【讨论】:

以上是关于为啥更新一个安卓应用可以让它出现两次?的主要内容,如果未能解决你的问题,请参考以下文章

请问为啥我的安卓手机不能下载软件,提示文件名或格式错误?

安卓应用程序里咋出来两个图标?我解决掉,我是问为啥会出现两个完全一样的图标?

安卓版的瓦拉?

为啥我安装软件后手机桌面是两个相同的图标,删掉其中一个就打开不了。我的是安卓系统

安卓开发应用闪退

iOS 14 可以更改默认应用了,这会让它更像安卓吗?