Жирная банка с мультиплатформой Ktor и Kotlin - PullRequest
1 голос
/ 22 марта 2019

У меня есть мультиплатформенный проект kotlin для Android и iOS и недавно интегрированный ktor, чтобы общая библиотека могла загружать веб-ресурсы. Это работает на iOS, но на Android я получаю эту ошибку:

java.lang.NoClassDefFoundError: Failed resolution of: Lio/ktor/client/HttpClientJvmKt

Я предполагаю, что мой конвейер сборки создает jar, который не содержит всех зависимостей, которые нужны ktor. Поэтому я пытаюсь сделать толстую банку, используя плагин gradle shadow (com.github.jengelman.gradle.plugins:shadow:2.0.4). Вот моя задача:

task shadowJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
    from kotlin.targets.android.compilations.main.output
    def runtimeClasspath = kotlin.targets.android.compilations.main.runtimeDependencyFiles
    configurations = [runtimeClasspath]
    baseName = 'myproject-android-shadow'
    exclude 'META-INF/*'
    exclude '*.kotlin_metadata'
}

Баночка подскочила с 300Кб до 8,5Мб.

Результатом является новая ошибка: More than one file was found with OS independent path 'kotlinx/coroutines/CoroutineExceptionHandler.kotlin_metadata'

Вы заметите, что я пытался исключить файлы из shadowJar, но это не работает.

1 Ответ

0 голосов
/ 27 марта 2019

Несмотря на то, что создание толстой банки возможно, более простым решением было включить отсутствующие зависимости (ktor и kotlinx) непосредственно в приложение.Затем мне пришлось добавить кучу exclude 'META-INF ... операторов в packagingOptions.

...