Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 由于应用程序签名不同,重新安装失败_Android_Debugging_Code Signing - Fatal编程技术网

Android 由于应用程序签名不同,重新安装失败

Android 由于应用程序签名不同,重新安装失败,android,debugging,code-signing,Android,Debugging,Code Signing,当我试图调试一个已经安装的应用程序时,我收到了上面的错误消息。大多数遇到这种情况的人似乎是在不同的机器上开发的,具有不同的密钥文件,但我在同一个机器上做所有事情 我的问题是,我正在测试我的数据库升级过程,即SQLiteOpenHelper扩展的onUpgrade方法的功能。为此,我想在各种旧版本的基础上尝试升级。这些版本作为已签名的应用程序包提供。当我将这样一个包部署到一个新的模拟器上,然后尝试在上面调试当前版本时,我在主题行中得到了错误。我认为这是因为调试部署包未签名,而当前安装的包已签名。同

当我试图调试一个已经安装的应用程序时,我收到了上面的错误消息。大多数遇到这种情况的人似乎是在不同的机器上开发的,具有不同的密钥文件,但我在同一个机器上做所有事情

我的问题是,我正在测试我的数据库升级过程,即SQLiteOpenHelper扩展的onUpgrade方法的功能。为此,我想在各种旧版本的基础上尝试升级。这些版本作为已签名的应用程序包提供。当我将这样一个包部署到一个新的模拟器上,然后尝试在上面调试当前版本时,我在主题行中得到了错误。我认为这是因为调试部署包未签名,而当前安装的包已签名。同样,我知道,如果我取消安装当前安装的应用程序,错误就会消失,但是我无法测试升级

我不想将开发环境切换回较旧的构建版本,以便为这些版本构建未签名的包。我甚至可能无法做到这一点,因为我最近切换了源代码存储库,并丢失了一些历史记录

我相信,如果我能够让Eclipse生成一个签名包进行调试,它应该可以工作。或者,我可以手动部署一个签名包并启动一个调试会话,而不需要构建/部署步骤,但我也没有弄清楚这是否可行。我能做什么


Edit:在确定如何使用调试密钥对包进行签名方面很有帮助,但这对我没有帮助,因为我需要使用私钥进行调试。我想这是不可能的。

我将把它作为一个答案发布:

你应该用一个签名来生成它们,否则它就不起作用了。只有卸载和重新安装才能使用不同的签名。从这里也可以看出:

Eclipse用户
如果您是在Eclipse/ADT中开发的,并且已经按照上面在签名的基本设置中所述设置了Keytool和Jarsigner,那么默认情况下会启用调试模式下的签名。运行或调试应用程序时,ADT会使用调试证书对.apk进行签名,在包上运行zipalign,然后将其安装到选定的仿真器或连接的设备上。只要ADT有权访问Keytool,您无需采取任何具体行动。

我会将其作为答案发布:

你应该用一个签名来生成它们,否则它就不起作用了。只有卸载和重新安装才能使用不同的签名。从这里也可以看出:

Eclipse用户
如果您是在Eclipse/ADT中开发的,并且已经按照上面在签名的基本设置中所述设置了Keytool和Jarsigner,那么默认情况下会启用调试模式下的签名。运行或调试应用程序时,ADT会使用调试证书对.apk进行签名,在包上运行zipalign,然后将其安装到选定的仿真器或连接的设备上。只要ADT有权访问Keytool,您就不需要执行任何特定操作。

您可以使用发布密钥对当前包进行签名、在设备上安装、运行应用程序并在Eclipse中连接调试器。如何连接调试器:在“设备”视图的DDMS透视图中,选择您的应用程序,然后按带有绿色错误的按钮:


您可以使用发布密钥对当前包进行签名,在设备上安装,运行应用程序,并在Eclipse中连接调试器。如何连接调试器:在“设备”视图的DDMS透视图中,选择您的应用程序,然后按带有绿色错误的按钮:


你应该用一个签名来生成它们,否则它就不起作用了。只有卸载和重新安装才能使用不同的签名。你应该用一个签名来生成它们,否则它就不起作用了。只有卸载和重新安装才能使用不同的签名。Sergey,我知道了,但我不能放弃使用调试键的旧包,也不能重新创建它们。看起来我运气不好,必须在没有调试器帮助的情况下找到升级失败的原因。@cdonner您可以使用命令行adb shell,然后键入logcat,看看它失败的地方。Sergey,我已经知道了,但我不能用调试键放弃旧包,也不能重新创建它们。看来我运气不好,必须在没有调试器帮助的情况下找到升级失败的原因。@cdonner您可以使用命令行adb shell,然后键入logcat,看看它在哪里失败。唯一的问题是,my app force在启动时关闭,并且存在旧的数据库。不过,快速点击一下,我就可以进入一个断点。谢谢,太好了。唯一的问题是,my app force在启动时关闭,并且存在旧的数据库。不过,快速点击一下,我就可以进入一个断点。谢谢