3

我与Android的故事|社区征文_android_Changing Lin_InfoQ写作平台

 2 years ago
source link: https://xie.infoq.cn/article/cfb16920f6739c251cb90ee7e
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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 开发知识体系、形成个人的音视频开发知识体系,与君共勉^-^


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK