2020年度复盘

无复盘,不成长

Posted by Yuriy on January 4, 2021

2020年度复盘

前言

无复盘,不成长。本文聊一下2020年这一年Android的发展,以及自己这一年做了什么,技术的成长,浅谈一下移动端的未来的趋势。

移动端技术

kotlin 1.4.0 版本发布

  • 新的编译器
  • 新的前端加速
  • 统一后端和可扩展性
  • 支持SAM转换
  • 混用命名参数和位置参数
  • 尾后逗号
  • 属性代理优化
  • 等等

kotlin:http://www.kotlincn.net/docs/reference/whatsnew14.html

jetpack

  • DataStore(Alpha 版)
    • 用于替代SharePreferences的数据存储库
  • Hilt
    • 基于Dagger开发专门用于Android 开发的依赖注入框架。与Dagger相比,更加易于使用和学习
  • Navigation
    • 用户管理界面跳转,尤其是多Fragment之间跳转
  • JetPack Compose(1.0.0-alpha03),个人觉得这是一种UI趋势比xml好多了,虽然现在只是alpha,不过建议有时间的同学可以学习下。
    • 基于Kotlin的声明式UI框架
  • Room
    • sqlite框架用于操作Android端数据存储
  • LiveData,Lifecycle,ViewModel
    • 管理生命周期,可以用来实现 MVVM + Databinding
  • Paging 3.0
    • 与Paging 2相比,使用了Kotlin进行重写。用于分页加载来自本地数据库或网络的数据。
  • WorkManger 2.3.0
    • 满足您的后台调度需求的
  • Startup
    • 用于为App提供初始化回调能力。体系化得将各种App内的功能模块、所引入的SDK的初始化联合起来,不各自为战。一方面能够将所有的初始化方式进行统一,在代码学习层面便于进入。另一方面,在初始化方式收敛后也能够有效的做性能数据监控。

jetpack:https://developer.android.google.cn/jetpack

Arouter

组件化或者模块化开发模式,可以让我们程序更容易的扩展、更方便的维护、 更快捷的同步开发与更简单的单独调试,ARouter解决组件间、模块间的 界面跳转问题。主要出现就是让组件间、模块间是实现完全的独立。

ARouter:https://github.com/alibaba/ARouter

Android Studio 4.1.1

  • Design 升级 Material Design 组件
  • Develop 数据库检查器 (Database Inspector) 支持在 Android Studio 中直接运行 Android Emulator 支持 Dagger 导航 使用 TensorFlow Lite 模型
  • Build & Test Android Emulator 支持可折叠设备 升级 Apply Changes 从 AAR 导出 C/C++ 依赖项 优化原生崩溃报告的可读性
  • Optimize 改进 System Trace UI 独立分析器 原生内存分析工具
  • 升级 Material Design 组件 (Material Design Component) “创建新项目”对话框中的 Android Studio 模板现使用了 Material Design 组件 (MDC),符合默认主题和样式的更新指南。这些变化让 AS 更容易使用推荐的 Material 风格样式,并支持深色主题等现代 UI。
  • 在 Android Studio 中直接运行 Android Emulator 此功能可节省屏幕空间,使用快捷键即可在模拟器和编辑器窗口之间快速切换。开发者可在 AS 中进行常见的模拟器操作,例如旋转和获取屏幕截图。当然如果希望访问全部选项,仍需要运行稳定的模拟器。访问路径 File →Settings→ Tools → Emulator → Launch in Tool Window。
  • 数据库检查器 (Database Inspector) Database Inspector 用于简化检查、查询和修改应用程序数据库的过程。无论应用程序直接使用 Jetpack Room 库还是直接使用 Android 平台版本的 SQLite,都可以方便地检查正在运行的应用程序中的数据库和表或运行自定义查询。 由于AS 在检查应用程序时会保持实时连接,因此还可以使用 Database Inspector 修改值,并在运行的应用程序中查看更改。
  • 支持 Dagger 导航 Dagger 是流行的依赖注入库。Android Studio 4.1 带来了一个新的 “间距图标” (在编辑器和代码行号之间的图标,如下图所示),点击这个图标即可轻松地在 Dagger 的关联代码间进行导航,包括依赖项的生产者、消费者、组件、子组件以及模块。此外同样可在 Find usages 中获取相同的信息。
  • 使用 TensorFlow Lite 模型 TensorFlow Lite 是一个用于编写移动机器学习模型的流行库,新版的 AS 支持将这些模型更容易导入到 Android 应用中。与视图绑定类似,AS 生成了易于使用的类,因此开发者可以用更少的代码和更好的类型安全来运行模型。
  • Android emulator 支持可折叠设备 除了最近新增的 5G 蜂窝测试支持外,新版本还为 Android 模拟器增加了对可折叠设备的支持。使用 Android emulator 30.0.26 及更高版本,即可配置具有多种折叠设计和配置的可折叠设备。详情点此查看。
  • 原生内存分析工具 (Native Memory Profiler) Android Studio 内存分析器现在引入了一个用于分析 APP 的原生内存分析工具 (Native Memory Profiler),适用于部署在运行 Android 10 或更高版本的物理设备。

