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

多模块Android项目Fastlane构建APK时Hilt Worker抛NoSuchMethodException

问题分析

这个问题的核心是Fastlane构建的APK中Hilt WorkerFactory未被正确初始化,导致带额外注入参数的CoroutineWorker无法通过Hilt创建实例,WorkManager只能尝试调用默认的双参构造方法(而带参数的Worker没有这个构造方法),最终抛出NoSuchMethodException。对比Android Studio构建正常的情况,差异点集中在构建配置、混淆规则、依赖版本一致性这几个方向。

解决办法

1. 修复Hilt依赖版本不一致问题

你的依赖配置中存在版本不匹配:Hilt核心版本是2.44.2,但hiltKapt用了2.35,这会导致注解处理器生成的代码与运行时库不兼容,直接影响Hilt WorkerFactory的生成和初始化。

修改libs.versions.toml中的版本:

hiltKapt = "2.44.2"

同时确保所有模块的kapt依赖都使用统一的Hilt版本,避免跨模块版本冲突。

2. 完善ProGuard/R8规则

现有规则只保留了Worker的基础构造方法,但Hilt生成的Worker工厂类、EntryPoint等代码也需要被保留,否则会被混淆移除。添加以下规则到ProGuard配置文件:

# 保留Hilt Worker相关核心类
-keep class androidx.hilt.work.HiltWorkerFactory { *; }
-keep class * extends androidx.hilt.work.HiltWorker { *; }

# 保留AssistedInject构造方法和Hilt生成的工厂实现
-keepclasseswithmembers class * {
    @dagger.assisted.AssistedInject <init>(...);
}

# 保留Hilt EntryPoint接口
-keep class * implements dagger.hilt.EntryPoint { *; }

# 保留Worker类的全限定名,避免WorkManager找不到类
-keepnames class com.example.android.ActivitySyncWorker
-keepnames class com.example.android.RemoteConfigSyncWorker

3. 确保WorkManager初始化时机正确

WorkManager必须在Hilt完全初始化后再启动,否则无法获取到HiltWorkerFactory。检查你的Application类:

@HiltAndroidApp
class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        // 确保Hilt初始化完成后再初始化WorkManager
        AppInitializer.getInstance(this).initializeComponent(WorkManagerModule::class.java)
    }
}

同时确认Manifest中WorkManagerInitializer确实被移除,避免默认初始化覆盖自定义配置:

<meta-data
    android:name="androidx.work.WorkManagerInitializer"
    android:value="androidx.startup"
    tools:node="remove" />

4. 验证Fastlane构建的变体配置

检查Fastlane的Fastfile,确保构建命令使用的变体(比如release)和Android Studio的配置一致,且开启了kapt任务:

lane :release do
  gradle(
    task: 'assembleRelease',
    properties: {
      # 如果开启了R8 full mode,需要额外适配规则,可先关闭测试
      'android.enableR8.fullMode' => 'false'
    }
  )
end

另外,确保Fastlane构建时没有跳过kapt编译步骤,比如是否添加了--no-build-cache之类的参数导致注解处理器未执行。

5. 检查多模块Hilt配置

确保:core-ble模块的build.gradle正确应用了Hilt插件和kapt:

plugins {
    id 'com.android.library'
    id 'kotlin-android'
    id 'dagger.hilt.android.plugin'
    id 'kotlin-kapt'
}

同时App模块要正确依赖:core-ble,确保Hilt能扫描到该模块的Worker和依赖提供类。

6. 验证Hilt生成代码

Fastlane构建完成后,查看build/generated/source/kapt/release目录下,是否生成了ActivitySyncWorker_HiltWorker类和HiltWorkerFactory相关的实现。如果没有生成,说明kapt在构建时未正确执行,需要检查构建命令是否触发了kapt任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:00:55