用这些优化发布我的应用程序之后;
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;
}
}
2条答案
按热度按时间sg2wtvxw1#
亚历克斯解释了
c
出现在你的数据库中,但我想指出另外两种方法来确保它不会出现。将字段标记为
private
,这意味着firebase在读取/写入数据库时忽略它:显式告诉firebase在读取/写入数据库时忽略该字段:
6pp0gazn2#
如果“models”包下有多个类,则只能使用以下行:
因为我看到您在“campaignmodel”类中使用了“@keep”注解,这是正确的,所以必须将以下两行代码添加到“proguard rules.pro”文件中:
就在上面代码行的前面。请记住,您之所以会出现这种行为,是因为您正在使用proguard for security,它会在您创建应用程序的apk之后立即对代码进行洗牌,以便其他人看不到代码:
firebase firestore变量名称已更改
它适用于CloudFireStore,但同样的规则也适用。
此外,“calendar”类不是firebase实时数据库支持的数据类型。我没有测试它,但很可能您还需要添加以下行:
如果这不起作用,很可能您应该从模型类中取出“c”对象并创建一个新的示例,只在您需要它的类中。这样,对象“c”将不再出现在数据库中。
若要查看它的工作情况,请使用更改的代码再次发布应用程序。