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)
我有:
- 已将 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 调用。
我承认这个解决方案有点奇怪。
我的第一步是将 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" />
在那之后,一切正常。
我正在尝试恢复旧代码库。
在其中一项活动中,下面代码片段中表示的 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)
我有:
- 已将 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 调用。
我承认这个解决方案有点奇怪。
我的第一步是将 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" />
在那之后,一切正常。