写点什么

我与 Android 的故事|社区征文

作者:Changing Lin
  • 2022 年 2 月 10 日
  • 本文字数:3315 字

    阅读完需:约 11 分钟

我与Android的故事|社区征文

1.项目概要:

本文主要记录我本人从事移动开发的工作,作为一名Android工程师的职场故事,从一名入门小白,成为一名中高级工程师的心路例程,帮助自己回望过去展望未来。
复制代码

2.Android 初识

2015年,是一个大众创业万众创新热潮、“互联网 +”行动计划、分享经济的年份,还是智能手机增量市场的年份,各大国内外厂商纷纷入局智能手机市场。那年我刚从学校毕业出来,因为是自动化专业具有C语言基础、加上个人的兴趣爱好、项目经验,所以,本意是想找一份嵌入式开发工程师岗位的工作。但多番应聘面试下来,发现嵌入式开发的工作对工程师的实战经验要求较高,需要具备Linux、驱动、文件系统等方面知识,且待遇收入不太符合个人预期。机缘巧合的情况下,有次听到朋友讲起Android系统,很多国产智能手机的操作系统便是Android(安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发)。从各个招聘平台搜索招聘岗位信息发现,Android开发、Android工程师的岗位的需求很多,而且对工程师的技能要求属于入门级别,可能与当时环境有关,高级开发工程师的数量不会很多。经过搜集资料发现,Android本身就是一个嵌入式开发的平台,可以基于Android操作系统开发相关的应用程序,并且由Android衍生出来的就业岗位也很多,似乎是一个就业前景比嵌入式开发更广的方向,于是,决定开始自学、成为一名Android开发工程师。
复制代码

3.打开 Android 大门

  • 广义上来说,Android 开发多是指 Android 应用开发工程师,但也有部分岗位是需要操作系统定制的,如 framework 开发。当我在选择的时候,也是做了一番纠结,但在后来的工作中发现,不会有特别明显的界限,有时项目需求参与 framework 定制开发,有时又需要参与 APP 开发。

  • 《第一行代码》:这是一本入门级书籍,主要介绍 Android 应用开发的基础知识点,涉及搭建开发环境、跑通第一个 HelloWorld 的 Demo、手把手教你入门 Android 的应用开发、介绍 Android 四大组件、数据存储、网络技术等方面,是一本特别适合 Android 初学者的书。通过本书的学习,基本上就能踏入 Android 工程师的门槛。不过,尽管你可能会跑通不同的 Demo,也能通过修改程序实现简单的 UI 交互效果,但这仅仅是一个开始,Android 系统很庞大,揪住其中某个知识点,都可能需要很多文字来阐述。

  • 如我们所知,当时 kotlin 语言还没有普及出来,主流使用的是 Java,因此,很有必要学习 Java 语言基础,及整个 Java 的生态,修炼自己的 Java 底层内功,加深对进程运行原理的理解。

  • Java 的学习路线:面向对象、三大特性、语法基础、数据类型、运算符、循环控制、内部类、单例设计模式、简单工厂设计模式、接口、数组、集合、IO、多线程、线程同步问题、生产者消费者模式、TCP 网络、UDP 协议、HTML 和 SQLite、Http 和网络请求、URL、XML 解析、JSON 解析。

  • Android 的学习路线:UI 布局、UI 控件、UI 高级控件、Activity 生命周期、Activity 启动模式和 Intent 七大属性、异步任务、ListView、GridView、交互控件、Fragment、数据存储、Sqlite 存储、ContentProvider、Loader 异步加载、Handler、ActionBar、BroadcastReceiver、Service、动画

