所以这可能听起来像一个完整且完全的noob问题,但我会问,看看我发现了什么。
我正在使用Eclipse IDE开发Android应用程序。我有两台开发机器(一台用于工作,一台用于家用),一台是64位,另一台是32位。我用来测试我的应用程序的手机是谷歌Nexus(Verizon风味,最新的驱动程序)。如果我使用一台机器构建并运行应用程序,那么尝试在另一台机器上执行相同操作我收到控制台错误,该错误告诉我运行ADB命令卸载我的应用程序,因为签名已更改。
据我所知,因为“debug.keystrore”(位于%USER_HOME%/。android中)对于每台机器都不同。为什么这样做?我认为应用程序签名对于app而不是app + dev机器是唯一的。这是正常的行为吗?如果是这样,我能做些什么来解决它吗?我担心在机器之间复制/粘贴文件可能会导致问题,所以我还没有尝试过。每次切换机器时我都要移动这个文件吗?此外,如果我将我的应用程序发布到野外;然后松开我的电脑并开始使用新电脑(因此,更改应用程序sig),安装我的应用程序的每个人都必须卸载应用程序,因为应用程序信号不同吗?
Bonus round:有什么方法可以配置我的IDE,这样我就不必每次切换机器时都改变eclipse看起来找到SDK的位置(即让它看起来在ProgramFiles目录和ProgramFiles中) x86)目录。
答案 0 :(得分:4)
为了确保应用程序是由同一个开发人员构建的,Android希望签名是相同的。随意在机器之间复制调试密钥。它与您的机器无关或是否为32/64位;它只能证明你是同一个开发者。
当需要发布你的应用时,你需要非常小心
如果您丢失了发布密钥,则无法像您怀疑的那样更新您的应用。
更新:为了让我的答案更加完整,看起来像告诉Eclipse使用哪个密钥的方式是在Preferences - >下Android - >建立。
我使用Linux而不使用Eclipse;我所做的只是将~/.android/debug.keystore
从机器复制到机器,而ant构建工具自动使用它,避免讨厌的“证书不匹配”安装错误。
对于我的发布密钥库,我在ant.properties
:
key.store=../private/my-release-key.keystore
并将my-release-key.keystore
保留在私有存储库中,效果相同。
答案 1 :(得分:1)
我想对于不同的平台,Google团队已经创建了不同的调试密钥(我想用于跟踪目的)。这些调试密钥不依赖于您的应用程序。如果要分发应用程序,则需要创建自己的密钥。如果您使用自己的证书对应用程序进行签名,则不应存在此类问题(因为在这种情况下,证书仅取决于您在创建证书时输入的属性)。根据偏好设置 - > Android - >构建您可以选择要使用的密钥库。
答案 2 :(得分:1)
签名对每个开发人员都是唯一的。据我所知,如果您使用调试密钥,它会使用您的mac地址或其他独特的特性来创建任意密钥。因此,当您使用一台计算机在一台设备上构建和安装应用程序,然后再使用另一台计算机时,您会有不同的签名,从而出现问题。
为了能够解决这个问题,您应该像其他人提到的那样创建自己的密钥,然后在构建时使用它来签名。
您永远不会想要使用调试密钥发布应用程序,这仅用于开发,当您发布应用程序时,您希望使用您创建的唯一密钥。
这些密钥用于在未经您许可的情况下阻止其他人更新您的应用,因此创建您自己的开发密钥并且您不会遇到此问题。
这是一个链接,可以帮助您开始并指向正确的方向:http://developer.android.com/tools/publishing/app-signing.html
答案 3 :(得分:0)
我已将“debug.keystore”从一台机器复制到另一台机器,没有不良副作用。您可以简单地用另一个覆盖一个,并且修复了卸载/重新安装问题。调试密钥仅用于保护开发人员自己的设备免受其他开发人员的二进制文件的影响。
正如其他人所说,您不会使用调试密钥发布您的应用程序,您必须根据developer.android.com上的说明制作发布密钥并对其进行签名。
另外值得注意的是,“debug”键仅在创建之日起1年内有效(安装SDK时)。一年后,SDK会说它已过期,并生成一个新的调试密钥。您必须将新密钥重新复制到另一台计算机,并且必须卸载使用旧调试密钥签名的应用程序。
至于你提到的另一个问题,你应该有单独的Eclipse工作区,它们都使用不同的SDK位置引用同一个Android项目。项目不需要位于工作区的子文件夹中,因此您可以进行此分离。