我正在尝试升级 Google Play 中的应用程序。但显示错误消息,即与证书有关。我没有任何证书和密钥。这都不见了,只有我有源代码。请指导我以不同的方式升级应用程序。这在 iPhone 中是否可行,所以我认为在 Android 中也可以使用这个技巧。谢谢你!非常提前。- 兰吉特
1 回答
您现在可能已经知道,如果没有相同的包名称和相同的证书,就无法升级 Google Play 商店应用程序。以下是我发现的一篇文章的摘录,有助于解释原因。链接到原始文章。
您的包裹名称和证书:
其中最明显和最明显的是“清单包名称”,这是您在其 AndroidManifest.xml 中为应用程序提供的唯一名称。该名称使用 Java 语言风格的命名约定,互联网域所有权有助于避免名称冲突。例如,由于 Google 拥有“google.com”域,因此我们所有应用程序的清单包名称都应以“com.google”开头。为避免与其他开发人员发生冲突,开发人员必须遵守此约定。
一旦您在其清单包名称下发布您的应用程序,这将永远是应用程序的唯一身份。切换到不同的名称会生成一个全新的应用程序,它不能作为现有应用程序的更新安装。
与清单包名称同样重要的是应用程序所使用的证书。签名证书代表应用程序的作者。如果您更改了应用程序的签名证书,它现在是一个不同的应用程序,因为它来自不同的作者。这个不同的应用程序不能作为原始应用程序的更新上传到 Market,也不能作为更新安装到设备上。
用户在安装以这两种方式之一更改的应用程序时看到的确切行为是不同的:
如果清单包名称已更改,则新应用程序将与旧应用程序一起安装,因此它们会同时在用户的设备上共存。
如果签名证书更改,尝试将新应用程序安装到设备上将失败,直到旧版本被卸载。
如果您更改应用程序的签名证书,则应始终更改其清单包名称,以避免安装时失败。
你的 AndroidManifest.xml 是一个公共 API 不仅仅是你的包名是不可变的。AndroidManifest.xml 的一个主要功能本质上是从您的应用程序中声明一个公共 API,以供其他应用程序和 Android 系统使用。您在清单中声明的每个非私有组件(即其 android:exported 状态为 true)都应被视为公共 API,并且永远不会以破坏兼容性的方式进行更改。
构成兼容性中断的一个微妙但重要的方面是您的活动、服务和接收器组件的 android:name 属性。这可能令人惊讶,因为我们认为 android:name 指向实现我们应用程序的私有代码,但它也是(结合清单包名称)该组件的官方唯一公共名称,由 ComponentName 类表示。
更改应用程序内部的组件名称可能会对您的用户产生负面影响。一些例子是:
如果您的应用程序的主要活动的名称被更改,用户对其所做的任何快捷方式都将不再起作用。快捷方式是直接指定它应该运行的 ComponentName 的 Intent。Intent 主要有两种:
隐式意图仅指定它们应该匹配的“什么”,使用操作、类别、数据、MIME 类型等。他们将找到的确切组件仅在运行时确定,由包管理器将其与当前应用程序进行匹配。
显式意图通过 ComponentName 指定他们应该匹配的单个显式“谁”。无论 Intent 中的其他内容如何,它只与在其 ComponentName 中给出的确切清单包名称和类名称相关联。
这两种类型的 Intent 对 Android 如何与您的应用程序交互都很重要。
ComponentName 是您在清单中声明的组件的公共唯一名称,如果它们对其他应用程序可见,则不得更改。
总之:您的应用程序的某些部分无法更改。请小心。
http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html