【发布时间】: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