更改升级后的 Android 应用程序的包名称

Posted

技术标签:

【中文标题】更改升级后的 Android 应用程序的包名称【英文标题】:Changing the package name of an upgraded Android application 【发布时间】:2011-01-06 06:00:33 【问题描述】:

在升级我的 android 应用程序期间,我更改了包名。但 Android 市场不允许上传更改后的包名应用程序作为升级。如果我将应用程序作为新应用程序上传,用户的设备上是否会有两个应用程序?如何确保用户不必从头开始重新下载应用程序而不恢复我对包名称的更改?

【问题讨论】:

【参考方案1】:

两个包 = 市场上的两个不同应用程序。 一旦你上传了一个应用程序,它的包应该是一样的。此外,密钥应该相同。

【讨论】:

我第一个上传的应用程序使用了相同的密钥,但不同的包名。 您不能更改主包名称。如果您这样做,则不能将其视为同一应用程序。 我不确定为什么在发布应用程序后必须更改包。您应该重新考虑更改包名称的决定。如果不可能,那么忘记(并在市场描述中放置新应用的链接?)旧应用。 @Sarwar Erfan :我没有更改主包名称,但我更改了所有其他包名称......所以,我担心......它会工作还是不工作?让我知道......请...... @BipinVayalu:如果您没有更改,那么没有问题。【参考方案2】:

Android 市场只关心清单中的包名,而不是源中的实际包名。

你可以尝试在 manifest 属性中给出旧的包名,然后为活动提供新的包名而不是相对的(即 .MainActivity)

像这样:

<manifest package="your.old.package" ...>
   ...
   <application android:name="your.new.package.MainActivity" ...>

可以工作..

我计划以这种方式提供我的应用程序的两个版本(付费/免费),并使用相同的项目和代码。

【讨论】:

有趣!!我将尝试下一个应用程序。 你说得对,貘小子。 Android 不关心您在 Activity 标记中放置的名称属性;它只关心你的清单标签的包属性,就确定你的应用程序的身份而言。如果 manifest 标签的 package 属性发生了变化,那么 Android 会认为这个变化的应用是一个完全不同的应用。 如果清单包和应用程序名称不同,我隐约记得 Eclipse 插件存在一些问题。这可能不再是一个问题,但在使用这种方法时,我肯定不得不与 Eclipse 搏斗。不过那是一年多以前的事了。 @Tapiboy 我遇到了同样的问题,我的旧应用程序具有不同的包名称,并且目前正在开发具有不同名称的应用程序。所以通过使用上述解决方案,是否可以在旧应用程序上使用新包名称谷歌播放(市场)??还有一件事是如何更改谷歌市场上的当前包名称? @SwapAndroid AFAIK - 您无法更改已部署应用程序的包名称。您必须在源代码中重命名包或使用新包名称部署新应用程序。 (或尝试上述技术)【参考方案3】:

如果您更改包名称,它会被视为一个单独的应用程序 - 不仅在市场上,而且 apk 通常只会“替换”相同的包名称(并且仅当它们都使用相同的密钥签名时) .

虽然可以通过签署中间包 with both keys 来逐步过渡到新密钥,但目前没有简单的方法来逐步过渡包名称。

最好的办法是:

新的 apk 版本使用相同的密钥签名,但包名称不同。 安装后,新的 apk 安排使用带有旧包名的 shared_prefs。 数据被复制到新的包名中。 新版本请求删除旧版本,用户会看到卸载对话框。

注意应用数据通常保存在这里:

/data/data/pac.kage.name/

我还没有尝试过,所以我还不能提供更多细节。你可能也对我的request for a seamless way of transitioning the package name感兴趣。

【讨论】:

以上是关于更改升级后的 Android 应用程序的包名称的主要内容,如果未能解决你的问题,请参考以下文章

android应用程序的包名应该是啥?

Android签名打包详解

升级期间在 Android Market 中重命名应用程序

如何在Java生成的文件中更改android中的包名称[重复]

在 React Native 中更改应用名称

Firebase 中 iOS 和 Android 应用的包名称相同