Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么更新android应用程序会让它出现两次?_Android - Fatal编程技术网

为什么更新android应用程序会让它出现两次?

为什么更新android应用程序会让它出现两次?,android,Android,我对我的应用程序做了很多更改:数据库方案、图形、代码等。最大的更改是我重命名为完全不同的包名。applicatgio在manifest.xml文件中获得了相同的名称和Id,而apk获得了相同的名称和数字签名 然而,当使用/adb install-r myapp.apk时,myapp会在菜单中出现两次。当然,由于数据库存储在一个使用包名作为名称的目录中,用户感觉它的数据丢失了 我如何才能防止这种情况发生,如果我不能,我如何能够自动化he迁移 我有几个线索:提示用户卸载旧应用程序,将数据库从旧文件复

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

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

我如何才能防止这种情况发生,如果我不能,我如何能够自动化he迁移


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

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

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

您声明包共享相同的ID,我假设这是用户ID。这使您能够在包之间共享数据。详情如下:


建议:对旧软件包进行一个小的升级,提供所需的胶水,让它与新软件包共享数据。然后使用代码发布新包,以从旧包导入用户数据(需要相同的用户ID和签名)。转换对用户来说是无缝的(无需手动备份和导入)。

应用程序签名必须相同。如果您在另一个Eclipse中导入了该项目,构建它并将其上载到market,您将看到两个独立的应用。

唯一不整洁的部分是,现在您有一个程序供用户卸载……我希望他们卸载正确的程序。编程卸载,我的下一个SO问题。也请关注此问题。