Совместное действие с 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

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