Anko:JetBrains 出品的 Kotlin Android 开发库,1.5 万 Star 后已归档

Anko:JetBrains 出品的 Kotlin Android 开发库,1.5 万 Star 后已归档

文章目录

  • 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 是一个有意思的历史节点。