关于移动应用开发:我为什么放弃移动开发

本文作者|Niklas Klein 译者|朱琪珊 策动|蔡芳芳,原文链接:https://medium.com/swlh/9-rea…,本文由原作者发表在 medium.com,经原作者受权由 InfoQ 中文站翻译并分享。

当我还在上大学的时候,Android 和 iOS 还是新兴的平台,每个人都对这两项技术很感兴趣。如果你加入一些过后的编程研讨会,最初总会写一个小型的 Android 利用。这就是我向 Android 生态系统迈出的第一步,也可能是我随后成为了一名挪动开发者的起因。

在这篇文章中,我想要分享我对于 Android SDK 和 Flutter 的蹩脚体验。我提到的某些要点也实用于 iOS SDK。我曾经在几年前放弃了挪动开发的工作,心愿起初许多事件曾经在朝好的方向改良。但在过后,我发现挪动生态系统是如此的令人感到困惑和挫败,以至于我抉择了一条不同的职业门路。

设施的碎片化

对开发者而言,Android 开发的最大痛点,就是设施配置的微小差别。我始终都未能了解为什么 SDK 中大部分性能(尤其是用户交互界面的局部)取决于设施,而不是我的利用。这从根本上导致我必须应用反对库,针对每个指标 API 级别调试我的利用。除此之外,我还常常遇到在仿真器或者测试设施上好好的代码,却在某个三星或者华为的设施上解体的状况。

质感设计(Material Design)

当我在 HackerNews 或者 Reddit 上读到对于谷歌的 Material Design 的评论时,某些时刻会感到我是惟一真正喜爱它的人。我感觉它在视觉上很具吸引力,我通常很享受这样的用户体验。官网的文档网站倒退得很快,也十分胜利,我感觉这是优良文档的榜样。当它被发表用于 Android 时,我感到十分兴奋!

话虽如此,在 Android 平台上从 Holo 过渡到 Material Design 并非一帆风顺。因为它如同是被急匆匆公布进去似的。在接下来的几年之中,官网的 Material Design 反对库始终短少一些十分根本的组件。尽管你有时能够在谷歌自有的利用上看到这些组件,然而它们并没有真正被纳入到反对库中。开发者不得不构建本人的组件,或者应用 GitHub 上品质无奈保障的实现作为替代品。这次应用 Material Design 反对库的经验,再加上大量的不统一的视觉设计和实现谬误,让我第一次停下来真正地思考和质疑这个生态系统。

无人理睬的最佳实际

构建一个牢靠的 Android 利用,是一项充斥挑战的工作。这次要是因为 SDK 对开发者并不敌对。实践上,一个 Android 应用程序能够永远挂在后盾不应用任何系统资源,而后在用户须要时立刻回到先前的状态,这切实是令人诧异。不过前提是开发者正确地实现了这个利用的状态和生命周期管理机制。

开发者:你好,互联网!我的利用在扭转屏幕方向时解体了,该如何解决?互联网:这很简略!禁止扭转屏幕方向即可。

——啊哦,可怜的是,这种回复很广泛。

你是否已经应用过 Java 中的线程(Threads)?在可变变量随处可见的的命令式代码库中,这件事变得十分艰难。但你猜怎么着?在 Android SDK 中应用线程更加艰难。如果你想要在一个 Activity 中治理 Thread,那你就只能自求多福了。侥幸的是,咱们最终保留了 Fragments,这最终让这件事变得容易了一些。但代价是在一开始就须要应用 Fragments。

在我作为一名挪动开发者的职业生涯中,我面试了一些高级 Android 开发者。他们简直无一例外,都很难给出这些话题的正确答案。
我始终心愿谷歌能更坦然地抵赖这些问题,并且和社区一起解决。这些问题可能随着 Kotlin 的公布有所改善,但 Android 生态系统的根基依然存在很多潜在的问题。

有效的设计模式和对形象的注解

开发者很快就意识到,在 Android SDK 提供的形象之上,构建一个真实世界的利用是不可能的。对此的解决方案是层出不穷的设计模式,甚至每周可能都会呈现新的设计模式,我记得的包含:MVC、MVP、MVVM 和 MVI。而且因为无奈应用一般的结构函数调用来治理依赖项,咱们不得不在代码库的每个中央应用注解。这些原本并没有必要。Java,甚至 Kotlin,原本就有足够的能力能够对这些货色建模,更何况是以一种通明而间接的形式。但 Android 更喜爱 XML 定义和反射式实例化,因而开发者不得不在代码中应用注解和各种设计模式。实话实说,我真的无法形容这到底有多麻烦。

从未利用过的平台劣势

在某种程度上,原生 iOS 和 Android 开发都是作为平台在与网页端竞争。但 iOS 和 Android 领有只属于一家企业的微小的平台劣势,相比之下,网页端有许多利益相关者,这些利益相关者都想要依据他们的须要来影响网页端的开发。

