Когда Proguard включен с Timeout, кажется, не выдает TimeoutCancellationException.
Следующий код работает хорошо без сжатия или с R8. withTimeout
срабатывание TimeoutCancellationException через 3 с, как и ожидалось.
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>;
}
Я использую следующие версии:
- Версия плагина gradle AS: 3.5.1
- Версия Kotlin:1.3.50
- Версии Kotlin сопрограмм:
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2'
Кто-нибудь сталкивался с такой же проблемой? Я пропустил правило proguard?
Спасибо