为啥更新一个安卓应用可以让它出现两次?
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 个单独的应用程序。
【讨论】:
以上是关于为啥更新一个安卓应用可以让它出现两次?的主要内容,如果未能解决你的问题,请参考以下文章
安卓应用程序里咋出来两个图标?我解决掉,我是问为啥会出现两个完全一样的图标?