[Android:如果我之前未清除应用数据,则应用会在启动时崩溃

问题描述 投票:0回答:1

[我在Play商店中发布了我的Android应用程序的更新,但问题是,如果我从Android Studio安装了该应用程序,则该应用程序可以运行,但是如果我从Play商店中安装了更新,则该应用程序将崩溃。

[我注意到,如果我从设置中清除了缓存和应用程序数据,并且在Play商店中更新了应用程序后,所有的方法都可以使用。

有人可以向我解释为什么这种行为?我必须在代码中添加一些内容以在启动时清除数据吗?

非常感谢。Manuela。

android crash startup
1个回答
0
投票

这可能与保护规则有关。

例如,假设我们有

Class A{
    public int height, weight;
    public String name;
}

现在是否要序列化类并将其保存在某个地方(例如:首选项)

正在开发中,并且从首选项中检索/反序列化了您的类后,您将访问保存的值,例如:A.高度和A.重量等...

但是在构建发行版时,则Proguard会处理您的代码,并将最小化应用于代码。因此,在构建发行版之后,您的类将如下所示:

Class A{
    public int a, b;
    public String c;
}

然后访问A.height或任何其他类属性将导致崩溃,因为A.height现在被命名为A.a

要解决此问题,您需要通过将以下行添加到proguard-rules.pro文件中来将类从proguard处理中排除:

-keep class yourpackagename.folder.A { *; } //exclude class A 

-keep class yourpackagename.folder.** { *; } //exclude all files in folder

添加规则并在构建发行版后由Proguard处理您的应用后,Class A将保持不变,并且在对其进行序列化/反序列化时不会发生冲突。

提示:尝试寻找实现可序列化的类

Class A implements Serializable{
    ...
}

并将它们排除在您的保护规则文件中。

© www.soinside.com 2019 - 2024. All rights reserved.