为移动应用开发选择最佳编程语言

在考虑用于移动应用的编程语言、框架和 SDK 时,您必须考虑前端 (UI) 开发环境,但也要注意后端(服务器端)开发环境。虽然前端编码的开发者和后端编码的开发者通常是由不同人负责的,但他们经常会彼此合作(毕竟,他们都在同一个企业内)。在本文中,我们将回顾目前用于开发移动应用和移动后端的流行编程语言和开发框架。

移动应用的类型

从编程的角度来看,开发者可以选择创建以下三种类型移动应用中的一种:

  • 原生移动应用 是以设备操作系统供应商原生支持的语言编写的应用。底层平台 API 完全可用于应用代码,而且操作系统提供 UI 组件库。构建过程会将此代码转换为具有操作系统原生字节码的可执行应用。
  • 跨平台移动应用 是用一种语言编写但可以在所有平台上运行的应用。对于跨平台的移动应用,编写应用所使用的语言可能不是底层设备操作系统的原生语言。这意味着可能会在字节码中包含代码,或将代码桥接到字节码或者交叉编译为字节码,这些字节码可以在某些支持库的帮助下直接在操作系统上执行。
  • 移动 Web 应用 是一种轻量级范式,当您在设备的浏览器中打开一个 URL,它们看起来就像一个常规的移动应用。移动网站并不是作为安装在设备上的应用交付的,但它们是在为移动设备构建时要考虑的一个重要范式。开发者可以使用以下两种网站编程范式来创建移动 Web 应用:

    • 响应式 Web 编程 是一种网站编程风格,其中的网站布局会根据设备的不同外形规格加以组织调整。因此,不需要横屏浏览,内容可以自动适应设备的宽度。这些网站也可以从桌面访问使用。 在 IBM Developer 上了解最新的响应式设计理念
    • 渐进式 Web 编程 可创建渐进式 Web 应用,这些应用是正常的网站,当从移动设备上的浏览器导航到这些网站时,看上去就像是一个传统的移动应用。它们提供了一种类似移动应用的体验。渐进式 Web 应用可以添加一个指向主屏幕的链接(这样您就可以获得一个应用图标),并且还可以通过在设备上将内容缓存在本地,在未连接到互联网时离线运行。

您可以阅读 IBM Developer 文章“在原生和跨平台移动前端编程框架之间进行选择”,详细了解应用的类型。

为 iOS 平台开发移动应用

iOS 平台是 Apple 公司的专有平台。iOS 平台包括手机设备 (iPhone) 和平板设备 (iPad)。您可以为 iOS 平台开发应用,然后将同一个应用同时交付于iPhone 和 iPad。在开发应用时,您必须考虑到每个设备上的屏幕大小约束。iOS 应用可以安装在 iPhone 或 iPad 上(通过 Apple 的 App Store)。

要为 iOS 构建应用,您必须具有 Apple 开发者帐户,并且在 Mac 计算机上安装了 Xcode IDE。单纯使用 Windows 机器,无法有效地进行构建和调试。Xcode 附带了所有必需的 Apple 开发工具包:SDK、代码编辑器、编译/构建工具、模拟器和调试器。 您必须使用 CocoaPods 或 Carthage 作为包管理器,以引入第三方 SDK 或交付您编写的 SDK。

要为 iOS 设备构建应用,可以将原生 iOS SDK 与 Objective-C 和 Swift 结合使用,或者与各种跨平台技术(针对该框架的 SDK 编写,但目标是 iOS)结合使用。

Objective-C

Objective-C 是 Apple 公司支持用于开发 iOS 移动应用的首种语言。它是一种面向对象 (OO) 语言,语法派生自 C 语言,面向对象的特性派生自 SmallTalk。人们经常批评这种语言的语法笨拙、冗长,方括号很难调试。但经过若干年的广泛使用,它仍然是一种稳定而成熟的语言。

自从 Apple 公司推出 Swift 以来,在新一代 iOS 手机开发中,Objective-C 的受欢迎程度便大幅下降。

Swift

Apple 公司在 2014 年推出了 Swift 作为一种语言规范,并于 2015 年在 Xcode 上将它用于移动应用开发。在 2016 年 (v3.0) 对 Swift 语言进行了重大改进之后,Swift 超越了 Objective-C,成为编写原生 iOS 应用的语言。虽然 Swift 和 Objective-C 可以共存,即使用 Objective-C 和 Objective-C 实用程序编写的库可以在 Swift 中使用,但 Apple 公司已明确表明,Swift 是开发 iOS 应用的新的默认选择。与 Objective-C 相比,Swift 是一种更简单、更简洁的语言。Objective-C 开发者应该可以轻松切换到 Swift。

为 Android 平台开发移动应用

