【问题标题】:Shared Activity with Compose in Kotlin Multiplatform project在 Kotlin 多平台项目中与 Compose 共享活动
【发布时间】:2021-05-10 14:27:35
【问题描述】:

我在设置驻留在 KMM 项目的共享代码中并使用 Jetpack Compose 的活动时遇到问题。当活动在 Android 源 (/app) 中时,它可以正常工作。但我想发布一个没有任何应用程序的共享 (/common) 库。

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

  • 将撰写活动 (SharedActivity) 添加到共享代码中
  • 更新了共享代码中的依赖关系androidMain

它编译得很好,但在运行时我得到:

进程:com.surrus.peopleinspace,PID:4067 java.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(Native Method))

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

【问题讨论】:

  • 您的 KMM 模块支持哪些平台?您是否将活动放在 androidMain 或 commonMain 下?这个错误是在哪个任务下出现的?
  • @Philip 该示例项目支持相当多的平台,但这里我只对 Android 感兴趣。构建成功,并且在运行放置在 androidMain 中的 SharedActivity 后在运行时发生错误。 link

标签: android kotlin android-jetpack-compose kotlin-multiplatform-mobile


【解决方案1】:

所需的更改是添加 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 版本社区 2021.1

谢谢John O'Reilly

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 2012-09-08
    • 2019-09-11
    • 2020-12-02
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多