1

所以这听起来像是一个完整而完全的菜鸟问题,但我还是要问一下,看看我能找到什么。

我正在使用 Eclipse IDE 开发一个 Android 应用程序。我有两台我使用的开发机器(一台用于工作,一台用于家庭),一台是 64 位,另一台是 32 位。我用来测试我的应用程序的手机是 Google Nexus(Verizon 风格,最新的驱动程序)。如果我使用一台机器构建和运行应用程序,然后尝试在另一台机器上执行相同操作,我会收到一个控制台错误,告诉我运行 ADB 命令来卸载我的应用程序,因为签名已更改。

据我了解,这是因为每台机器的“debug.keystrore”(位于 %USER_HOME%/.android 中)都不同。为什么这样做?我假设应用程序签名对于应用程序而不是应用程序 + 开发机器是唯一的。这是正常行为吗?如果是这样,我能做些什么来解决它吗?我担心在机器之间复制/粘贴文件会导致问题,所以我还没有尝试过。每次切换机器时都必须移动此文件吗?另外,如果我将我的应用程序发布到野外;然后松开我的计算机并必须开始使用新计算机(因此,更改应用程序签名)安装我的应用程序的每个人都必须卸载该应用程序,因为应用程序签名不同?

奖励回合:有什么方法可以配置我的 IDE,这样我就不必在每次切换机器时更改 eclipse 查找 SDK 的位置(即让它同时在 ProgramFiles 目录和 ProgramFiles (x86) 目录中查找) .

4

4 回答 4

4

为了确保应用程序是由同一开发人员构建的,Android 希望签名相同。随意在机器之间复制您的调试密钥。它与您的机器或是否为 32/64 位无关;它只能证明你是同一个开发者。

在发布您的应用程序时,您需要非常小心

  1. 将您的发布密钥保密,并且
  2. 在多个地方备份您的发布密钥。

如果您丢失了发布密钥,您将无法更新您的应用程序,正如您所怀疑的那样。

更新:为了让我的答案更完整,它看起来像是告诉 Eclipse 使用哪个键位于 Preferences -> Android -> Build 下的方式。

我使用 Linux,不使用 Eclipse;我所做的只是~/.android/debug.keystore从一台机器复制到另一台机器,并且 ant 构建工具会自动使用它,避免讨厌的“证书不匹配”安装错误。

对于我的发布密钥库,我在我的ant.properties

key.store=../private/my-release-key.keystore

并保存my-release-key.keystore在私有存储库中,效果大致相同。

于 2012-07-11T20:34:24.110 回答
1

每个开发人员的签名都是唯一的。据我了解,如果您使用调试密钥,它会使用您的 mac 地址或其他独特特征来创建任意密钥。因此,当您在一台机器上构建应用程序并将其安装到设备上,然后再使用另一台机器时,您会遇到不同的签名,从而导致您的问题。

为了避免出现这个问题,您应该创建自己的密钥,正如其他人所提到的,然后在构建时使用它来签名。

你永远不会想用你的调试密钥发布一个应用程序,这只是为了开发,当你去发布你的应用程序时,你想使用你创建的唯一密钥。

这些密钥用于防止其他人在未经您许可的情况下更新您的应用程序,因此请创建一个您自己的开发密钥,您将不会遇到此问题。

这是一个可以帮助您入门并指向正确方向的链接:http: //developer.android.com/tools/publishing/app-signing.html

于 2012-07-11T20:44:46.337 回答
1

我猜谷歌团队为不同的平台创建了不同的调试密钥(我猜是为了跟踪目的)。这些调试密钥不依赖于您的应用程序。如果您想分发您的应用程序,您需要创建自己的密钥。如果您使用自己的证书签署应用程序,则不应该出现此类问题(因为在这种情况下,证书仅取决于您在创建证书时输入的属性)。在 Preferences -> Android -> Build 下,您可以选择要使用的密钥库。

于 2012-07-11T20:35:33.997 回答
0

我已经将“debug.keystore”从一台机器复制到另一台机器,没有不良副作用。您可以简单地用另一个覆盖一个,并且修复了卸载/重新安装问题。调试密钥仅用于保护开发人员自己的设备免受其他开发人员的二进制文件的影响。

正如其他人所提到的,您不使用调试密钥发布您的应用程序,您必须按照 developer.android.com 上的说明制作发布密钥并对其进行签名。

另外值得注意的是,“调试”密钥自创建之日起(安装 SDK 时)仅在 1 年内有效。一年后,SDK 会说它已过期,并生成一个新的调试密钥。您必须将新密钥重新复制到另一台计算机,并且必须卸载使用旧调试密钥签名的应用程序。

至于您提到的另一个问题,您应该有单独的 Eclipse 工作区,它们都引用同一个 Android 项目,使用不同的 SDK 位置。该项目不需要位于工作区的子文件夹中,因此您可以进行这种分离。

于 2012-07-11T21:05:44.700 回答