Android - 发布签名版本中的不同行为?

时间:2011-07-29 19:01:16

标签: java android build release

我的Android应用程序有一些非常奇怪的“错误”,我从Eclipse运行它运行良好,非常完美。

它包含一个登录屏幕,我可以在Eclipse中运行时访问并进入我的主屏幕。当我按下主页并返回我的应用程序时,它返回到应用程序所在的最后位置(活动)。

然而,当我发布一个构建标志并将其部署在设备上时,它具有不同的行为,当我按下主页然后返回到应用程序时,登录屏幕出现始终

两个版本中的代码相同,只有一个是使用默认调试密钥库签名而另一个是使用我自己的版本密钥库签名。

有没有人碰到过这个?它真的很混乱!

编辑:更多信息:

该应用程序目前的工作方式如下:

启动主要活动,然后调用登录活动,登录活动然后转移到我的应用核心活动。

我还发现它似乎是在安装后的第一次运行中我遇到了问题,如果我运行应用程序,强制关闭它然后再次运行它然后运行完美而没有任何问题。

所以它似乎真的很奇怪?

2 个答案:

答案 0 :(得分:1)

您可以将Eclipse配置为使用相同的密钥库吗?

我使用Ant脚本,它使用与我发布的版本相同的密钥安装我的'debug'应用程序,所以我没有看到这个问题。

答案 1 :(得分:1)

我知道这是一个老问题,但是这个问题使我有些头痛,如果有人遇到相同的问题,我将在下面发布解决方案。

由于Intent的启动模式,调试和发布模式之间的“怪异”活动流程有所不同。在进行调试时,请按“运行”按钮以启动主要活动。在发布模式下,您安装了应用程序,然后按“打开”应用程序按钮。

从其他位置打开应用程序后,意图将发生变化,并导致重新打开应用程序。最重要的是(由于Android的体系结构),如果您有多个活动流程,例如:Splash-> Login-> Main-> etc,然后按“ home”并从其他位置重新打开应用程序,则整个Activity流程为重新启动后,但旧活动将保留在堆栈中。对我来说,由于在Singleton中进行了一些变量初始化,因此导致了一些问题。

为解决此问题,您可以在AndroidManifest中为您的活动设置不同的启动模式:

android:launchMode="singleTask"

此外,您可以尝试使用singleInstancesingleTop。每种启动模式都有不同的行为。

如果您的应用程序已在Google Play商店中发布,则可以复制此问题。导航至商店中的应用,然后按“打开”按钮。应用启动后,按“主页”按钮,进入“菜单”屏幕,然后从此处打开应用。您将看到该应用程序已重新创建。