WorkManager: java.lang.VerifyError: Verifier rejected class androidx.work.impl.OperationImpl

WorkManager: java.lang.VerifyError: Verifier rejected class androidx.work.impl.OperationImpl

我正在尝试恢复旧代码库。

在其中一项活动中,下面代码片段中表示的 enqueue() 调用使应用程序不断崩溃:

WorkManager
    .getInstance(requireContext())
    .enqueue(updateValues) // updateValues is a WorkRequest

例外情况:

java.lang.VerifyError: Verifier rejected class androidx.work.impl.OperationImpl: com.google.common.util.concurrent.ListenableFuture androidx.work.impl.OperationImpl.getResult() failed to verify: com.google.common.util.concurrent.ListenableFuture androidx.work.impl.OperationImpl.getResult(): [0x2] can't resolve returned type 'Unresolved Reference: com.google.common.util.concurrent.ListenableFuture' or 'Unresolved Reference: androidx.work.impl.utils.futures.SettableFuture' (declaration of 'androidx.work.impl.OperationImpl' appears in /data/app/~~KoZa3Uwv5hinF_EqVv8JEA==/com.ulesson.tutor.uat-YOfhXEvtwlYyJ7ihgXtB_A==/base.apk)

我有:

..但崩溃仍然存在。

这是 updateValues 工作请求:

private val updateValues: WorkRequest by lazy {
    OneTimeWorkRequestBuilder<UpdateValuesWorker>()
        .setConstraints(
            Constraints
                .Builder()
                .setRequiredNetworkType(NetworkType.CONNECTED)
                .build()
            )
        .setBackoffCriteria(
            BackoffPolicy.EXPONENTIAL,
            5,
            TimeUnit.MINUTES
        )
        .build()
}

UpdateValuesWorker 只是进行常规 API 调用。

我承认这个解决方案有点奇怪。

我的第一步是将 WorkManager 和协程的依赖版本更新到最新版本(如问题详情中所述)。之后,我更新了 AndroidManifest.xml 文件中的 provider<> 标签:

<provider
    android:name="androidx.work.impl.WorkManagerInitializer"
    android:authorities="${applicationId}.workmanager-init"
    tools:node="remove" />

对此:

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge" />

在那之后,一切正常。