文章目录
- Anko:JetBrains 出品的 Kotlin Android 开发库,1.5 万 Star 后已归档
- Anko 到底解决了什么问题
- 四个模块分工明确
- 为什么会被废弃
- 现在还能用吗
- 它留下的东西
Anko:JetBrains 出品的 Kotlin Android 开发库,1.5 万 Star 后已归档
JetBrains 推出过一个叫 Anko 的 Kotlin 库,专门给 Android 开发用的,GitHub 上拿了 1.5 万多个 Star。这库的目标很明确:把 Android 开发里那些繁琐的 Java 写法,用 Kotlin 的方式简化掉。
不过得先说清楚,Anko 已经被 JetBrains 官方标记为废弃项目了。但这并不妨碍我们看看它当年做了什么,以及它对后来 Android 开发工具的影响。
Anko 到底解决了什么问题
早年用 Java 写 Android,到处都是样板代码。写个布局要 XML,处理数据库要用 Cursor 手动解析,连显示个 Toast 都要好几行。Anko 就是来干这活的,它把 Android SDK 里那些重复劳动全部用 Kotlin 语法糖包了一层。
整个库分成四个模块,各管一摊事。
四个模块分工明确
Anko Commons是个工具箱,Intent 跳转、Dialog 弹窗、日志输出、资源获取这些日常操作全包了。以前写个跳转要 new Intent 再 setClass 再 startActivity,现在一行搞定。
Anko Layouts是最核心的部分。它用 DSL 的方式让你直接用 Kotlin 代码写布局,彻底告别 XML。写出来的代码长这样:
verticalLayout{valname=editText()button("Say Hello"){onClick{toast("Hello,${name.text}!")}}}这段代码创建了一个 LinearLayout,里面放了一个输入框和一个按钮,按钮点击后弹 Toast。整个过程没有一行 XML,全是 Kotlin 代码。而且 onClick 接受 suspend lambda,可以直接在里面写异步逻辑。
Anko SQLite解决的是数据库操作的痛点。Android 原生的 SQLite 查询要手动管理 Cursor,写起来又臭又长。Anko 提供了一套 DSL,查询、解析结果都简化了。比如按条件查用户列表,几行代码就完事。
Anko Coroutines基于 kotlinx.coroutines 库,提供了 bg() 函数把代码丢到线程池执行,还有 asReference() 防止协程里的对象泄漏。
为什么会被废弃
Anko 的 Layouts DSL 思路是对的,但实现方式有局限。它在运行时生成 View 对象,性能和功能都比不上后来 Google 推出的 Jetpack Compose。Compose 用声明式 UI 的方式重新定义了 Android 布局开发,直接把 Anko Layouts 的路给堵死了。
JetBrains 自己也参与了 Compose 的推动,所以废弃 Anko 是顺理成章的事。Commons 模块里的很多工具函数,在 Kotlin Android Extensions 和 AndroidX 里也都有了替代方案。
现在还能用吗
技术上能用,但不建议在新项目里引入。项目已经 archived,不会再有更新和 bug 修复。如果你在维护老项目碰到了 Anko 代码,建议逐步迁移到 Jetpack Compose 或者 AndroidX 的标准 API。
对于新项目,Jetpack Compose 是官方推荐的 UI 框架,Kotlin 协程也已经是 Android 异步编程的标准方案。Anko 想解决的问题,现在都有了更好的答案。
它留下的东西
Anko 虽然退场了,但它验证了一件事:Kotlin 写 Android 确实比 Java 爽。DSL 写布局、协程处理异步、扩展函数简化 API,这些理念后来都成了 Android 开发的主流做法。
从这个角度看,Anko 更像是一块试验田。它把 Kotlin 的优势在 Android 场景里跑通了,证明了可行性,然后由 Google 和 JetBrains 用更成熟的方式实现了出来。对于理解 Android 开发工具的演进,Anko 是一个有意思的历史节点。
ns 用更成熟的方式实现了出来。对于理解 Android 开发工具的演进,Anko 是一个有意思的历史节点。