Android studio:https://developer.android.google.cn/studio/

Android 11 发布

  • 以人为本,更具表现力
    • 更人性的通知跟气泡提示
  • 更强大的隐私保护
  • 优化折叠设备支持
    • 一些折叠设备的显示
  • 控制中心的优化,更方便的一键启动
  • 优化 5G 体验
  • 录像时关闭通知音
  • 位置信息访问权限
    • 更改了位置信息访问权限,如果应用中的某项功能,从后台访问位置信息,会请用户验证此类访问是否有必要
  • 强制应用调用内置相机
    • 取消了应用调用第三方相机的功能
  • 系统无缝更新,几乎可以在后台更新
  • 等等

Android 11:https://developer.android.google.cn/android11

Flutter

目前市面上最强的跨平台方案:https://flutterchina.club/

我做了什么?

2020年个人博客(YuriyPikachu.githu.io)总共写了九篇文章,一篇kotlin;两篇跨平台方案实现,一个是用Taro实现外卖平台,一个是Flutter实现疫情平台;JVM内存模型一篇;Gradle插件一篇;全埋点一篇;一篇是快速实现灰白效果;一篇屏幕适配;还有一篇反编译。用户属性如下:

我的成长

业务方向:从电商跑到了支付,学到了一些新的东西。

技术方向:在电商公司个人负责无痕埋点方案时候,让我对于Javassist操控字节码,gradle插件化有了更加深入的理解。后来去了新公司我又用ASM做了一些工具,让我对于字节码,jvm内存原型,java的GC机制,都有了不同程度的提升。

浅谈移动端的发展

移动互联网发展到现在,大型的app已经占据了所有你能想到的方向,覆盖了用户生活,工作,学习,出行的方方面面。所以再出现一个app的超级巨头几乎很困难。那是不是没有机会了?也不完全是,可以做一些细分领域。不过真正的大头估计要等5G的普及,以及真正的5G应用出现。

5G通讯,人工智能等的普及,物联网会跟着发展,所以IoT对于移动端开发同学也是一个不错的入口。比如智能家居:像小米,天猫精灵,华为,ViVo,格力等;智慧物流:菜鸟,京东等;智能支付:蚂蚁金服;还有一些车企,吉利等等这些其实都离不开IoT。

学习建议

1、掌握一门跨应用的语言(Flutter),因为之后你面对的终端不仅仅是Android,IOS,Windows,Linux,有可能会鸿蒙,Funchsia OS等等。

2、深入系统底层源码,我一直都觉得客户端跟前端开发同学最大的区别是客户端同学是学习一个操作系统的过程。你不了解一个系统源码,你就很难写出一个高质量的应用,很难适配各种版本的系统。

3、如果你在小厂,一定要紧跟 Google 的客户端架构框架,Kotlin + jetpack + MVVM 就是最佳实践,更大一点的项目加个组件化就好了,所以你重点花时间了解Google架构工具的底层原理,没必要自己研发一套框架。我曾经弄过一套框架,现在想来真的是蠢。因为一方面成本很高,另一方面如果你只是几个人,要做的比Google客户端框架好也很困难。大厂之所以要自研框架,也是因为Google的框架没法满足他们的需求。

4、如果你在大厂,我也是初入江湖,只能给些思想上的建议。保持热情,了解团队业务,不要只把自己定位成接需求干活的个体,要积极寻找切入点,让自己用过去的经历帮助到团队。

个人总结

今年完成最重要的两件事,一个是买房,另一个是进大厂。工作至今,一开始在初创企业,后来去了C轮公司,这是我第一次来一线大厂,本来有一些机会可以更早的来大厂,但都各种原因错过了。关于大厂有很多正面,负面的评论。但建议还是自己来看看,即使是同一家公司,因为部门不同,风格也是差蛮多的。

总结一下外面经常听到的几点:

关于螺丝钉,你入职进来的岗位是固定的,不可能让你天马行空,想弄啥弄啥,但是可以在你的岗位职能权限下,你可以寻找切入点,找你主管沟通,去做一些你想弄的东西。

关于压力,说大厂各种压力,会猝死,因为我之前呆的公司压力也都蛮大的。大厂压力肯定是有的,毕竟用户量都是用亿做单位,所有的小bug都有可能变成一个p级故障,但目前还没到无法承受;

关于说主管会pua,个人暂时没碰到,是会有观点不同的时候,个人觉得首先不要玻璃心,本着对事不对人,大家都讨论的是这件事,你可以提出你的观点,主管肯定也一样可以提出他的观点,观点不同是很正常的。其实我之前在C轮公司,跟我当时Android开发主管辩论才叫激烈,但我们关系其实挺好的,因为我们都是想把东西弄好而已,我离职了他送我下楼,他来我现在公司附近,还特地找我喝酒。