4.修炼武林秘籍

  • OkHttp:是一个执行效率比较高的 Http 客户端;支持 HTTP/2,当多个请求对应同一 host 地址时,可共用同一个 socket;连接池可减少请求延迟(如果 HTTP/2 不可用);支持 GZIP 压缩,减少网络传输的数据大小;支持 Response 数据缓存,避免重复网络请求;通过 OkHttp 的源码分析,可以对网络连接有一个感性的认识,同时,学习责任链的设计模式的编程方法。

  • 组件化开发:简单来说,拆成多个 module 开发,具有低耦合、模块化、可支持单元测试;编译速度快,调试方便;不影响团队协作开发,分层结构比较清晰;避免重复性工作,减少应用体积;可满足产品经理对 APP 的多种变化需求等优点。重点要解决的问题如下:如何统一管理多个 module、如何实现各个 module 之间的跳转、如何实现 module 之间的通信

  • 插件化开发:App 的部分功能模块在打包时并不以传统方式打包进 apk ⽂文件中,而是以另一种形式二次封装进 apk 内部,或者放在网络上适时下载,在需要的时候动态对这些功能模块进行加载,称之为插件化。这些单独二次封装的功能模块 apk ,就称作「插件」,初始安装的 apk 称作「宿主」。支持懒加载来减少软件启动速度,可以减小安装包⼤小,支持动态部署和 bug 热修复。

  • Native 开发:原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 Activity 和访问实体设备组件,例如传感器和触摸输入。

  • kotlin:如果只是学习 kotlin 的语法,那么成本太高了。但 kotlin 与 java 和 android 100%可互相操作,也就意味着可以使用整个 Java 的生态。收益,很多大厂项目、开源项目都在使用 kotlin 作为开发语言,这是一个趋势

  • 跨平台开发:当下流行的许多优秀的框架,比如:uni-app、flutter、ReactNative。这几个之间均有其特点和优势。

  • uni-app 优点:学习成本低,一个使用 Vue.js 开发所有前端应用的框架

  • uni-app 不足:uni-app 不够完善,存在 bug,官方回应的不是很及时

  • uni-app 编程语言和官方:vue / DCloud 出品的,属于国产

  • flutter 优点:可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作。是完全免费、开源的。快速开发,富有表现力和灵活的 UI,原生性能

  • flutter 不足:需要原生协作,维护 3 套代码;嵌套地狱,代码难看难维护

  • flutter 编程语言和官方:dart / Google 移动 UI 框架

  • react-native 优点:跨平台开发,快速编译发布

  • react-native 不足:不能完全屏蔽原生平台,调试的困难

  • react-native 编程语言和官方:javascript / FaceBook 

5.扎根于现实 --- 讯通 App

  • 项目描述:基于 IP 技术架构的新一代集群通信系统,集语音、视频、图像、数据、文本消息等各种信息媒体于一体,可满足用户的实时沟通与数字信息传递需求。支持一键对讲功能;支持点对点音视频通话功能;支持即时聊天功能:实时短消息、发生小语音、发送文件、发送图片/视频;支持实时定位功能;支持视频直播等功能。

  • App 功能:包括语音业务,多媒体业务,数字消息业务,以及扩展业务功能。其中核心业务是,单双工的音视频组呼功能,也包括常见 IM 基础功能(好友、群组、聊天)。为了满足团队开发和业务复杂场景的需求,开发设计上采用组件化开发架构,使用组件路由、组件通信总线等来统一规范组件间接口,打造一个编译速度快,支持单元测试,高内聚、低耦合,满足多变的产品需求的开发环境;根据业务特点进行逻辑分层:系统层、公共层、业务层。通过对项目的 1.0 版本的梳理、讨论和重构,2.0 版本应用体积减少 70%,编译时间缩短到 30s,提升了应用稳定性和代码维护、迭代开发效率。

  • 感悟:对我来说是,入行 Android 开发行业的一个时间节点,从普通的开发人员,过渡到具备架构能力的工程师。通过引入组件化技术,很好的满足了产品经理对 APP 的多种变化需求。通过与后端人员配合,优化功能底层实现方案,使 app 按照预订时间达到可上线的条件。但在重构的过程中,遇到的困难很多,最大的影响因素是,同组的同事在开发的过程中留手尾,不负责任,随意引入第三方依赖库,无严谨的功能测试,这些依赖库存在致命 bug,导致 app 上线后,在高版本系统带来的兼容性问题,坑了队友,导致团队为其加班加点解决问题。这也给我带来了很大的教训,不要随便轻易重构,如果不得已重构,最好得到领导和组织的支持,并且细化到重构目标、重构计划、时间节点等等。

6.总结与展望

从开始入门,一步一步,升级打怪,成为公司团队的核心员工,不断修炼提升专业能力,但说实话 Android 系统很庞大,如果想完全弄懂,需要很多的时间和精力,不夸张的说,十年都不为过。但在我过去的开发过程中,应用层的开发会多一点,framework 的定制相对较少;对于新技术的学习也是很有必要的,比如:kotlin、Jetpack、Material Designer、Compose 等等。可以给 Android 初学者的 30 个建议:How to become a better Android developer

我的座右铭是:Consistency is the key to success

未来我的学习方向是:形成个人的 Android 开发知识体系、形成个人的音视频开发知识体系,与君共勉^-^

发布于: 2022 年 02 月 10 日阅读数: 41
用户头像

Changing Lin

关注

获得机遇的手段远超于固有常规之上~ 2020.04.29 加入

我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。

评论

发布
暂无评论
我与Android的故事|社区征文_android_Changing Lin_InfoQ写作平台