WorkManager:java.lang.VerifyError:验证程序拒绝类androidx.work.impl.OperationImpl

问题描述 投票:0回答:1

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

在其中一项活动中,下面代码片段中表示的

enqueue()
调用不断导致应用程序崩溃:

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

这里有一个例外:

java.lang.VerifyError:验证程序拒绝类 androidx.work.impl.OperationImpl:com.google.common.util.concurrent.ListenableFuture androidx.work.impl.OperationImpl.getResult() 无法验证:com.google.common。 util.concurrent.ListenableFuture androidx.work.impl.OperationImpl.getResult():[0x2]无法解析返回类型“未解析的参考:com.google.common.util.concurrent.ListenableFuture”或“未解析的参考:androidx.work” .impl.utils.futures.SettableFuture'('androidx.work.impl.OperationImpl'的声明出现在/data/app/~~KoZa3Uwv5hinF_EqVv8JEA==/com.ulesson.tutor.uat-YOfhXEvtwlYyJ7ihgXtB_A==/base.apk中)

我有:

  • 将 WorkManager 的依赖版本更新为
    2.8.0-alpha02
    ,这是最新版本
  • 将 minSdk 更新为 21(从 19)
  • 使用JDK 11
  • 将TARGET_SDK和COMPILE_SDK升级至31
  • 将Kotlin版本升级至1.6.0
  • 使缓存失效并重新启动

..但崩溃仍然存在。

这是

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 调用。

android android-workmanager enqueue
1个回答
1
投票

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

我的第一步是将 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" />

此后,一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.