Android 是一个开源平台,主要由 Google 开发和推广。Google 推出了自己的移动设备品牌 Pixel(以及早期品牌 Nexus)。然而,像三星、华为、小米和 Oppo 等众多制造商,他们销售的自有品牌手机和平板电脑都基于 Android,以及 Android 操作系统的衍生版本,比如 CyanogenMod 和 MIUI。Android 设备的外形规格千差万别,涵盖了手机和平板电脑,这是因为各个制造商为满足不同用户的喜好推出了多种型号。

为了构建 Android 应用,您需要随附必备 SDK、调试器和模拟器的 Android 开发工具包。对于 IDE,目前最受欢迎的是 Android Studio,但像 Netbeans 和 IntelliJ Idea 这样的 IDE 同样也很受欢迎。您可以在任何操作系统(Mac、Windows 或 Linux)上使用 Android 开发环境。Android 使用 Gradle 作为构建系统,Android Studio 随附了代码模板以及其他性能评估和增强工具。

可使用 Gradle 打包指令将第三方库添加到应用中。大量的第三方 Android SDK 是通过一个名为 maven 的包管理器(俗称 mavencentral)来分发的。为 Android 构建的应用是在 Google 管理的默认 Google Play 商店中发布的。

要为 Android 设备构建应用,可以将原生 Android SDK 与 Java 和 Kotlin 结合使用,或者与各种跨平台技术(针对该框架的 SDK 编写,但目标是 Android)结合使用。

Java

自 2008 年 Android 平台推出以来,Java 就是编写 Android 应用的默认语言。Java 是一种面向对象的编程语言,最初是由 Sun Microsystems 于 1995 年开发的(现在属于 Oracle)。它是一种非常流行的纯面向对象的语言(与 C++ 相比),很快就被 Android 平台所采用。Java 编译为“字节码”,由在操作系统上运行的底层 Java 虚拟机 (JVM) 在运行时进行翻译。可以用 Java 编写移动应用,并根据 Android SDK 进行编程。批评者认为,Java 需要大量的“样板”代码来完成一个简单的任务,而且像“异常”这样的概念也不好理解。到目前为止,这是 Android 应用开发中使用最广泛的语言。

然而,根据 Google 的说法,Kotlin 在 2019 年已经成为 Android 开发的首选语言。

Kotlin

Google 在 2017 年宣布将支持 Kotlin 作为 Android 编程的最佳替代语言。Kotlin 可以与 Java 互操作,所有 Java 库都可以从 Kotlin 调用。不太严格地说,Kotlin 是一种更整洁的 Java 形式。从 Java 到 Kotlin 的学习曲线是平滑的。在执行级别,Kotlin 编译为 Java 字节码。

同时为 iOS 和 Android 平台开发移动应用

使用原生应用构建方法时,您必须为每个平台维护一个代码库。代码库的大小与需要支持的平台成正比。您通常需要为这两个平台进行开发,但您不需要原生语言功能。幸运的是,借助一些技术,您可以同时针对这两个平台用一种语言或框架编写应用,这意味着那些不熟悉 Java 和 Swift 但精通 Web 或 C# 等其他技术的开发者,可以利用他们的技能为 Android 和 iOS 开发应用。

各开源社区或公司已经提出了一些框架,这些框架与他们的开发者群密切相关,用于面向 Android 和 iOS 进行开发。这些框架随附了他们自有的生态系统,由工具和 IDE 构成,这为熟悉这些框架的开发者提供了便利。例如,C# Xamarin 工具适合使用 Microsoft Visual Studio,而 Apache Cordova 则适合使用像 VSCode 这样的 Web IDE。但是,您仍然需要安装 Android 和 iOS 开发环境工具(正如我先前在 Android 和 iOS 部分中所解释的那样),以便跨平台工具能够利用原生 SDK 和封装。这些框架有时会随附自己的模拟器,但大多情况下会使用底层原生 Android 或 iOS 开发环境的模拟器。

以下跨平台框架依赖于 mavennuget 来分发第三方插件和 SDK。一些开发者还列出了可以购买的插件。

HTML5 和 Apache Cordova

Apache Cordova 起初是一个名为 PhoneGap 的 Adobe 项目。利用 Apache Cordova,您可以在名为 Webview 的捕获浏览器实例中运行 HTML 和 JavaScript (JS) 代码。通过使用 Webview,您可以编写一次代码,然后在任何地方执行。对于这种跨平台方法,人们持有的一种批评意见:由于在 Webview 中执行 JavaScript 代码,响应可能非常缓慢。 您可以阅读 IBM Developer 文章“在原生和跨平台移动前端编程框架之间进行选择”,详细了解不同移动前端框架的优缺点。

HTML 代码与应用本身一起打包,并安装在移动设备上。这样便有机会使用各种 Web UI 框架,如 Jquery、React JS、Bootstrap、Angular JS 或 Vue。它周围还有其他分层框架,比如,最终在 Cordova 上运行的 Ionic。除了 UI 库之外,还有一个插件的概念:通过插件,JS 代码能够访问设备的原生功能,如照相机、联系人列表或位置。这里提供了一个大型的第三方插件生态系统。

