将Jetpack Compose添加到使用21以下API的项目中

7

我知道在项目中启用Jetpack Compose至少需要API级别21。

我想在我的现有项目中使用JetPack Compose。它使用minSdkVersion=17,我无法将compose依赖项添加到build.gradle中。

uses-sdk:minSdkVersion 17 cannot be smaller than version 21 declared in library [androidx.activity:activity-compose:1.3.0-alpha03]

我的目标是为Android API>=21的用户使用Compose。

我如何实现这个目标?

2个回答

6

我尝试创建一个新的 Android 库模块(:widget)。设置minSdkVersion=21并在其中配置 Compose。

:widget添加到:app模块的依赖项中。

dependencies {
    implementation project(":widget")
    ...
}

:app的AndroidManifest.xml中覆盖所有Compose包的minSdkVersion

<uses-sdk
    android:minSdkVersion="17"
    tools:overrideLibrary="com.example.widget, androidx.compose.ui.platform, androidx.compose.material.icons, androidx.activity.compose, androidx.compose.ui.tooling, androidx.compose.ui.tooling.data, androidx.compose.material.ripple, androidx.compose.foundation, androidx.compose.animation, androidx.compose.foundation.layout, androidx.compose.ui.text, androidx.compose.ui.graphics, androidx.compose.ui.unit, androidx.compose.ui.util, androidx.compose.ui.geometry, androidx.compose.runtime.saveable, androidx.compose.animation.core" />

最后,定义自定义视图并返回已配置的ComposeView作为普通视图。

在 Android API >= 21 上可以正常工作。

fun myCustomView(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
): View {
    return ComposeView(context, attrs, defStyleAttr).apply {
        setContent {
            Text(text = "Hello")
        }
    }
}

2
它很可能会在API 17-19上崩溃。 - EpicPandaForce
@EpicPandaForce 是的,我知道。我只是试图保持minSdk在17上添加Compose依赖项。我手动限制了API >= 21的打开Compose屏幕。 - beigirad

0

不行。

这是官方的说法,Android Studio甚至不允许您使用这样的配置创建项目,这证明了这一点。

手动尝试可能会编译,但我认为如果在API级别<21的设备上运行,应用程序肯定会崩溃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接