尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何兼容低版本 Android?WheelPickerCompose 滚轮日期时间选择器 API 21 Desugaring 完整教程

如何兼容低版本 Android?WheelPickerCompose 滚轮日期时间选择器 API 21 Desugaring 完整教程 如何兼容低版本 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),仅供参考
返回列表