启用带有时间限制的proguard时似乎不会引发TimeoutCancellationException。
以下代码在不缩小或不使用R8的情况下都能很好地工作。 withTimeout
会在预期的3秒后触发TimeoutCancellationException。
CoroutineScope(Dispatchers.Main + SupervisorJob()).launch {
try {
withTimeout(3000) {
delay(4000)
}
} catch (e: TimeoutCancellationException) {
Log.e(TAG, e.message)
}
}
但是当我启用proguard时,不再抛出异常,并且delay
暂停功能正常完成。
我在proguard-rule.pro中使用以下规则:
-dontwarn kotlinx.coroutines.flow.**inlined**
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
-keepnames class kotlinx.coroutines.android.AndroidExceptionPreHandler {}
-keepnames class kotlinx.coroutines.android.AndroidDispatcherFactory {}
# Most of volatile fields are updated with AFU and should not be mangled
-keepclassmembernames class kotlinx.** {
volatile <fields>;
}
我使用以下版本:
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2'
有人遇到过同样的问题吗?我是否错过了保护者规则?
谢谢