最受欢迎的包管理器是 npm。

开发者社区中流行的 IDE 有 Visual Studio Code 和 Eclipse。作为 Apache Cordova 上的包装器,Ionic 目前使用的是 Angular JS,但也销售自己的 IDE,即 Ionic Creator。但是,您仍然可以使用上述任何其他 IDE 来开发 Ionic Angular JS 应用。

C# 和 Xamarin

C# 是 Microsoft 开发的一种面向对象的编程语言。Xamarin 框架(被 Microsoft 收购)支持使用 C# 针对 .NET 框架进行编程。.NET 框架是使用名为 mono 的开源实现在 iOS 平台上实施的。

用于编写 C# 和 Xamarin 代码的流行 IDE 是 Microsoft 推出的 Visual Studio Code。C# 代码是交叉编译的,可以在 iOS 或 Android 设备上以原生方式运行。这就支持与原生开发非常接近的无滞后执行。这里具有名为 Xamarin.iOSXamarin.Android 的特殊扩展,可用于访问可从 C# 调用的 iOS 和 Android 原生功能。对于 iOS,您需要在 Mac 计算机上使用 XCode 来构建可安装的 iOS 应用。

JavaScript 和 React Native

React Native 是由 Facebook 在 2015 年发布的。React Native 使用 JavaScript 作为编写移动应用的编程语言。在编写 React Native 应用时,不会使用 HTML。然后会在运行时解释该代码,并使用桥接模式来执行代码,用于访问设备的原生 SDK 功能。React Native 应用使用平台原生 UI 库来呈现 UI 组件,因此 UI 真正是原生的。由于 JavaScript 的学习曲线非常低,因此 React Native 变得非常流行。

Dart 和 Flutter

虽然 Dart 早在 2011 年就由 Google 公开发布,但直到 2017 年才推出首个稳定版本。Dart 是一种面向对象的编程语言。您可以使用 Google 的 Flutter 框架为 iOS 编写移动应用。

最流行的 IDE 包括 Android Studio、IntelliJ 和 Visual Studio Code (VSCode)。Flutter 的独特功能之一在于,它随附自己的 UI 小部件框架库,这个库基于 Google Material Design 以及类似 iOS 的 UI 小部件。

为 Web 平台开发移动应用

尽管并不是真正意义上的安装应用,但务必要注意的是,这些 UI 是通过导航到 Web URL(网站)交付的。在某些用途下,交付网站具有一定的价值,例如,用于偶发事件或短期事件的应用,或者用于在不强迫用户安装应用的情况下获取少量信息(如姓名和地址)。随着渐进式 Web 应用 (PWA) 的出现,移动应用和网站的用户体验已没什么区别。这些为移动优化的网站是使用 Web 技术(HTML、JavaScript 和 CSS)和常见的 UI 框架编写的。

为移动优化的网站

使用如 Material、Bootstrap 或 Foundation 中的任何一个框架,您都可以交付一个响应式网站。响应式 Web 设计的布局可提供一种原生体验,能够适应现有的屏幕尺寸。例如,在笔记本电脑上的浏览器中,网站可能是 5 列布局,而在从移动设备上的浏览器以纵向模式查看时,该网站将呈现为 2 列布局。与在手机上查看普通网站相比,为移动优化的网站有两大特点:无需放大即可查看内容,并且也无需横向滚动。

渐进式 Web 应用 (PWA)

渐进式 Web 应用实际上是以类似原生应用形式渲染的网站。浏览器也经过演变,可在检测到为 PWA 后,移除浏览器四周的内容,让 Web 内容布满整个设备屏幕。为这个网站添加快捷方式时,它会在移动设备的主屏幕上创建一个图标,这样您就可以像常规应用一样启动。浏览器还可以在设备上以本地方式缓存指定内容,以便您具有快速可靠的加载时间和渐进的离线体验。这是通过以下方式实现的:

  • 使用后台运行的服务工作程序,预先对内容进行缓存
  • 使用响应式设计,取得最佳渲染效果
  • 使用 Web 应用清单,通知浏览器这是可安装的

结束语

除了 Apple 和 Google 可能会增强其平台的新功能之外,移动平台可能不会出现重大变化。但是,跨平台格局经历了诸多变化。可以预想的是,每年都会出现新的最受欢迎的框架。根据团队技能和应用需求选择开发方法,这一点至关重要。要想成功进行移动开发,开发者必须紧跟工具和平台的变化,因为随着移动设备中逐步融入人工智能和机器学习技术,移动开发领域也在发生着日新月异的变化。

祝您编程愉快!

本文翻译自:Choosing the best programming language for mobile app development(2019-07-02)