然而,网页端领有更加沉闷和翻新的生态系统。只须要想想 React 的胜利故事:基于组件的用户界面,是咱们目前提出的最简洁的形象办法,这是无可否认的。多年以来,Android 并不理睬这一趋势,直到最近才发表推出“Jetpack Compose”,然而这依然仅反对在开发者预览模式下应用。同样的事件也呈现在 iOS 开发中。

所以,现状是咱们依然须要继承 android.view.View 类,这个类有 1.5 万行代码,和数十个生命周期函数,但同时咱们还要尝试注入本人的 merge XML 文件。iOS 和 Android 原本能够成为这个竞争中的引领者,但实际上,它们曾经被远远甩在了前面。
请不要对 UI 开发抱以心愿

一个精美的利用的关键在于用户界面(UI)。我在上文曾经吐槽了不少对于组件的问题,但这些还不是最重大的。你是否已经调试过网站上的故障?通常的操作是:关上浏览器的开发工具,点击有问题的元素,而后应用 CSS 和 HTML 的属性来调试。与此相比,Android 是一个无法访问的黑盒。诚实说,我始终没有齐全了解 Android 的主题和款式机制,并且与 Web 相比,Android 的工具显得毫无用处。

想要在这个框四周增加暗影吗?没问题,请应用这个奇怪的.9.png 文件,或者依附 API Level 21,你就能够正确渲染暗影了(只管只有凸形暗影)。不好意思,你遗记实现自定义视图四个构造函数的其中一个了。但我不会抛出编译谬误,我只会在运行时解体!当初有反对超高屏幕密度的手机了。能够在利用里增加 xxxhpi 的 assets 吗?不行,不反对矢量图,咱们做不了这个。

——来自 Android SDK 的深夜独白

矢量图

在 Android 21(5.0)之前,Android 平台基本不反对正确的矢量图。这背地的起因是,多样的 Android 设施导致了多种不同的屏幕密度,这要求图像针对每种屏幕密度都做认真的调整。求实的开发者自然而然地开发了转换矢量图的工具,将 logo.svg 转换成 ldpi/logo.png,mdpi/logo.png,hdpi/logo.png,xhdpi/logo.png,xxhdpi/logo.png 以及 xxxhdpi/logo.png。侥幸的是,最终谷歌扭转了它们的想法,并提供了 VectorDrawble 来反对局部可缩放矢量图形(SVG)。确实,这足够加重过后的苦楚。但依然令我困惑的是,一个以可能在任何设施配置上运行为劣势的开发环境,是如何在这么长时间都不反对矢量图的状况下活下来的?

死局

这些年,我开始越来越放心我的常识会在不远的未来过期。我学到的大多数常识都是 Android 开发所特有的,很少实用于更宽泛的软件开发畛域。思考到这些方面,我不认为原生的挪动开发会始终存在,所以我开始放心所学到的技能的实用性。

Flutter

当 Flutter 公布时,我十分冲动。它承诺将解决一些次要的 Android SDK 的缺点,同时无偿提供跨平台反对。所以在我上一份工作中,咱们开始从原生 Android 迁徙到 Flutter 上。我必须抵赖,Flutter 信守了它的承诺:

  • Flutter 内置的渲染流水线齐全解决了 Android 的碎片化问题。
  • 从一开始,它就提供了详尽的高质量的 Material Design 组件库。
  • 热重载性能的灵活性齐全颠覆了我的认知。
  • 你能取得前所未有的高质量界面外观的跨平台体验。

但可怜的是,它也不完满。而且有点惋惜的是,Flutter 遇到的问题本能够通过一个全新的我的项目轻松防止。

  • Dart 很蹩脚:它还是一门绝对年老的语言,但它重蹈了不少它的前辈的覆辙(谬误的类型零碎,Null,应用语句而不是表达式,等等)。
  • Flutter SDK 中让人不解的设计决策:它们本应发明一个更好的 React,但却发明了一个更蹩脚的。本能够通过简略的函数调用解决的问题,往往须要通过有状态的面向对象编程(OOP)机制能力解决。(我记得对话框的路由和解决在这个方面尤为苦楚)

论断

在某一时刻,我分明的意识到,我不想在这种技术上倾泻心血了。我向本人允诺,绝不再在挪动平台上编程。一个设计精美的、响应式的网站在明天曾经能够给你足够好的体验,所以这是我的不二之选。只须要一个代码库,它就能实用于每个客户端。如果我还是不得不构建一个挪动应用程序,我依然会抉择 Flutter,甚至是在我仅针对 Android 的状况下。我相对不会再应用 Android SDK。

话虽如此,但要廓清一点,我还是十分青睐和观赏精心制作的原生利用的(无论是在挪动设施上还是桌面上)。我对那些应用现有工具就能创立出这样的利用的开发者,致以高尚的敬意。只是,我不想再成为他们中的一员。

逆锋起笔是一个专一于程序员圈子的技术平台,你能够播种最新技术动静最新内测资格BAT等大厂的教训精品学习材料职业路线副业思维,微信搜寻逆锋起笔关注!

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据