在 Kotlin Multiplatform 项目中与 Compose 共享 Activity

Shared Activity with Compose in Kotlin Multiplatform project

我在设置驻留在 KMM 项目的共享代码中并使用 Jetpack Compose 的 activity 时遇到问题。当 activity 在 Android source (/app) 中时,这工作正常。但是我想发布一个共享的 (/common) 库而不需要任何应用程序。

例如,我分叉了一个很棒的最小 KMM+Compose 项目:https://github.com/cyberhenoch/PeopleInSpace :

编译正常,但在运行时我得到:

Process: com.surrus.peopleinspace, PID: 4067 java.lang.NoSuchMethodError: No static method setContent$default(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V in class Landroidx/activity/compose/ComponentActivityKt; or its super classes (declaration of 'androidx.activity.compose.ComponentActivityKt' appears in /data/app/com.surrus.peopleinspace-8P35Dcwzn9_G-xN9YdwFrA==/base.apk) at com.surrus.android.SharedActivity.onCreate(SharedActivity.kt:12)

我尝试添加此处描述的选项 https://developer.android.com/jetpack/compose/setup#configure_gradle 但是

我应该怎么做才能让它发挥作用?任何帮助将不胜感激。

所需的更改是添加 org.jetbrains.compose 插件。

基于 IDEA(而非 Android Studio)模板,使用 Compose 创建多平台项目 Jetpack Compose for Desktop (Experimental) -> Mutiplatform uses 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 搞乱了显示“未选择模块”错误的模块以及此 question 中描述的问题。但是在 IDEA 中打开它显示了修复多模块 gradle 项目的选项。我以这种方式修复它并在 Android Studio 中重新打开。

可以在 the example repo 中看到所需的更改。

AS版本2020.3.1 Canary 15 & IDEA版本Community 2021.1

谢谢John O'Reilly