【问题标题】:For JetpackCompose, can we create our Composable Function in another library?对于 JetpackCompose,我们可以在另一个库中创建我们的 Composable Function 吗?
【发布时间】:2021-08-17 19:42:26
【问题描述】:

我正在尝试将一些 Jetpack Compose 函数分离到另一个库中。

在我的应用模块上,我有

setContent {
    MyApplicationTheme {
        Surface(color = MaterialTheme.colors.background) {
            Greeting()
        }
    }
}

但是,可组合函数 MyApplicationTheme 来自另一个库

@Composable
fun MyApplicationTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    content: @Composable() () -> Unit) { ... }

它编译得很好。但是当我运行并到达触发MyApplicationTheme的函数时,它会崩溃状态

    java.lang.NoSuchMethodError: No static method MyApplicationTheme(ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V in class Lcom/example/based_lib/theme/ThemeKt; or its super classes (declaration of 'com.example.based_lib.theme.ThemeKt' appears in /data/data/com.example.myapplication/code_cache/.overlay/base.apk/classes2.dex)

我有一个示例设计演示崩溃...(只需单击按钮进入 Jetpack Compose 活动,它会崩溃)

https://github.com/elye/issue_android_jetpack_compose_another_library_crash

如果我将 MyApplicationTheme 从 BasedLib 移动到主应用程序,那么一切编译正常。

是否不支持在另一个库中具有可组合函数,或者我需要在库中做一些事情以使可组合函数可以被另一个库使用?

【问题讨论】:

    标签: android kotlin android-jetpack-compose


    【解决方案1】:

    将此行添加到based-lib 模块中的build.gradle 文件中:

    buildFeatures {
        compose true
    }
    composeOptions {
        kotlinCompilerExtensionVersion compose_version
        kotlinCompilerVersion '1.5.10'
    }
    

    【讨论】:

    • 谢谢!! kotlinOptions 也需要useIR = true 吗?这不相关?
    • 你不需要将它包含到你的库模块中,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2014-08-28
    相关资源
    最近更新 更多