抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

2021年开发一款APP一般怎么考虑?

体量

对于个人开发者,往往是对某个 APP 进行一个仿造或者扩展,一般情况下整体模块不会太大。当然为了练手,依旧可以选择组件化的方式,目前经过市场检验,且维护最为频繁的开源框架当属阿里的 ARouter (基本已停止维护),但组件化不是必须的,杀鸡焉用牛刀,感兴趣的用用就行。

近几天滴滴也开源了一个Router喜欢尝鲜的也可以尝试,因为看上去很厉害,目前公司也接入了,用起来很舒服,强烈推荐:DRouter

但对于已有业务的迁移应该不是一件简单事。

基础框架

既然2021年了,那么所有基础业务框架首选 Jetpack,主要使用其提供的基础架构组件(MVVM):

Databinding/ViewBinding + lifecycle + LiveData + ViewModel + Room

再辅以相关工具链:

Kotlin 协程 + Android KTX + OkHttp + Retrofit

对于布局界面和动画(使用约束布局可解大部分的屏幕适配问题):

ConstraintLayout + Motionlayout

至此,一个基础应用的80%内容基本可完成,但对于某些特定领域的应用,会用到一些硬件,比如相机:CameraX

然后相应的还有一些使开发更轻松的组件:

Paging3:用于一些控件如 RecyclerView 的数据无感知分页请求处理。

Viewpager2:相对于 Viewpager ,Viewpager2 底层已经改为 RecyclerView 有着更高效的性能(对 DiffUtil 的支持)。

  • 图片加载

这么多年下来,图片框架似乎定下来了,那就是 Glide,但既然从 Java 转向了 kotlin ,自然也有了后起之秀:coil

对于大图加载可考虑:subsampling-scale-image-view

  • 事件总线

当然,一款APP的开发总离不开事件总线,用于各界面之间的数据传递等,但也可以合理的通过共用ViewModel 进行实现,总线这里推荐美团开源的 LiveEventBus

  • 权限申请

由于框架众多,而且实际上这个需求只存在于第一次使用申请,所以也没什么好选的,我比较喜欢郭霖的:PermissionX

  • 简单数据的持久化

使用 SharedPreference 没啥问题,但鹅厂开源的 MMKV 更值得推荐。

  • 序列化

虽然很久没更新了,但对于我来说 依旧喜欢 Gson (但最近诈尸更新了一个小版本)

  • 屏幕适配

基本上都是这个:AndroidAutoSize

  • 视频播放

简单用用 Google 的 ExoPlayer

  • 日志管理

直接用 JakeWharton 作者的Timber,维护挺勤快的,用户量也大,关键还轻量:Timber

UI框架

  • 一些通用的组件、阴影处理首选腾讯的:QMUI_Android

可选

  • 暗黑模式、动态换肤

在 2021 年我们总可以听到一些如暗黑模式,或者动态换肤的名词,确实对于应用质量的提高,其美观不可忽视。对于一般情况的下的暗黑模式,使用 原生的 theme style 即可。但更复杂的就像腾讯系的应用,由于皮肤资源往往比较庞大,不可能一开始就打包到 apk 中,于是才有了动态换肤的需求。在开源的环境下可以考虑的大概就只有 Android-skin-support,但这方面的库基本已经停更,大厂则都有其闭源的实现方案,对于个人开发者往往是不具备多套皮肤制作能力的,往往只是换下颜色,这方面可作为可选项。

  • 动态注入

谷歌的 Dagger 使用复杂受人诟病已久,所以在 jetpack 中多了一个 Hilt ,但,凡是都有但是,对于kotlin 也有一个备受瞩目的新秀:koin目前用了 Hilt 感觉也还行。

  • 渠道包

渠道这个东西,一般应用手动打就行,毕竟google等等非国内渠道要求的是 bundle,也不通用,实在是渠道多打包慢就用 walle 试试吧。

优化

性能检测:鹅厂的 matrix

内存泄露检测:square 的 leakcanary

综合工具:dokit

2022.5.6 更新

目前开始使用 Compose ,这种方式 UI 习惯后很舒服,上手难度低于需要学习新语言的 Flutter,如果对Flutter 是观望状态的,不妨试试,当然现在功能还不够全,整体性能勉强还差了一些。

其他

仅作为目前自己如果想开发一款 APP 的考虑。后续自行开发过程中遇到问题或者发现了新的好东西也会不定时更新。

以上;


本站由以下主机服务商提供服务支持:

1条评论

发表评论 取消回复