You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开启isMinifyEnabled后Firebase实时数据库解析无参构造器报错

问题解决:Firebase实时数据库混淆后解析快照报错

核心问题

你当前的ProGuard规则对内部类FirebaseTask$FirebaseTime的保护逻辑错误,用了extends(继承)语法,但FirebaseTime是FirebaseTask的内部类而非子类,导致规则完全不生效,构造器被混淆移除。

具体修复步骤

1. 修正ProGuard规则

把你原规则中针对FirebaseTime的错误配置替换为:

-keepclassmembers public class com.adisalagic.taskmanagerhelper.objects.FirebaseTask$FirebaseTime {
    <init>(...);
    *;
}

或者更省心的方式,直接保护整个objects包下的所有类(避免遗漏其他内部类/数据类):

-keepclassmembers class com.adisalagic.taskmanagerhelper.objects.** {
    <init>(...);
    *;
}

同时移除-repackageclasses选项,这个配置会打乱类的包结构,干扰Firebase的反射解析。

2. 给内部类添加@Keep注解

你只给外部类FirebaseTask加了@Keep,但内部类FirebaseTime需要单独标注,确保混淆工具直接跳过它:

@Keep
data class FirebaseTask(
    val id: String = UUID.randomUUID().toString(),
    val name: String = "",
    val start: FirebaseTime = FirebaseTime(),
    val end: FirebaseTime? = null,
    val workDay: Boolean = false
) {
    @Keep // 给内部类加上这个注解
    data class FirebaseTime(
        val nano: Long = 0,
        val second: Long = 0,
        val minute: Long = 0,
        val hour: Long = 0,
    )
}

3. 清理重建项目

执行以下操作确保规则生效:

  • Android Studio中点击Build -> Clean Project
  • 再点击Build -> Rebuild Project

为什么之前的方案无效?

你原ProGuard规则里的* extends com.adisalagic.taskmanagerhelper.objects.FirebaseTask$FirebaseTime是匹配继承该类的子类,但FirebaseTime本身就是内部类,没有子类,这条规则等于没写,导致它的无参构造器被混淆工具删除,Firebase反射解析时找不到构造器报错。

内容的提问来源于stack exchange,提问作者AdisAlagic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:10:30