如何在没有旧证书和私钥的情况下升级Google Play中的Android应用

时间:2012-09-11 10:03:19

标签: google-play upgrade

我正在尝试在Google Play中升级应用。但显示错误消息,即与证书相关。我没有任何证书和钥匙。这一切都缺失了,只有我有一个源代码。请指导我以不同的方式升级应用程序。这在iPhone中是否可行,所以我认为在Android中也可以使用技巧。谢谢!非常提前。 - Ranjit

1 个答案:

答案 0 :(得分:0)

您可能已经想到,如果没有相同的软件包名称和相同的证书,无法升级Google Play商店应用。以下是我发现的一篇文章的摘录有助于解释原因。 Link to the original article.

您的包裹名称和证书:

最明显和最明显的是“清单包名称”,即您在AndroidManifest.xml中为应用程序提供的唯一名称。该名称使用Java语言风格的命名约定,Internet域所有权有助于避免名称冲突。例如,由于Google拥有域“google.com”,因此我们所有应用程序的清单包名称都应以“com.google”开头。对于开发人员来说,遵循此约定以避免与其他开发人员发生冲突非常重要。 / p>

一旦您在其清单包名称下发布您的应用程序,这就是该应用程序的唯一标识。 切换到其他名称会产生一个全新的应用程序,无法将其安装为现有应用程序的更新。

与清单包名称一样重要的是与应用程序签名的证书。签名证书代表应用程序的作者。 如果您更改了应用程序已签名的证书,则它现在是另一个应用程序,因为它来自不同的作者。此不同的应用程序无法作为原始应用程序的更新上载到Market,它也不能作为更新安装到设备上。

用户在安装以这两种方式之一更改的应用程序时看到的确切行为是不同的:

如果清单包名称已更改,则新应用程序将与旧应用程序一起安装,因此它们可以同时共存在用户的设备上。

如果签名证书发生更改,尝试将新应用程序安装到设备上将会失败,直到卸载旧版本为止。

如果更改应用程序的签名证书,则应始终更改其清单包名称,以避免在安装时出现故障。

您的AndroidManifest.xml是一个公共API 不仅仅是你的包名不可变。 AndroidManifest.xml的一个主要功能实质上是从您的应用程序声明一个公共API,供其他应用程序和Android系统使用。您在清单中声明的​​非私有组件(即其android:exports状态为true)的每个组件都应被视为公共API,并且永远不会以破坏兼容性的方式进行更改。

构成兼容性中断的一个微妙但重要的方面是你的活动,服务和接收器组件的 android:name属性。这可能会令人惊讶,因为我们认为android:name as指向实现我们的应用程序的私有代码,但它也(与清单包名称结合)该组件的官方唯一公共名称,由ComponentName类表示。

更改应用程序内部的组件名称可能会对您的用户产生负面影响。一些例子是:

如果更改了应用程序主要活动的名称,则用户对其所做的任何快捷方式将不再有效。快捷方式是一个Intent,它直接指定它应该运行的ComponentName。 有两种主要的意图:

隐式意图仅使用操作,类别,数据,MIME类型等指定它们应匹配的“内容”。他们将找到的确切组件仅在运行时由包管理器与当前应用程序匹配确定。

Explicit Intents通过ComponentName指定它们应匹配的单个显式“who”。无论Intent中有什么其他内容,它只与ComponentName中给出的确切清单包名和类名相关联。

这两种类型的Intent对于Android与您的应用程序交互的方式非常重要。

ComponentName是您在清单中声明的​​组件的公共唯一名称,如果它们对其他应用程序可见,则不得更改。

总之:您的应用程序的某些部分无法更改。请小心。

http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html