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

启用minifyEnabled后,多商店适配的Hilt多Application类报错问题

解决方案

这个问题是因为ProGuard/R8混淆时破坏了自定义Application类的继承链可见性,或者Hilt生成的代理类被错误处理,导致系统无法识别GooglePlayApp是android.app.Application的子类。以下是具体解决步骤:

1. 添加混淆规则保护Application类和Hilt相关代码

在项目的proguard-rules.pro文件中添加以下规则(替换成你的实际包名):

# 保留双商店的Application类及其继承关系
-keep public class com.your.package.GooglePlayApp extends android.app.Application
-keep public class com.your.package.BaiduApp extends android.app.Application
-keep public class com.your.package.BaseApp extends android.app.Application

# 保留Hilt注解与生成的代理类,避免混淆破坏依赖注入逻辑
-keep @dagger.hilt.android.HiltAndroidApp class *
-keep class dagger.hilt.** { *; }
-keepattributes *Annotation*, Signature
  • *Annotation* 保留所有注解,确保Hilt的@HiltAndroidApp能被正确识别
  • Signature 保留类的签名信息,确保继承关系不被混淆工具移除

2. 确认Hilt的依赖配置包含默认混淆规则

检查你的build.gradle(Module级别)中是否正确引入了Hilt依赖,官方依赖会自动带入ProGuard规则:

dependencies {
    implementation "com.google.dagger:hilt-android:2.48"
    kapt "com.google.dagger:hilt-compiler:2.48"
}

如果依赖版本过低,建议升级到较新的稳定版,避免旧版本的混淆兼容性问题。

3. 验证混淆后的APK类结构

构建release APK后,使用Android Studio的Build > Analyze APK功能打开APK,找到classes.dex中的GooglePlayApp类,检查它的继承关系是否正确指向android.app.Application。如果仍有问题,可以进一步添加规则保留类成员:

-keepclassmembers class com.your.package.BaseApp {
    <init>();
}
-keepclassmembers class com.your.package.GooglePlayApp {
    <init>();
}

确保Application类的构造函数不被混淆移除。

4. 多渠道构建的配置检查

如果使用了Flavor区分Google Play和百度渠道,确保每个Flavor的清单文件中指定的Application类在对应渠道的混淆规则中都被正确保留,避免渠道间的混淆规则冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:57:47