【问题标题】:Can Android certificates get corrupted? I am unable to upload new Play Store App updateAndroid 证书会损坏吗?我无法上传新的 Play 商店应用更新
【发布时间】:2017-06-28 15:14:39
【问题描述】:

我继承了一个最初外包给外部开发人员的 Android 应用程序,修复了一些东西,现在我准备将新的更新发送到 Play 商店。 然后我发现我需要一个特定的签名密钥来更新我们从以前的开发人员那里得到的应用程序。 所以我使用我得到的密钥生成了一个签名的发布 apk 并尝试上传。上传后,我会弹出一个错误消息。 see screenshot for details

我们询问了开发人员是否确定那是他使用的钥匙,他发誓他到处寻找,发现这是他唯一使用的钥匙。不过,我确实认为他可能已经更改了密码……但不确定。

我对应用程序进行的重大更改是更改清单中的包并创建产品风格,每个产品都有自己的包名称(其中一个必须保留来自 Play 商店的原始包名称)。

我注意到一些事情:当我拿到应用程序时,应用程序清单有一个注释掉的包名和一个包含我们公司名称的新包名。原来的那个用外包公司的名字代替了“com.example.appname”位的“example”,所以他们在创建发布apk时一定是改了包名。 我不知道这是否意味着什么,因为当我把它全部放在一个 apk 中时,包名称是相同的......只是商店声称该应用程序是用不同的证书签名的,而以前的开发者发誓他使用就是他寄给我们的。

谁能告诉我是否有可能做任何事情来完成这项工作,或者我们完全注定要失败并且必须将新应用上传到商店?

感谢您的帮助。

更新: 因为人们在询问包名,所以让我澄清一下。 当我得到应用程序时,清单中的所有包名都与 Playstore 中的包名不同......所以我在整个应用程序范围内重构了整个包以反映 Play-store 包名......然后我介绍了产品风格因为我们需要一个具有不同品牌的新应用程序,它与原始应用程序相似......所以我以这样的结构结束:

defaultConfig {
    applicationId "PlayStorePackagName"
}
productFlavors {
    brand1 {
        applicationId "PlayStorePackagName" //<- for original app
    }
    new_brand{
        applicationId "NewPlayStorePackagName" //<- for new app.
    }
}

在这种情况下,清单中的包名称应该无关紧要,不是吗?

【问题讨论】:

  • 由于您更改了包名,您将不得不使用新包上传新的 APK。对不起。
  • 但我没有更改包名....只是在内部...这有关系吗?
  • 您的应用使用您的包名列出。由于您更改了它,因此完全被视为新应用程序。
  • @Sourav 但是清单中的包名一开始就错了。它与 Play 商店中的不一样......所以我更改了包名称以反映 Play 商店中的那个......然后我使用 productflavors 覆盖包名称,因为我需要一个稍微改变的版本不同的品牌和新的包名:基本上我做了这样的事情:defaultConfig { applicationId "OriginalPlayStorePackagName" } productFlavors { brand1 { applicationId "OriginalPlayStorePackagName" } new_brand{ applicationId "NewPlayStorePackagName" } }
  • 您想使用 applicationIdSuffix 吗?你可以在这里检查吗? developer.android.com/studio/build/…

标签: android google-play code-signing digital-certificate code-signing-certificate


【解决方案1】:

您不能更改 Playstore 的应用程序包名称和证书!如果您没有正确的证书,则无法将您的应用作为现有应用的更新提交。

证书检查

但是,您可以检查存储在可用 Keystore 中的信息,并将其与当前存储 apk 进行比较。例如:

jarsigner -verify -verbose -certs yourapp.apk

您可以通过keytool 获取更多详细信息。有关详细信息,请参阅this 线程。

包名

您可以在 Play 商店中浏览您的应用时检查您的应用的正确包名称。

Google Plus 示例:https://play.google.com/store/apps/details?id=com.google.android.apps.plus

id=com.google.android.apps.plus 在这种情况下是包名。此无法为您的应用更改

但是,此包名称由您的应用程序中的 applicationId 定义。您的应用程序结构可以有不同的包名称。请参阅here 了解更多信息。

【讨论】:

  • 这可能是最正确的答案。老实说,我认为我们得到的密钥不是损坏的就是错误的,因为当我很确定我使用了正确的包名称时,指纹会随机改变是没有意义的。我的意思是指纹的全部意义在于,如果您使用相同的配置,它会保持不变,不是吗?无论如何,我们上传了一个新的应用程序。这次我们烤了钥匙:)
【解决方案2】:

来自docs

当您准备好对您的 APK 进行更改时,请务必同时更新您应用的版本代码,以便现有用户能够收到您的更新。

使用以下清单确保您的新 APK 已准备好更新现有用户:

  • 更新后的 APK 包名需与当前版本一致。
  • 版本代码需要大于当前版本。详细了解应用版本控制。
  • 更新后的 APK 需要使用与当前版本相同的签名进行签名。

要验证您的 APK 是否使用与之前版本相同的认证,您可以在两个 APK 上运行以下命令并比较结果:

$ jarsigner -verify -verbose -certs my_application.apk

如果结果相同,则说明您使用的是相同的密钥并准备好继续。如果结果不同,则需要使用正确的密钥对 APK 重新签名。

你这么说:

我对应用程序进行的重大更改是更改清单中的包

所以这是问题的根源。您需要使用相同的包名。

【讨论】:

  • 但是 androidmanifest 包名总是“错误的”......就像......它与 playstore 中的不一样。因此,我更改了清单中的名称以反映 playstore 中的名称,并设置 productflavors 以覆盖包名称:defaultConfig { applicationId "originalPlayStorePackagName" } productFlavors { brand1 { applicationId "originalPlayStorePackagName" } new_brand{ applicationId "NewPlayStorePackagName" } } ..... 所以无法覆盖包名称吗? o.o
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
相关资源
最近更新 更多