移动应用分类¶
当我们使用术语“移动应用程序”或“移动应用”时,我们指的是设计用于在移动设备上执行的独立计算机程序。截至发布时,Android 和 iOS 操作系统累计占据了超过 99% 的移动操作系统市场份额,并且移动互联网使用量已远超桌面互联网使用量。这意味着移动应用是最广泛的具备互联网功能的应用类型。
此外,本指南使用“应用”作为通用术语,指代在移动操作系统上运行的任何类型的应用程序。通常,应用直接在其设计的平台上运行,或在智能设备的移动浏览器之上运行,或结合使用这两种方法。
在本章中,我们将讨论以下类型的应用:
原生应用¶
如果一个移动应用是使用特定于移动操作系统的应用开发工具包(SDK)开发的,那么它们就被称为该操作系统的“原生”应用。如果我们在讨论原生应用,我们假定它使用该移动操作系统的标准编程语言实现——iOS 采用 Objective-C 或 Swift,Android 采用 Java 或 Kotlin。
由于是为特定操作系统及其专用工具而设计,原生应用能够提供最快的性能和最高的可靠性。它们通常遵循平台特定的设计原则(例如Android 设计原则),这通常会带来比混合应用或Web 应用更一致的用户界面(UI)。由于与操作系统的紧密集成,原生应用通常可以直接访问设备的几乎所有组件(摄像头、传感器、硬件支持的密钥存储等)。
然而,由于 Android 提供了两个开发工具包——Android SDK 和 Android NDK,因此对于这个平台上的原生应用一词存在一些歧义。虽然 SDK(基于 Java 和 Kotlin 编程语言)是开发应用的默认选择,但平台的 NDK(或 Native Development Kit,原生开发工具包)是一个用于开发可直接访问更底层 API(如 OpenGL)的二进制库的 C/C++ 工具包。这些库可以包含在使用 SDK 构建的常规应用中。因此,我们说 Android 原生应用(即使用 SDK 构建的应用)可能包含使用 NDK 构建的原生代码。
跨平台移动框架¶
原生应用最明显的缺点是它们仅限于一个特定平台。如果开发者希望同时为 Android 和 iOS 构建应用,则需要维护两个独立的 codebase,或者引入通常复杂的开发工具来将单个 codebase 移植到两个平台。
以下是一些允许开发者为不同目标(包括 Android 和 iOS)编译单个 codebase 的跨平台移动框架:
如果应用使用这些框架开发,它将利用每个系统的内部原生 API,并提供与原生应用相当的性能。此外,这些应用可以利用所有设备功能,包括 GPS、加速计、摄像头、通知系统等。尽管使用这些框架之一创建的应用在功能上等同于真正的原生应用,但通常不将其称为原生应用。原生应用一词用于通过操作系统原生 SDK 创建的应用,而使用这些框架之一创建的应用通常被称为跨平台应用。
了解应用何时使用跨平台移动框架非常重要,因为它们通常需要特定的工具来执行静态或动态分析。实际的应用逻辑通常位于应用内部的框架特定文件中,尽管应用也包含您在原生应用中会看到的典型代码。然而,这些原生代码通常仅用于初始化跨平台框架,并通过所谓的平台特定绑定在原生系统 API 和框架 SDK 之间提供绑定。
虽然不常见,但应用程序可以结合原生代码和跨平台框架,甚至多个跨平台框架,因此识别所有使用的技术以正确覆盖应用程序的整个攻击面至关重要。
Web 应用¶
移动网络应用(或简称Web 应用)是设计成具有原生应用外观和感觉的网站。这些应用在设备的浏览器中运行,通常使用 HTML5 开发,很像现代网页。启动器图标可用于模仿访问原生应用的相同感觉;然而,这些图标本质上与浏览器书签相同,只是简单地打开默认网页浏览器来加载引用的网页。
由于它们在浏览器范围内运行,Web 应用与设备的一般组件集成有限(即它们是“沙盒化的”),并且其性能通常不如原生应用。由于开发者通常使用 Web 应用针对多个平台,因此它们的 UI 通常不遵循任何特定平台的设计原则。然而,Web 应用之所以受欢迎,是因为开发者可以使用单个代码库来降低开发和维护成本,并且无需通过平台特定的应用商店即可分发更新。例如,对Web 应用的 HTML 文件进行更改可以作为可行的跨平台更新,而对基于商店的应用的更新则需要付出更多努力。
混合应用¶
混合应用是一种特殊的跨平台应用,它试图从原生应用和Web 应用的最佳方面中受益。这类应用执行起来像原生应用,但大部分进程依赖于 Web 技术,这意味着应用的一部分在嵌入式 Web 浏览器(通常称为“WebView”)中运行。因此,混合应用继承了原生应用和Web 应用的优点和缺点。这些应用可以使用 Web-to-Native 抽象层来访问纯Web 应用无法访问的设备功能。根据用于开发的框架,混合应用代码库可以生成针对不同平台的多个应用,并利用与设备原始平台非常相似的 UI 元素。
以下是一些流行的用于开发混合应用的框架:
渐进式 Web 应用¶
渐进式 Web 应用(PWA)结合了现代浏览器提供的不同开放网络标准,以提供丰富的移动体验优势。Web 应用清单(一个简单的 JSON 文件)可用于配置应用“安装”后的行为。这些应用像常规网页一样加载,但在几个方面与普通 Web 应用不同。
例如,它可以离线工作,并且可以访问移动设备硬件,这曾是只有原生应用才具备的能力。PWA 同时支持 Android 和 iOS,但并非所有硬件功能都已可用。例如,推送通知、iPhone X 上的面容 ID 或用于增强现实的 ARKit 尚未在 iOS 上提供。