android android手机远程监控

2024-09-2602:31:38综合资讯0

android android手机远程监控

本文最初发布于 Level Up Coding 博客。

我将分享为何在这个行业耕耘了近十年后,我决定彻底告别 Android 开发。为了更好地理解我的经历,首先简要回顾一下我的职业生涯。

自 2013 年起,我便开始了 Android 开发的旅程,那时 Android 4.4 还是一颗耀眼的新星。AsyncTasks 是标准配置,而 OttoEventBus 等工具也在当时流行。我见证了架构的演变,从 MVC 过渡到 MVP/MVI,再到 MVVM,最后是 MVVM 与 MVI 的结合。

当 RxJava 崛起时,编程世界突然变得反应式,数据流成为了新宠。我记得,当 Kotlin 首次被提及时,l33t Android 开发者(Hi Jake Wharton)对其赞誉有加。Kotlin 的崛起几乎霸占了 Android 开发的舞台。紧接着,Coroutines 出现,被初期视为“RxJava”的对手(嘿,你现在可以用同步方式编写异步代码了!不用流了!)。尽管这一理念引起了不少关注,但很快发现它只是一个初步的好主意,Channels 等底层异步原语随之而来,形成了 Kotlin 的 Rx-Way。现实证明,许多人在使用 Channels 时遇到的问题,也让他们付出了代价。最终,StateFlows 和 SharedFlows 的概念被重新引入,为 Kotlin 提供了更轻量的 RxJava2 替代品。

我还记得与同事 David 讨论状态和事件的激烈对话:状态究竟是什么?事件对状态有什么影响?反之亦然?在 Dagger 2 被 Koin 和 Dagger Hilt 替代之前,我熬夜钻研 Dagger 2 的日子也历历在目。我曾深度阅读 Uncle Bob 的《架构整洁之道》,这是我 Android 开发生涯中最启发性的时刻之一。如今,我能设计和编写几乎所有应用程序,而不再拘泥于 MVVM/MVP/MVC 或其他特定平台的细节。我理解了测试的重要性,尝试了 TDD,体验了 DDD 和 BDD。

(我之所以选择这个副标题,是因为我在从瑞士到德国的火车上写这篇文章。)

在保时捷和 IBM 等大企业的领导团队中,我积累了宝贵的经验。经过 6-7 年的历练,我达到了个人目标。我曾开发过复杂的应用程序,包括 E2E 加密、传感器通信、NFC 芯片、BLE Beacon、高流量聊天应用以及知名的待办事项应用等。

大约 6 年后,我开始以首席 Android 开发人员的身份参与项目。我学会了识别项目中的核心技术问题(架构和团队成员对某些模式的理解差异),并指导团队解决这些问题,从而成功地完成项目。对我而言,新技术不过是学习新 API 和框架,解决那些我们已经解决了很多年的问题,只不过新的框架/API 处理得更好(无需手动处理生命周期、Fragment Transaction、XML 布局等)。

值得庆幸的是,在过去的 4-5 年里,我有机会从事后端工作(根据项目需求)。我深入了解了后端开发,包括并发编程、分布式系统、纵向和横向扩展、分布式事务处理、可配置代码的编写及环境表现等方面。我研究了不同类型的数据库(图数据库、关系数据库、文档数据库),学习了 Docker 和 K8s,并用 Go 重构了 Java EE 系统。看到 Go 编译出来的二进制文件,几乎没有内存占用,我深刻体会到 Go 的强大。作为后端开发人员,我面对的问题与在 Android 开发中遇到的挑战相比,显得更为复杂和深远。

随着时间的推移,我对与 UI/UX 设计师的无休止的会议感到厌倦。解释 Material Design 的基本原理,或为何应用程序 X 的行为不符合预期,常常让我感到疲惫。这些设计讨论经常让人脑力透支。在一些复杂的项目中,一旦团队理解了整洁架构和领域驱动开发,我们能迅速构建出领域+数据层。解释身份认证流程后,处理令牌刷新逻辑变得相对容易。UI 层的挑战常常源于不断变化的框架 API,而 UI/UX 设计师和 PO 的需求也不断影响 UI 层。最近,几乎所有的项目都变得枯燥无味,工程关注减少,业务和实施的关注增多。时常需要在 Android API 上耗费大量时间。尽管偶尔会有如编写自定义视图这样的任务令人振奋,但通常情况下,工作变得枯燥乏味。思索这一切,我不禁自问:这对我到底有什么意义?尽管我赚了很多钱,但我马上就要 30 岁了,未来的几年我将何去何从?

作为一名经验丰富的 Android 开发者,我发现自己只适合 Android 领域。我的技能专注于开发可维护、整洁且在 Android 平台上运行的代码。考虑到像 Flutter 这样的新兴技术已经开发出了一些出色的应用,我不再愿意启动单独的原生 iOS 和原生 Android 项目。诚实地说,大多数公司的首席/资深软件工程师职位并不重视 Android 技能。

我成功地完成了最后一个项目。现在,是时候迎接新的挑战了。我不愿再浪费时间讨论 CardView 的边框,或处理无谓的问题,比如单选按钮与复选框的选择。我不想再为了优化 Android 生命周期或导航而学习新库,经历它们在未来 12 个月内被替换的过程。这种情况在过去 10 年里已经发生过多次。新一代开发者总是想编写新的库来处理 UI 状态或导航,测试通常被忽视。Android 开发逐渐被 Web 开发的混乱所吞噬(你试过安装 create-react-app 吗?你会下载数以千计的库,包括一些易受攻击的库)。

幸运的是,我在几个项目中从事后端工作,这使我得以过渡到后端开发,完全告别 Android,专注于处理每秒数十万用户请求的系统。这对我具有极大的吸引力。现在,我的计划包括获得 K8s 认证、掌握多种云技术、深入学习特定数据库以及全面理解 DevOps。我感受到编程的神秘感再次激发了我,复杂的工程问题让我兴奋不已。

令人遗憾的是,作为纯粹的 Android 开发者,架构师或首席/资深工程师的道路是封闭的。纯粹的 Android 开发人员难以具备履行这些职位的技能。对我来说,这是一段宝贵的旅程,但我再也不会以 Android 开发人员的身份参与项目了。

levelup./why-i-left-android-development-after-10-years-and-became-a-backend-developer-86ebf3595d43