Отсутствует модуль исключения с Главным диспетчером. только в версии APK

Я использую Kotlin 1.3 EAP и kotlinx-coroutines-android:1.0.0-RC1 в своем проекте Android. Моя сборка для разработки прошла успешно, и приложение работает нормально. Однако, когда я Generate Signed APK, приложение все еще собирается и запускается, но затем происходит сбой с

java.lang.IllegalStateException: Отсутствует модуль с диспетчером Main. Добавьте зависимость, предоставляющую диспетчер Main, например. 'kotlinx-coroutines-android'

Поскольку сборка dev работает нормально, очевидно, что в файлах gradle нет упущений. У меня есть эти настройки на месте:

Проект build.gradle:

buildscript {
    ext.kotlin_version = '1.3.0-rc-190'
    ....

Модуль build.gradle:

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.0.0-RC1'

Одно и то же приложение работало со многими различными версиями экспериментальных сопрограмм с течением времени, и я впервые столкнулся с этой проблемой. Подозреваю временную проблему в артефактах EAP.

Что я могу попытаться сделать, чтобы это сработало?


person Marko Topolnik    schedule 26.10.2018    source источник


Ответы (2)


Если вы используете proguard, добавьте эти proguard правила.

# ServiceLoader support
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}

# Most of volatile fields are updated with AFU and should not be mangled
-keepclassmembernames class kotlinx.** {
    volatile <fields>;
}

Источник

person Mikhail Olshanski    schedule 26.10.2018
comment
Действительно, моя проблема связана не с обновлением Kotlin, а с переходом на androidx. - person Marko Topolnik; 26.10.2018
comment
@MarkoTopolnik Добавления предложенных правил proguard должно быть достаточно. Если вы все еще сталкиваетесь с этой проблемой, убедитесь, что вы не повторно подписываете свой .apk после завершения сборки выпуска. Я столкнулся с этой проблемой при повторном подписании .apk, потому что папка META-INF удалялась. Если это ваш случай, я бы посоветовал вам создать неподписанную сборку и затем подписать ее. Надеюсь, поможет. - person djrsousa; 24.12.2018

ДОБАВЬТЕ ЭТУ СТРОКУ В ВАШ ФАЙЛ PROGUARD

-сохранить класс kotlinx.coroutines.android.* {*;}

person ThavaSelvan    schedule 03.08.2020