【发布时间】:2021-07-15 12:00:11
【问题描述】:
使用这些优化发布我的应用后;
minifyEnabled true
shrinkResources true
useProguard true
Firebase 将我的 CampaignModel 类中的日历代码视为一个节点,并将其作为“c”添加到数据中,其中包含所有当前时间详细信息。我已经使用 Proguard 排除了我所有的类模型:
-keepclassmembers class com.tubevibe.android.models.CampaignModel {*;}
-keepclassmembers class com.tubevibe.android.models.UserModel {*;}
从实时数据库获取数据时,此节点 c 导致我的应用程序崩溃。有什么办法可以防止日历中的这个节点被插入?
这是我的广告系列模型
package com.tubevibe.android.models;
import androidx.annotation.Keep;
import java.util.Calendar;
@Keep
public class CampaignModel {
private String id;
private String idNo;
private String videoUrl;
private String viewsNeeded;
private String totalCost;
private String active;
private String timeRequired;
private Long postingDate;
Calendar c = Calendar.getInstance();
int utcOffset = c.get(Calendar.ZONE_OFFSET) + c.get(Calendar.DST_OFFSET);
public CampaignModel() {
}
public CampaignModel(String id, String idNo, String videoUrl,
String viewsNeeded,
String totalCost, String active, String timeRequired) {
this.id = id;
this.idNo = idNo;
this.videoUrl = videoUrl;
this.viewsNeeded = viewsNeeded;
this.totalCost = totalCost;
this.active = active;
this.timeRequired = timeRequired;
this.postingDate = c.getTimeInMillis() - utcOffset;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
public String getViewsNeeded() {
return viewsNeeded;
}
public void setViewsNeeded(String viewsNeeded) {
this.viewsNeeded = viewsNeeded;
}
public String getTotalCost() {
return totalCost;
}
public void setTotalCost(String totalCost) {
this.totalCost = totalCost;
}
public String getTimeRequired() {
return timeRequired;
}
public void setTimeRequired(String timeRequired) {
this.timeRequired = timeRequired;
}
public String getVideoUrl() {
return videoUrl;
}
public void setVideoUrl(String videoUrl) {
this.videoUrl = videoUrl;
}
public Long getPostingDate() {
return postingDate;
}
public void setPostingDate(Long postingDate) {
this.postingDate = postingDate;
}
public String getActive() {
return active;
}
public void setActive(String active) {
this.active = active;
}
}
【问题讨论】:
-
请分享您的“CampaignModel”类的内容,包括包名。这两行代码是在哪个地方添加的?
-
谢谢你,亚历克斯,请检查,我已编辑。我只是不知道为什么在使用缩小和收缩资源后,它也将日历添加为节点。以 -keepclassmembers 开头的两行添加到 Android Studio 上的 proguard-rules.pro 中。
-
我决定从模型中删除日历代码,并在我的活动中使用它,在该活动中我推送值以在推送之前格式化我的发布日期。看起来在模型中有额外的代码是个坏主意。我将再次发布并检查。如果它有效,我将发布作为答案。谢谢,@AlexMamo 您的回复导致了这一点。
-
试一试,告诉我它是否有效。写另一个答案?它已经在那里了,我只是写了它;)
标签: java android firebase firebase-realtime-database proguard