调试模式正常但Release构建失败,MyService触发Instantiatable错误
问题:Debug运行正常,Release构建报错MyService必须继承android.app.Service
代码片段
@AndroidEntryPoint class MyService: LifecycleService() {
报错详情
app\src\main\AndroidManifest.xml:48: Error: MyService must extend android.app.Service [Instantiatable]
android:name=".features.record.service.MyService"关于Instantiatable类型问题的说明:在清单文件中注册的Activities、services、broadcast receivers等(或布局文件中的自定义视图)必须能被系统“实例化”,这意味着类必须是public的,必须有一个空的public构造函数,如果是内部类则必须是static内部类。 1 errors, 0 warnings
解决办法
1. 确保Service类为public访问权限
Kotlin默认类访问权限是internal,Release模式下系统无法正确识别,需显式添加public修饰符:
@AndroidEntryPoint public class MyService: LifecycleService() { // 业务代码 }
2. 添加ProGuard/R8混淆规则
Release构建的混淆会破坏Hilt生成的代理类,在proguard-rules.pro中加入以下规则保留相关类:
# 保留LifecycleService子类 -keep public class * extends androidx.lifecycle.LifecycleService # 保留Hilt内部服务代理类 -keep class dagger.hilt.android.internal.services.** { *; } -keep class * extends dagger.hilt.android.internal.services.HiltService
3. 验证混淆是否为问题根源(可选)
临时关闭Release构建的混淆和资源压缩,测试是否能正常构建,确认问题来源:
buildTypes { release { minifyEnabled false shrinkResources false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }
内容的提问来源于stack exchange,提问作者user924
相关产品推荐
相关产品推荐

