Android-Extensions全景指南:10个Kotlin模块如何帮你快速搭建生产级Android应用
【免费下载链接】Android-ExtensionsAn Android library with modules to quickly bootstrap an Android application.项目地址: https://gitcode.com/gh_mirrors/an/Android-Extensions
Android-Extensions 是一个开源的 Android 扩展库项目,通过10 个 Kotlin 模块(core、navigation、recyclerview、viewpager2、material 等)帮你快速搭建生产级 Android 应用。无论你是刚入门的 Android 新手,还是想给现有项目"补装备"的开发者,这份指南都能让你在几行 Gradle 依赖内上手。🐾
📦 项目概览:一个仓库,十件趁手工具
与其说它是一套框架,不如说它是一个工具箱:每个模块各司其职,按需引入,互不拖累。
| 模块 | 当前版本 | 一句话说明 |
|---|---|---|
| core | 1.3.2 | Kotlin 委托、Context/Drawable 扩展、流式 SpannableString API |
| navigation | 1.2.1 | 单栈/多栈 Fragment 导航器,支持挂起(suspend)API |
| recyclerview | 1.2.0 | 拖拽、滑动、无限滚动、Diff 工具、多列表同步滚动 |
| viewpager2 | 1.0.0 | 基于 DiffUtil 的 FragmentListAdapter,高效翻页 |
| view | 1.2.0 | 基于 SpringAnimation 的动画工具与 View 委托 |
| material | 1.0.4 | 可展开浮动按钮(FAB)、Snackbar 联动等 Material 组件增强 |
| communications | 1.0.0 | 蓝牙低功耗(BLE)扫描与 NSD 网络服务发现 |
| savedstate | 1.0.1 | 生命周期组件的状态保存(SavedState 委托实现) |
| constraintlayout | 1.0.0-rc01 | ConstraintLayout/MotionLayout 指示器动画工具 |
| test | 1.0.0-rc01 | Espresso 测试辅助(IdlingResource 等) |
💡 此外还有一个functions模块(1.0.0),提供 Java 8 函数式接口的 Android 移植版和若干 Guava 风格工具方法。
版本信息以仓库根目录的 libraryVersion.properties 为准。
🚀 三步上手:从克隆到引入依赖
第一步:获取源码
git clone https://gitcode.com/gh_mirrors/an/Android-Extensions第二步:配置 Maven 仓库
在build.gradle的allprojects.repositories中添加mavenCentral(),各模块制品均已发布到 Maven Central。
第三步:按需引入模块
// 示例:引入核心模块 implementation 'com.tunjid.androidx:core:1.3.2' implementation 'com.tunjid.androidx:recyclerview:1.2.0' implementation 'com.tunjid.androidx:navigation:1.2.1'只需要用到哪个模块就引入哪个——这是生产级项目的关键:依赖越精,包体积与风险越小。🎯
🧩 10 大模块逐个拆解
1️⃣ core:扩展基础,消灭样板代码
core 模块是全库的地基,主打Kotlin 委托:
by bundleDelegate(false)—— 像读写属性一样读写 Bundle 中的值by fragmentArgs<String>()—— Fragment 参数委托,进程被杀后依然存活by viewLifecycle(AFragmentBinding::bind)—— 生命周期感知的 ViewBinding 委托,视图销毁自动清理
还有HardServiceConnection(泛型化绑定服务,告别回调地狱)和流式 SpannableString API。详见 core/README.md。
2️⃣ navigation:多栈导航,告别 FragmentManager 异步地狱
新手用 Fragment 最头疼的就是回退栈管理。navigation 模块的 StackNavigator 强制"每个入栈 Fragment 都带确定性 tag",带来三大好处:
- 相同 Fragment 请求时自动复用栈中实例,不会重复堆叠
- 连续展示同一实例的请求会被直接忽略(防抖)
- 通过
TransactionModifier把共享元素转场逻辑与点击逻辑解耦
而MultiStackNavigator让底部导航栏拥有多个独立回退栈,并支持suspend挂起函数顺序执行导航操作。demo 应用的 MainActivity.kt 仅用十几行代码就搭好了四 Tab 多栈导航,值得逐行研读。
3️⃣ recyclerview:列表能力全家桶
这是日常开发中使用率最高的模块:
| 工具 | 解决的问题 |
|---|---|
Diffable | 免写 DiffUtil.Callback,声明式计算差异 |
ComposedAdapter/listAdapterOf | 把 Adapter 回调拆成可组合的函数 |
BindingViewHolder | 一行扩展方法从 ViewBinding 直接创建 ViewHolder |
EndlessScroller | 三行代码搞定无限滚动加载 |
RecyclerViewMultiScroller | 多个 RecyclerView 同步滚动(表格场景神器) |
SwipeDragTouchHelper | 拖拽排序 + 滑动删除 |
4️⃣ viewpager2:Fragment 翻页也能 Diff
FragmentListAdapter 让 ViewPager2 管理 Fragment 页时也能用 DiffUtil 精准更新:定义一个FragmentTab数据类作为"页签描述",然后一句submitList(newTabs)完成增量刷新,避免整页重建。
5️⃣ view:弹簧动画驱动 UI
围绕 Jetpack DynamicAnimation 的SpringAnimation构建:
- ViewHider:Toolbar/FAB 跟随手势滑出屏幕的"快速返回"模式
- InsetFlags:声明式消费 WindowInsets(刘海屏适配利器)
View.popOver:把任意 View 弹出在锚点视图上方
6️⃣ material:Material 组件的"精装修"
- FabExtensionAnimator:MaterialButton ⇄ FAB 的弹簧变形动画
- FabSpeedDial:给任意锚点视图加装速度拨号(Speed Dial)菜单
- BottomTransientBarBehavior:Snackbar 弹出时自动联动抬升上方内容
7️⃣ communications:BLE 与局域网设备发现
做 IoT 开发?这个模块直接可用:
BleScanner+ScanFilterCompat:低版本系统也能用新版蓝牙扫描 API 的写法NsdHelper:封装 NsdManager,几行代码完成局域网服务注册与发现
demo 应用中 BleScanFragment.kt 就是一个完整的 BLE 扫描界面范例。
8️⃣ savedstate:给任意生命周期组件存状态
LifecycleSavedStateContainer把 Jetpack 的 SavedStateRegistry 委托给任何实现了 LifecycleOwner 的自定义组件——自己封装的"超级控件"从此也能扛住进程重建。
9️⃣ constraintlayout:动态 ViewPager 指示器
ViewPagerIndicatorAnimator 为 ConstraintLayout 内的分页指示点提供流畅的位移/缩放动画。
⚠️ 该模块目前标注为停止维护,新项目中请优先关注 MotionLayout 官方方案。
🔟 test:让 UI 测试不再"手抖"
Espresso 测试经常因为页面还没跳转就报红。FragmentVisibleIdlingResource/FragmentGoneIdlingResource让测试自动等待 Fragment 可见或移除后再断言,告别 sleep()。
🐕 眼见为实:demo 应用(app 模块)
仓库自带一个名为app的演示应用,按 4 个 Tab 组织:导航(Navigation)、列表(RecyclerView)、通信(Communications)、杂项(Misc)。
其中"好狗狗榜单"(Doggo 列表)是 RecyclerView 模块的完整实战:随机生成 9 只狗狗数据,支持列表/详情转场、拖拽、排序等交互,数据模型见 Doggo.kt。下面这张图就是列表中的一位成员——
跑起 demo 应用,每个模块的"开箱效果"一目了然,这是理解各模块能力最快的方式。
🧭 新手选型速查表
| 你的需求 | 引入模块 |
|---|---|
| 想减少 Bundle/Intent/ViewBinding 样板代码 | core |
| 多 Tab 底部导航 + 独立回退栈 | navigation |
| 列表要做拖拽、无限加载、Diff 更新 | recyclerview |
| Fragment 分页且数据频繁变化 | viewpager2 |
| FAB 变形、Snackbar 联动动画 | material + view |
| 蓝牙 / 局域网设备发现 | communications |
| 自定义控件需要保存状态 | savedstate |
| 想写出稳定的 UI 测试 | test |
✅ 写在最后
Android-Extensions 的哲学很朴素:不重造轮子,只把轮子打磨得更顺手。每个模块都对应 Android 开发中真实存在的痛点——从 Bundle 取值到多栈导航,从列表 Diff 到 BLE 扫描——并且全部按需引入、互相独立。
建议路线:先 clone 仓库跑通 demo 应用 → 对照上表挑 1~2 个模块引入自己的项目 → 阅读对应模块的 README(如 recyclerview/README.md)深入细节。祝开发愉快!✨
【免费下载链接】Android-ExtensionsAn Android library with modules to quickly bootstrap an Android application.项目地址: https://gitcode.com/gh_mirrors/an/Android-Extensions
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考