[我在Play商店中发布了我的Android应用程序的更新,但问题是,如果我从Android Studio安装了该应用程序,则该应用程序可以运行,但是如果我从Play商店中安装了更新,则该应用程序将崩溃。
[我注意到,如果我从设置中清除了缓存和应用程序数据,并且在Play商店中更新了应用程序后,所有的方法都可以使用。
有人可以向我解释为什么这种行为?我必须在代码中添加一些内容以在启动时清除数据吗?
非常感谢。Manuela。
这可能与保护规则有关。
例如,假设我们有
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{
...
}
并将它们排除在您的保护规则文件中。