Совместное действие с Compose в многоплатформенном проекте Kotlin
У меня проблема с настройкой действия, которое находится в общем коде проекта KMM и использует Jetpack Compose. Когда активность находится в источнике Android (/app), это нормально работает. Но я бы хотел опубликовать общую (/ общую) библиотеку без какого-либо приложения.
В качестве примера я создал отличный минимальный проект KMM+Compose: https://github.com/cyberhenoch/PeopleInSpace :
- добавлено действие создания (SharedActivity) в общий код
- обновлены зависимости в общем коде androidMain
Он отлично компилируется, но во время выполнения я получаю:
Процесс: com.surrus.peopleinspace, PID: 4067java.lang.NoSuchMethodError: нет статического метода setContent$default(Landroidx / activity / ComponentActivity;Landroidx / compose / runtime / CompositionContext;Lkotlin / jvm / functions / Function0;ILjava / lang / Object;)V в классе Landroidx / activity / compose / ComponentActivityKt; или его суперклассы (объявление androidx.activity.compose.ComponentActivityKt находится в /data/app/com.surrus.peopleinspace-8P35Dcwzn9_G-xN9YdwFrA==/base.apk) в com.surrus.android.SharedActivity.onCreate(SharedActivity.kt:12)
Я попытался добавить параметры, описанные здесь https://developer.android.com/jetpack/compose/setup#configure_gradle, но
- не все можно добавить в общий модуль (kotlinOptions?)
- в исходном проекте они не требуются и работает отлично
- после добавления нескольких из них в разных комбинациях он даже не компилируется ( исключение: java.lang.NoClassDefFoundError: org / jetbrains / kotlin / serialization / DescriptorSerializerPlugin в java.base / java.lang.ClassLoader.defineClass1 (собственный метод) )
Что мне делать, чтобы все заработало? Любая помощь будет оценена по достоинству.
2 ответа
Требуемое изменение - добавление плагина org.jetbrains.compose.
На основе шаблона IDEA (не Android Studio) для создания многоплатформенного проекта с Compose Jetpack Compose for Desktop (экспериментальный) -> Mutiplatform использует Kotlin 1.4.30
Проект build.gradle.kts
buildscript {
repositories {
gradlePluginPortal()
}
}
...
allprojects{
...
maven { url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") }
}
Общий модуль build.gradle.kts
plugins{
...
id("org.jetbrains.compose") version "0.3.1"
}
Кроме того, после добавления плагина Android Studio испортила модули, показывающие ошибку «ни один модуль не выбран», и проблему, описанную в этом вопросе . Но открытие его в IDEA показало возможность исправить многомодульный проект Gradle. Я исправил это и снова открыл в Android Studio.
Необходимые изменения можно увидеть в примере репо .
Версия AS 2020.3.1 Canary 15 и версия IDEA Community 2021.1
Спасибо, John O'Reilly !
Похоже на ошибку зависимости.
Убедитесь, что у вас есть
androidx.activity:activity-compose:1.3.0-alpha07
Добавлено в
Если он уже есть - попробуйте добавить все другие зависимости, которые у вас есть в модуле приложения Android (который работает нормально), добавленном в ваш
androidMain