不专业,但主观!几种安卓开发框架的使用感受

从萌生开发安卓APP的想法到现在,一晃过去了好几年。期间,我尝试过各种开发框架,也陆陆续续开发了一些应用。最近,用Flutter开发了BiliMusic,以BiliBili为音频源的音乐播放器。Flutter是我接触的第一个框架,兜兜转转,最终又回到了它的怀抱,有点感慨,所以想写一篇博客,分享一下自己的这几年上手过的开发框架的使用感受。

Flutter

我自己也不知道为什么,对Java非常抗拒,所以没有选择原生开发,而是机缘巧合下了解到的Flutter

Flutter最大的一个痛点在于 Widget 嵌套的复杂性。它要求开发者通过层层嵌套Widget来构建界面。对于复杂的布局,代码嵌套可能会变得非常深,可读性和维护性都大打折扣。不过,通过抽取组件复用、结合状态管理库,这个问题可以得到一定程度的缓解。

Flutter的异步处理是它的亮点之一,但对于新手来说,却是个不小的挑战。在没有AI辅助的日子里,我花了半天时间才搞明白FutureBuilderStreamBuilder的用法和适用场景。这成功地把我劝退了。

大约一年前,我发现了PiliPala这个应用,得知它是用Flutter开发的后,我对这个框架重新燃起了兴趣。

有了AI的帮助,我很快完成了BiliMusic的 Demo。这次的开发体验好了很多,快速搭建一个 Demo 不再是难事。GetX状态管理库用起来特别顺手,极大提升了开发效率。开发过程比较依赖第三方库,不过Pub包管理生态里的库数量丰富。当然,偶尔也会遇到库版本不兼容的问题。

UniApp

uni-app是我最早接触的跨平台开发框架,但一直没能真正上手。主要原因是,我想开发的应用大多依赖爬虫功能,而前端跨域问题始终是个绕不过去的坎。此外,要实现一些原生功能也显得颇为棘手。不过,凭借HTMLCSS的强大表现力,uni-app确实能打造出 UI 相当精美的应用。

Xamarin / MAUI

Xamarin / MAUI是我用得最多的框架了。

在大二的暑假,学校安排了见习,但是实验室的老师并不是很上心,对我们是放养状态。于是,我趁机自学了Xamarin。恰好那时,我萌生了一个想法:开发一款集课表查询、考试查询和图书馆预约功能于一体的校园助手。因为学校官网的体验实在太差,前辈开发的微信公众号也槽点颇多。跟着东北大学张引老师的课程,我学习了MVVM模式,写出了相对优雅的代码,后续维护也轻松了不少。

没多久,MAUI就发布了。正巧,学校的图书馆预约系统也迎来了改版。于是,我顺势将图书馆预约功能独立出来,用MAUI重写了一版。

MAUI的开发效率很高,对新人颇为友好。东北大学张引老师的课程作为入门指引,新手也不容易写出糟糕的代码。MAUIMVVM,初次接触时让人觉得很高级,代码优雅且结构清晰。后面接触了VueFlutterGetX,我开始觉得MAUIMVVM有点繁琐。MAUI的可自定义程度较低,想要高度定制化,就不得不深入原生开发。Nuget包管理工具使用体验很不错,相较于Flutter使用pubspec.yaml依赖管理方式,更合我心意。

Jetpack Compose

Flutter一样,采用了声明式UI。不过我当时没有精力去学Kotlin,用起来不是很顺手。费了九牛二虎之力,才通过Hilt实现了MVVM模式。那时候,Material 3似乎还在测试阶段,写代码时需要在前面加上类似@ExperimentalMaterial3Api的注解——具体记不清了,总之是用来标记这些功能尚属实验性质。最终,代码写得不够优雅,我便放弃了继续探索。