Kotlin Coroutines withTimeout не выдает исключение TimeoutCancellationException при включенной защите - PullRequest
1 голос
/ 08 ноября 2019

Когда 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?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...