问题描述
我知道最低 API 级别 21 是在项目中启用 Jetpack Compose 的必要条件。
我想在我现有的项目中使用 JetPack Compose。它使用 minSdkVersion=17
,我无法向 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。
我如何实现这个目标?
解决方法
我尝试创建一个新的 android-library 模块 (:widget
)。设置 minSdkVersion=21
并在其中配置 Compose。
将 :widget
添加到 :app
模块依赖项
dependencies {
implementation project(":widget")
...
}
覆盖 minSdkVersion
的 AndroidManifest.xml 中所有 Compose 包的 :app
<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")
}
}
}
,
没办法。
这是官方的,Android Studio 甚至不允许您创建具有这种配置的项目来证明这一点。
尝试手动执行可能会编译,但我认为如果在 API 级别