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

混淆构建下WorkManager无法实例化Worker,抛出NoSuchMethodException

问题:WorkManager混淆构建时无法实例化Worker

正常构建后台任务无异常,混淆构建时服务初始化抛出如下错误:

Could not instantiate REDACTEDWorker
java.lang.NoSuchMethodException: REDACTEDWorker.<init> [class android.content.Context, class androidx.work.WorkerParameters]
at java.lang.Class.getConstructor0(Class.java:2328)
at java.lang.Class.getDeclaredConstructor(Class.java:2167)
at e1.y.b(SourceFile:65)
at f1.j.k(SourceFile:358)
at f1.j.run(SourceFile:17)
at n1.i$a.run(SourceFile:3)

环境与配置

  • 基于WorkManager 2.7.1开发,使用Dagger2(非Hilt)+ RxWorker,实现了自定义WorkerFactory
  • 已按照官方《Custom WorkManager Configuration and Initialization》文档完成自定义初始化配置
  • Gradle依赖配置:
// workVersion is 2.7.1
implementation "androidx.work:work-rxjava2:$workVersion"
implementation "androidx.work:work-runtime-ktx:$workVersion"
  • Manifest配置(禁用默认初始化):
<application>
 ...
 <provider
      android:name="androidx.startup.InitializationProvider"
      android:authorities="${applicationId}.androidx-startup"
      android:exported="false"
      tools:node="remove" />
</application>

已尝试无效的方案

添加了针对旧版本WorkManager的ProGuard规则,但问题未解决:

-keepclassmembers class * extends androidx.work.Worker {
    public &lt;init&gt;(android.content.Context,androidx.work.WorkerParameters);
}

解决建议

因为你使用的是RxWorker而非普通Worker,原规则仅覆盖了Worker子类,需补充RxWorker的混淆规则:

# 保留RxWorker的构造方法
-keepclassmembers class * extends androidx.work.RxWorker {
    public <init>(android.content.Context, androidx.work.WorkerParameters);
}

# 推荐保留自定义Worker类完整结构,避免类名/方法被混淆导致WorkManager无法匹配
-keep class com.yourpackage.**Worker { *; }

同时检查自定义WorkerFactory的混淆规则,确保注入逻辑不被破坏:

# 保留自定义WorkerFactory的类与方法
-keep class com.yourpackage.YourCustomWorkerFactory { *; }

最后确认WorkManager自定义初始化逻辑是否正常,确保WorkerFactory被正确传入WorkManagerConfiguration,避免混淆导致初始化代码失效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:34:58