У меня есть два проекта:
библиотека Android (которая должна использоваться в других проектах) и
Мультиплатформенный мобильный проект Kotlin, который содержит некоторый общий код для совместного использования между Android. и версии библиотеки для iOS. Я понимаю, что проект KMM должен содержать внутри код для версий Android и iOS, а не иметь отдельные проекты KMM и android/iOS, но поскольку эти проекты уже существуют и являются обширными, было бы сложно объединить их в один проект KMM, поэтому вместо этого я решил включить код из общего модуля KMM в сборку библиотеки Android.
структура каталогов проекта:
Код: Выделить всё
AndroidLibrary каталог завершается успешно, ошибка возникает только при сборке AndroidLibrary)
Все места, где используется многоплатформенный плагин:
AndroidLibrary/ kmmLibrary/build.gradle.kts
[code]plugins {
//trick: for the same plugin versions in all sub-modules
id("com.android.library").version("8.0.2").apply(false)
kotlin("multiplatform").version("1.8.21").apply(false)
}
...
AndroidLibrary/kmmLibrary/shared/build.gradle.kts
Код: Выделить всё
plugins {
kotlin("multiplatform")
id("com.android.library")
}
...
Я загрузил здесь пример кода. Запустите ./gradlew в основном каталоге, чтобы воспроизвести ошибку.
Мне удалось заставить его работать с составной сборкой gradle (с использованием includeBuild 'kmmLibrary:shared'), но я бы предпочел сохранить ее как многопроектную сборку (поэтому используйте обычный include ':kmmLibrary:shared') из-за способа обработки артефактов сборки. Использование includeBuild не позволит мне объявить зависимость проекта от общего модуля (
), который будет включать классы из общего модуля в артефакте сборки AndroidLibrary, который позже станет зависимостью от третьего проекта. Использование includeBuild потребует отдельной публикации модуля kmmLib/shared в maven, чтобы третий проект мог получить доступ к его классам (как временная зависимость от AndroidLibrary). Я хотел бы избежать этого, поэтому необходимо публиковать только библиотеку, чтобы изменения могли распространяться на любой проект, имеющий библиотеку в качестве зависимости.
Подробнее здесь:
https://stackoverflow.com/questions/771 ... d-gradle-m