
如何兼容低版本 AndroidWheelPickerCompose 滚轮日期时间选择器 API 21 Desugaring 完整教程【免费下载链接】WheelPickerComposeAdd Wheel Date - Time Picker in Android Jetpack Compose.项目地址: https://gitcode.com/gh_mirrors/wh/WheelPickerComposeWheelPickerCompose 是一款为 Android Jetpack Compose 打造的滚轮式日期时间选择器Wheel Date - Time Picker组件库提供日期、时间、日期时间三种滚轮选择控件。由于它基于java.timeAPI 实现默认只能在 API 26 设备上运行。本文是一份面向新手的低版本兼容完整教程教你用 Desugaring核心库去糖技术让 WheelPickerCompose 在 API 21Android 5.0及以上设备上稳定运行。一、为什么 API 21 下会崩溃先看懂 java.time 依赖问题 WheelPickerCompose 的公开接口直接使用 Java 8 引入的时间类型选择器组件使用的 java.time 类型源码位置WheelDatePicker日期选择器LocalDatewheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/WheelDatePicker.ktWheelTimePicker时间选择器LocalTimewheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/WheelTimePicker.ktWheelDateTimePicker日期时间选择器LocalDateTimewheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/WheelDateTimePicker.kt问题在于java.time虽然是 Java 8 的 API但 Android 系统直到 API 26Android 8.0才内置实现。而 WheelPickerCompose 的minSdk是 21也就是说在 Android 8.0 设备一切正常 ✅在 Android 5.0 ~ 7.x 设备抛出NoClassDefFoundError: Failed resolution of: Ljava/time/LocalDate;之类的崩溃 ❌如果你想在覆盖低版本用户的 App 中使用这个滚轮日期时间选择器就必须引入Desugaring去糖化。二、Desugaring 是什么低版本兼容的核心原理 Core Library Desugaring核心库去糖是 Android Gradle Plugin 提供的编译能力编译期D8/R8 编译器自动将java.time等 Java 8 API 调用转换为 DEX 可执行代码运行期由desugar_jdk_libs运行时库在低版本设备上提供这些 API 的实现结果同一份代码在 API 21 和 API 33 上的行为完全一致无需任何if (Build.VERSION.SDK_INT ...)分支。简单说Desugaring 就像给低版本系统补课把新 API 的实现打包带进你的 APK。三、最快配置方法3 步开启 coreLibraryDesugaring ⚡以下配置与示例工程app/build.gradle中的写法完全一致。步骤 1在 compileOptions 中启用 Desugaringandroid { compileOptions { coreLibraryDesugaringEnabled true // 开启核心库去糖 sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }注意必须同时保证 Java 8 兼容性VERSION_1_8这是 Desugaring 生效的前提。步骤 2添加 desugar_jdk_libs 依赖dependencies { coreLibraryDesugaring com.android.tools:desugar_jdk_libs:1.1.6 }步骤 3同步项目并运行点击 Android Studio 的Sync Now然后在 API 21 的模拟器或真机上运行即可。此时WheelDatePicker { ... }、WheelTimePicker { ... }、WheelDateTimePicker { ... }三种滚轮选择器都能正常工作配置可在示例入口app/src/main/java/com/commandiron/wheelpickercompose/MainActivity.kt中直接预览效果。四、常见问题排查清单 Q1配置后仍然报 NoClassDefFoundError检查是否两步都做了coreLibraryDesugaringEnabled true和coreLibraryDesugaring依赖缺一不可。改完后执行一次 Clean Project 再 Sync。Q2minSdk 可以设多低本方案支持 API 21 起。WheelPickerCompose 的最低要求就是minSdk 21见app/build.gradle与wheel-picker-compose/build.gradle中的配置。Q3AGP / Kotlin 版本有要求吗需要 AGP 4.0。本仓库使用 AGP 7.3.0、Kotlin 1.7.20、Compose 1.3.1见根目录build.gradle过低的 AGP 可能缺少去糖能力。Q4依赖下载失败WheelPickerCompose 通过 JitPack 仓库分发需在settings.gradle的repositories中加入maven { url https://jitpack.io }再引入implementation com.github.commandiron:WheelPickerCompose:1.1.11。五、核心文件速查源码与配置位置文件作用app/build.gradle示例 App 配置含完整 Desugaring 写法wheel-picker-compose/build.gradle组件库配置minSdk 21 去糖依赖settings.gradle仓库配置需加入 JitPackwheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/WheelDatePicker.kt日期滚轮选择器实现wheel-picker-compose/src/main/java/com/commandiron/wheel_picker_compose/core/SnappedDateTime.kt滚轮吸附状态基于 java.time写在最后只需两行 Gradle 配置就能让 WheelPickerCompose 滚轮日期时间选择器从 API 26 直接下探到 API 21覆盖绝大多数存量 Android 设备。Desugaring 是目前 Android 低版本兼容java.time的官方推荐方案也值得你在其他使用了 Java 8 API 的库中复用这套思路。【免费下载链接】WheelPickerComposeAdd Wheel Date - Time Picker in Android Jetpack Compose.项目地址: https://gitcode.com/gh_mirrors/wh/WheelPickerCompose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考