更新日志
这里记录了
BetterAndroid的版本更新历史。
特别注意
我们只会对最新的依赖进行维护,若你正在使用过时的依赖则代表你自愿放弃一切维护的可能性。
Android
1.1.4 | 2026.07.02 最新
- 修复部分模块 Lint 自动修复功能的 BUG
ui-extension
- 添加
AxisPadding支持,现在其可以支持横向、纵向内边距场景 - 添加
ViewPadding的horizontal、relativeHorizontal、vertical属性,支持横向、纵向内边距场景
1.1.3 | 2026.06.06 过旧
- 更新 KavaRef 依赖支持以实现完整适配 Min SDK 21
- 优化部分模块的
@JvmOverloads注解使用 - 将部分模块的函数进行内联优化,减少调用开销和可能的冗余包装
- 限定 Lint 功能作用范围为 Kotlin,Java 代码将被排除
1.1.2 | 2026.06.03 过旧
- 修复部分模块 Lint 自动修复功能的 BUG
system-extension
- 修复
AndroidVersion中可能对华为设备产生Class抛出异常的严重问题
1.1.1 | 2026.05.30 过旧
- 修复部分模块 Lint 自动修复功能的 BUG
ui-component
- 移除
AndroidManifest.xml中的额外meta-data以防止配置污染
system-extension
- 优化
AndroidVersion,移除无用的lazy并对条件进行inline处理
1.1.0 | 2026.05.27 过旧
- 更新 Target SDK 至 37 (Android 17)
- 移除所有模块中弃用已经超过半年左右的 API
- 完善所有模块的 Lint 功能
ui-component
- ⚠️ 破坏性更新,移除
BackPressedController、IBackPressedController相关系统事件能力,请迁移到 ui-extension → BackPressed 扩展 或参考 配置 → 迁移指南 → 迁移 BackPressedController - 补全
NotificationBuilder中更多与NotificationCompat.Builder对齐的功能 - 优化
SystemBarsCompat中旧版系统状态栏深色模式适配相关的反射查找缓存策略,减少重复解析开销 - 优化
SystemBarsController中系统栏样式设置逻辑,避免重复应用相同样式带来的额外开销 - 优化
NotificationPoster中通知通道与分组的创建策略,减少重复系统调用开销 - 优化
NotificationPoster中通知超时任务的主线程Handler复用策略,减少重复对象创建开销 AppBindingActivity、AppBindingFragment新增可重写的onInflateBinding方法- 调整
AppBindingFragment的binding生命周期管理,现仅在onCreateView到onDestroyView之间可用,并会在onDestroyView时自动释放 BaseFragment中新增systemBarsOrNull,可在宿主未实现ISystemBarsController时安全判断当前系统栏控制器是否可用- 调整
NotificationPoster.cancel为幂等行为,并为通知通道和通知分组缓存增加线程安全与按包名隔离的键策略 - 修复
NotificationChannelWrapper中isLightsEnabled错误映射到setShowBadge的问题
ui-component-adapter
- 优化
RecyclerAdapterBuilder、BaseAdapterBuilder、PagerAdapterBuilder中数据源快照与条目绑定逻辑,减少一次绑定链路中的重复数据读取与状态漂移风险 - 优化
PagerAdapterBuilder中页面ViewHolder的缓存回收策略,销毁页面后会同步释放缓存并在缓存视图状态异常时自动重建 RecyclerView.bindAdapter新增通过applyCosmetic管理RecyclerCosmetic的行为,重复绑定时将默认替换上一次注入的装饰器,避免间距叠加RecyclerAdapterBuilder在配置onBindItemId后现会自动启用 Stable IDsCommonAdapter中AutoCompleteTextView绑定适配器现已直接调用公开setAdapter,移除反射兜底依赖FragmentPagerAdapter、FragmentStateAdapter新增直接接收FragmentActivity、Fragment的强类型构造入口- 修复
RecyclerAdapterWrapper中区间通知方法错误换算itemCount的问题 - 修复
BaseRecyclerItemDecoration在NO_POSITION与空列表阶段仍继续计算offset的问题 RecyclerAdapterBuilder中新增onBindDiffer,支持通过RecyclerAsyncDiffer将差分提交流程直接接入适配器构建- 新增可独立使用的
RecyclerAsyncDiffer,支持手动创建差分提交实例并复用RecyclerView.Adapter现有更新链路 RecyclerAdapterWrapper中新增differ与submitList,可在配置了onBindDiffer后直接提交新列表- 调整
CommonAdapter中BaseAdapter、PagerAdapter、RecyclerAdapter相关构造与绑定入口的返回类型及注释,对齐各 Builder 实际返回的Instance RecyclerAdapter扩展中新增notifyByDiff方法,可通过DiffUtil根据前后数据集差异自动通知更新RecyclerAdapter扩展中新增DiffUtilCallback与ListUpdateCallback方法,支持手动构建DiffUtil.Callback与ListUpdateCallback
ui-extension
- 新增
BackPressed扩展,提供Fragment、View的onBackPressedDispatcher、OnBackPressedCallback以及trigger用法 - ⚠️ 破坏性更新,移除
SystemColors相关系统颜色功能,请参考 配置 → 迁移指南 → 迁移 SystemColors - 移除
ui-extension中对material的依赖 - 调整
TextView扩展中的部分扩展功能,对齐官方TextView的行为并修复一些潜在的错误使用问题 View扩展中的walkToRoot、walkThroughChildren现已对齐官方ancestors、descendants的遍历语义- ⚠️ 破坏性更新,
walkToRoot、walkThroughChildren的返回值已由List调整为Sequence,如需立即求值结果请补充toList() - 新增
Lifecycle扩展,支持使用 lambda 快速创建DefaultLifecycleObserver、LifecycleEventObserver,并直接通过Lifecycle.addObserver完成注册 LifecycleOwner扩展中新增Context.lifecycleOwner、Context.requireLifecycleOwner方法- 新增
Context扩展,提供Context.hostActivity、Context.requireHostActivity及对应泛型用法 - 调整
View.lifecycleOwner的查找逻辑,现会优先对接findViewTreeLifecycleOwner,并在无法获取时回退到Context - 调整
View.tooltipTextCompat在低版本系统中的兼容逻辑,现会真实调用TooltipCompat模拟完整行为,同时继续保留工具提示文本的 tag 存储能力 View扩展中新增View.padding、ViewPadding、AbsolutePadding、RelativePadding、PaddingValuesView扩展中的ViewLayoutParams新增KClass重载,可直接使用LinearLayout.LayoutParams::class这类写法创建目标LayoutParams- 为
Insets与InsetsWrapper新增toPaddingValues,可直接转换为AbsolutePadding - 调整
setInsetsPadding、updateInsetsPadding的内部计算模型,新增syncInsetsPadding,现会基于用户原始padding基线与当前 Insetspadding叠加计算结果 - 优化
Resources扩展中主题属性解析的对象复用方式,调整为基于ThreadLocal的TypedValue实现 - 优化
Resources扩展中的areThemeAttrsIdsValueEquals比较逻辑,减少重复的主题属性解析与类型探测行为 - 移除
ColorStateList的全局缓存实现,避免不同Theme与Configuration下的潜在结果复用问题 - 新增
WindowInsetsLayout,可通过 XML 配置自动监听 Window Insets 变化并将目标 Insets 应用到布局padding - 优化
ViewBinding构建过程中的反射方法查找逻辑,新增bind与inflate方法缓存以减少重复解析开销 - 优化
WindowInsetsWrapperCompat中旧版异形屏适配相关的反射查找缓存策略,减少重复解析开销 - 调整
Fragment.viewBinding委托的生命周期管理,缓存的 binding 现会跟随 Fragment View 生命周期自动清空 - 调整
toast(..., allowBackground = true),现会投递回主线程执行,不再创建后台Looper - 调整
View.showIme的兼容行为,改为通过焦点与InputMethodManager.showSoftInput发起隐式显示请求 - 修复
View.performTouch未回收生成的MotionEvent实例的问题 - Fragment
attach与replace新增generateViewId参数,并默认保持自动生成容器 ID 的行为 - 为
Bitmap.shrink与Bitmap.reduce增加边界保护,避免产生非法目标尺寸
system-extension
AndroidVersion新增 Android 17 的版本常量- 补全
RomType中更多 ROM 类型常量与识别逻辑,现已支持RealmeUI、MagicOS、OxygenOS、H2OS、ZUXOS、NebulaAIOS、MyOS、MifavorUI、SmartisanOS、EUI、360OS、HarmonyOS NEXT等系统判断 - 优化
RomType.current的 ROM 类型匹配结果缓存策略,减少重复判断开销 - 修复
SystemProperties中Boolean方法绑定错误的问题 - 修复
startServiceOrElse、startForegroundServiceOrElse成功判定的假阳性问题 Intent扩展中新增针对指定组件快速创建Intent的泛型方法- 重构
Clipboard扩展,独立ClipDataBuilder并支持链式调用与build方法 Clipboard扩展中新增Uri.resolveMimeTypes方法,可通过ContentResolver解析Uri的 MIME 类型Clipboard扩展中的addUri与copy方法新增支持传入多个 MIME 类型ClipboardManager新增primaryClipItems、primaryClipItemsOrNull、firstPrimaryClipItem、firstPrimaryClipItemOrNull方法- 优化
Clipboard扩展中的剪贴板条目读取逻辑,减少不必要的列表创建开销 - 优化
ApplicationInfo中 CPU ABI 相关反射字段的查找缓存策略,减少重复解析开销 - 移除了旧包名
tool下的所有内容
历史版本
ui-component
1.0.10 | 2025.12.16 过旧
- 适配 Kotlin 2.2+
1.0.9 | 2025.12.14 过旧
- 破坏性更改:迁移 Insets 相关功能至 ui-extension
1.0.8 | 2025.08.03 过旧
- 移除适配器相关功能,统一合并至 ui-component-adapter
- 将 Java 反射相关行为由 YukiReflection 迁移至 KavaRef
1.0.7 | 2025.03.08 过旧
- 移除 Material 依赖并解构为对应依赖
- 大量重构适配器 (Adapter) 底层相关的 API
- 移除适配器不合理的
View实例装载条目方法 - 适配器加入
ViewHolderDelegate以支持自定义布局装载器 AdapterPosition现已支持layout和absolute下标- 其它适配器相关的已知问题修复
1.0.6 | 2025.01.25 过旧
AppBindingActivity中新增onPrepareContentView方法,可自定义装载布局前的操作- 修复适配器构造器中可能出现数据集为空下标越界的问题
RecyclerAdapterBuilder中新增AdapterPosition实现动态下标功能- 修复适配器构造器中使用布局 ID 装载时父布局提前装载造成的严重错误
- 新增自定义的
RecyclerView布局管理器并修改默认的布局管理器以实现在添加了自定义的头部和末位布局时正确处理下标 - 新增
RecyclerView.Adapter的wrapper扩展方法,通过包装实例实现在添加了自定义的头部和末位布局时正确处理下标 - 修复
RecyclerAdapterBuilder中末位布局当做头部布局添加的严重错误
1.0.5 | 2024.03.08 过旧
- 移除了所有扩展方法
kt文件的Factory后缀 - 移除了上一个版本中已作废的文件
- 修复
CommonAdapterBuilder中的onItemViewsClick、onItemViewsLongClick返回的下标和条目位置错误问题 - 调整适配器中添加的条目记录对象为
LinkedHashSet以防止重复添加 - 开放
RecyclerAdapterBuilder中的DEFAULT_VIEW_TYPE - 适配器中新增
onBindItemId方法,可自定义getItemId的行为 - 适配器中现在允许无回调直接使用
onBindViews绑定条目布局 RecyclerAdapterBuilder中新增onBindHeaderView、onBindFooterView方法- 在
OnBackPressedCallback中调用trigger方法后若未移除则将重新启用此回调事件
1.0.4 | 2024.01.02 过旧
SystemBarsController已完全迁移到 Window Insets API,请参考文档开始使用新用法- 重构了
SystemBarsController并修改了初始化方法,请参考文档使用新的方式开始使用 - Window Insets 已从系统栏中完全分离为
WindowInsetsWrapper、InsetsWrapper、InsetsFactory - 作废了全部有关系统栏中的 Window Insets 相关用法,现在请开始使用全新的 Window Insets API
- 重构了
BackPressedController并对接到BackPressedDispatcher,请参考文档开始使用新用法 AppViewsFragment新增使用构造方法传入layoutResId的装载布局方式- 更名
RecyclerCosmeticMacker为RecyclerCosmetic并对相关功能进行了泛型处理 - 开放了
RecyclerView的预置装饰器,现在你可以手动创建它们 - 重构了大量有关适配器的功能,现在你可以使用每个适配器的同名方法手动进行创建 (
BaseAdapter为CommonAdapter) - 重构了通知相关功能,请参考文档开始使用新用法
- 进行了一些其它功能的更名和修改
1.0.3 | 2023.12.03 过旧
SystemBarsController的init方法新增defaultPaddings参数,可以配置初始化时是否自动添加对应的系统栏边距- 在
SystemBarsController中使用show或hide方法时将自动判断是否已经添加系统栏边距来决定是否添加对应的边距 - 新增
AppComponentActivity,继承于ComponentActivity,可适用于 Jetpack Compose,无需设置 AppCompat 主题 - 使用
AppBindingActivity、AppViewsActivity、AppComponentActivity时会自动将添加的布局背景颜色填充到父布局
1.0.2 | 2023.11.24 过旧
- 重构
SystemBarsController中的 System Insets 功能修复在 Compose View 上无法计算布局最大尺寸问题 SystemBarsController中新增SystemInsets.Paddings和setBaseBackgroundResource、isVisible功能- 作废了
SystemBarsView,请开始使用新的方式自定义 System Insets 功能 - 新增
View.applySystemInsets、View.appendSystemInsets、View.removeSystemInsets方法
1.0.1 | 2023.11.18 过旧
- 修复
SystemBarsController中存在的装载异常捕获问题
1.0.0 | 2023.11.02 过旧
- 首个版本提交至 Maven
ui-component-adapter
1.0.1 | 2025.12.16 过旧
- 适配 Kotlin 2.2+
- 移除了部分内联方法不必要的
reified关键字
1.0.0 | 2025.08.03 过旧
- 首个版本提交至 Maven
ui-extension
1.0.9 | 2025.12.16 过旧
- 适配 Kotlin 2.2+
View扩展中的ViewLayoutParams调整width和height参数的默认值为null,不再采用-2作为不设置宽高的默认值
1.0.8 | 2025.12.14 过旧
- 新增 ui-component Insets 相关功能
- Insets 扩展
handleOnWindowInsetsChanged方法新增requestApplyOnLayout参数 - 新增 Lint 功能 (实验性)
1.0.7 | 2025.08.03 过旧
- 移除
Adapter相关扩展,统一合并至 ui-component-adapter - 将 Java 反射相关行为由 YukiReflection 迁移至 KavaRef
Resources扩展中调整isUiInNightMode底层逻辑对接到isNightModeActive方法- 作废
Resources扩展中的方法,现在推荐迁移到 Jetpack 的obtainStyledAttributeswithStyledAttributes View扩展新增updateMarginsRelative方法- 作废
Bitmap扩展中的方法,现在推荐迁移到 Jetpack 的zoomscale方法 Bitmap扩展中对round新增backgroundColor参数- 作废
Bitmap扩展中的请使用compressshrink方法代替
1.0.6 | 2025.03.04 过旧
- 调整
LayoutInflater扩展中的inflate方法和attachToParent参数的默认行为 - 修正
View扩展中的方法为updateMarginupdateMargins并添加setMargins方法 - 完全移除旧版
ViewLayoutParams类,现在请使用ViewLayoutParams方法代替 - 修复
ViewLayoutParams相关逻辑,现在它可以创建任意基于ViewGroup.LayoutParams的对象 - 重载
ViewLayoutParams方法以支持直接传入lpClass参数
1.0.5 | 2025.01.25 过旧
- 修复
TextView扩展中的updateText方法可能在重写了setText方法后设置的文本光标下标越界的问题 - 修改
TextView扩展中setDigits方法的inputType参数默认从TextView自身读取 - 修改
TextView扩展中updateTypeface方法的tf参数默认为null,防止设置非预期的字体样式 TextView扩展中新增textToString、hintToString方法- 修复
Toast扩展中非主线程可能导致无法弹出Toast的问题 Fragment扩展中新增parentFragment泛型方法Activity扩展中startActivity方法新增options参数- 新增
LifecycleOwner扩展 - 新增
Coroutines协程功能相关扩展 View扩展中新增setIntervalOnClickListener方法View扩展中新增child、childOrNull、firstChild、firstChildOrNull、lastChild、lastChildOrNull非泛型实现方法- 修正
Resources中的方法命名为isThemeAttrsIdsValueEqualsareThemeAttrsIdsValueEquals Resources扩展中新增大量针对TypedArray的扩展方法- ⚠️ 破坏性更新,大量重构
Fragment扩展中的方法,并独立出FragmentTransaction方法,迁移可能需要成本 Bitmap扩展中新增FileDescriptor.decodeToBitmap和FileDescriptor.decodeToBitmapOrNull方法- 新增
RecyclerView扩展 View扩展中新增tag、setTag、animate方法View扩展中新增tooltipTextCompat方法ViewBindingBuilder中的toString方法现在将返回ViewBinding所持有的完整对象名称- 新增
Adapter扩展
1.0.4 | 2024.05.05 过旧
- 整合
Fragment扩展中的进入、退出动画方法参数 - 移除默认的
Fragment扩展中的过渡动画,并删除相关资源文件 ViewBinding扩展中新增Fragment.viewBinding方法- 修复
ViewBinding扩展中viewBinding装载的布局不会自动缓存的问题 - 修复
ViewBinding扩展中inflate方法遇到<merge>和<include>类型布局不能正确装载的问题 - 调整
ViewBinding扩展中inflate方法遇到<merge>和<include>类型布局将忽略attachToParent参数 - 移除旧版
ViewBinding扩展中已弃用的全部方法
1.0.3 | 2024.03.08 过旧
- 移除了所有扩展方法
kt文件的Factory后缀 - 移除了上一个版本中已作废的文件
ViewFactory的ViewLayoutParams方法新增支持AbsListView.LayoutParams类型ViewFactory中新增updateCompoundDrawables、updateCompoundDrawablesWithIntrinsicBounds方法ViewFactory中新增parent、parentOrNull方法ViewFactory中新增walkToRoot、walkThroughChildren、indexOfInParent方法ViewFactory中新增child、childOrNull、firstChild、lastChild、firstChildOrNull、lastChildOrNull方法- 合并
ViewFactory中的inflate方法到LayoutInflaterFactory中并作废原方法 FragmentFactory中的添加方法新增addToBackStack参数FragmentFactory中作废了commitTransaction方法,现已迁移到官方提供的fragment-ktx依赖ResourcesFactory中新增themeResId方法- 新增全新的
ViewBinding解决方案并弃用旧版方案
1.0.2 | 2024.01.02 过旧
- 移动了部分不规范分类的包名,如遇到报错,请重新对这些调用的方法进行
import操作 - 修改了针对 Java 调用的相关名称
ViewFactory中新增可设置横向纵向的updatePadding方法ViewFactory中的inflate方法将自动使用Activity.getLayoutInflater- 更名
ColorsFactory为ColorFactory - 更名
ColorFactory中的toMixColor为mixColorOf ColorFactory中的部分方法现在将不会再抛出异常- 新增
GradientDrawableCompat,你可以使用其创建 Android 10 以下版本的GradientDrawable DrawableFactory中新增可设置横向纵向的updatePadding方法- 作废了
DimensionFactory中的asDp、asPx及其用法因为它设计错误,现已对接到新用法toDp、toPx - 新增
DisplayDensity,你可以方便地使用dp、px来转换单位 - 作废了
ResourcesFactory中的getDimensionPx,请手动使用toPx进行计算 - 作废了
ResourcesFactory及ActivityFactory中的isSpecialWindowingMode,请不要再使用 ResourcesFactory中新增getFontCompat方法- 修复了
FragmentFactory中的commt相关功能用法错误 - 大量修改了
FragmentFactory中的相关用法,现在请参考文档开始使用新用法 BitmapFactory中新增compressBitmap方法ToastFactory中新增Window.toast方法ToastFactory中的toast方法新增allowBackgroud参数,你现在可以允许在非主线程中弹出ToastWindowFactory中的部分方法现在将不会再抛出异常WindowFactory中新增可使用Float类型设置屏幕亮度的方法ViewFactory中使用WindowInsetsController来显示或隐藏输入法并更名方法为showIme、hideIme- 作废了
ViewLayoutParam类,现在请使用ViewLayoutParams方法代替 ViewFactory中的performKeyPressed新增duration参数ViewFactory中新增可设置横向纵向的updateMargin方法- 对
ActivityFactory中的方法进行了inline处理 ActivityFactory中新增每个startActivityOrElse方法BimapFactory中的round方法新增支持设置每个方向的圆角半径大小
1.0.1 | 2023.11.18 过旧
- 修复 ResourcesFactory 中
getColor与getColorStateList方法返回值错误问题
1.0.0 | 2023.11.02 过旧
- 首个版本提交至 Maven
system-extension
1.0.4 | 2025.12.16 过旧
- 适配 Kotlin 2.2+
- 修复
Clipboard扩展中在创建ClipData时非空判断错误的问题 - 调整并新增
Clipboard扩展中的copy直接创建 DSL 功能 - 修正
ClipDataItemBuilder中的方法命名为addTextaddPlainText - 移动包名
tool到utils - 新增 Lint 功能 (实验性)
1.0.3 | 2025.08.03 过旧
- 将 Java 反射相关行为由 YukiReflection 迁移至 KavaRef
重命名为SystemVersionAndroidVersion并新增 Android 15、16 以及 1-4.3 的版本常量,同时进行功能性调整重命名为SystemKindRomType并进行功能性调整Broadcast扩展中新增sendBroadcast方法的options参数
1.0.2 | 2025.01.25 过旧
Broadcast扩展中新增BroadcastReceiver方法并修改registerReceiver方法的返回值为其自身
1.0.1 | 2024.01.02 过旧
- 更名
SystemVersion中的部分命名不正确方法 SystemVersion中新增name属性- 缓存
SystemKind的检测结果防止重复创建反射对象 - 作废了
SystemKind中的get,现在请使用current属性获取当前系统类型 - 更名
ApplicationFactoy中的部分命名不正确方法和类 - 移除了
AplicationInfoFlagsWrapper中的FLAG前缀 - 修改了
BroadcastFactory中的相关用法,现在请参考文档使用新用法创建运行时广播 - 修改了
ClipboardFactory中的相关用法,现在请参考文档使用新用法使用剪贴板功能 - 对
ServiceFactory中的方法进行了inline处理 ServiceFactory中新增startServiceOrElse、startForegroundServiceOrElse方法
1.0.0 | 2023.11.02 过旧
- 首个版本提交至 Maven
Jetpack Compose
compose-extension
1.0.3 | 2026.05.27 最新
- 作废
ComponentPadding中的,请迁移到NoneZero - 作废
Foundation中的,请迁移到HapticFeedbackhapticFeedback
1.0.2 | 2024.01.16 过旧
- 新增
HapticFeedback方法,你可以将其设置到任意的点击、触摸事件上 ComponentPadding新增None方法,你可以使用其直接得到ComponentPadding(0.dp)- 修改了
Dialog中的onDismissRequest为强制要求存在,匹配官方提供的foundation中的用法 - 部分代码风格优化
1.0.1 | 2024.01.08 过旧
- 移除部分无用的
@Stable注解 - 新增
borderOrElse的同名方法和新用法 - 新增
AdaptiveRow、AdaptiveColumn
1.0.0 | 2024.01.02 过旧
- 首个版本提交至 Maven
compose-multiplatform
0.1.1 | 2026.05.27 最新
- Android 平台中的
BackHandler现已直接对接官方androidx.activity:activity-compose提供的实现
0.1.0 | 2024.01.02 过旧
- 首个版本提交至 Maven
