Исключение «отсутствует модуль с главным диспетчером». только в выпуске apk

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

java.lang.IllegalStateException: Module with the Main dispatcher is missing. Add dependency providing the Main dispatcher, e.g. '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.

Что я мог попытаться заставить это работать?

8
0
2 959
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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>;
}

Источник

Действительно, моя проблема связана не с обновлением Kotlin, а с переходом на androidx.

Marko Topolnik 26.10.2018 10:04

@MarkoTopolnik Достаточно добавить предложенных правил proguard. Если вы все еще сталкиваетесь с этой проблемой, убедитесь, что вы не подписываете заново свой .apk после завершения сборки выпуска. Я столкнулся с этой проблемой при повторной подписи .apk, потому что папка МЕТА-ИНФ удалялась. Если это ваш случай, я бы посоветовал вам создать неподписанную сборку и подписать ее впоследствии. Надеюсь, это поможет.

djrsousa 24.12.2018 11:39

ДОБАВИТЬ ЭТУ СТРОКУ В ФАЙЛ ПРОГРАММЫ

-keep class kotlinx.coroutines.android. * {*;}

Другие вопросы по теме