首页 > 编程笔记

Android Things是什么?

不久之前,谷歌公司发布了一款名为 Android Things 的物联网(Internet of Things,IoT)操作系统。作为谷歌公司的第一代 IoT 操作系统,它受到了来自全世界开发者们的关注。

要了解更多关于 IoT(物联网)的内容,请转到:IoT是什么意思?

Android Things 是谷歌公司为开发 IoT 项目而开发的一套全新的操作系统。Android Things 帮助我们使用较可信的平台并且能使用 Android 开发技能完成专业的 IoT 项目。

没错,是 Android,你完全可以把 Android Things 看作 Android 系统的“修订”版本,可以使用已有的 Android 知识来实现一个个智能的 IoT 项目。该操作系统的巨大前景在于 Android 开发人员可以利用它平滑地进入 IoT 领域,并可以在几天之内开发、构建完成自己的 IoT 项目。

Android Things 和 Android 的区别

在深入了解 Android Things 系统之前,先了解一下它的基本架构。Android Things 系统的层次结构如图1所示。

Android Things系统的层次结构
图1:Android Things 系统的层次结构

Android Things 系统的层次结构与 Android 操作系统略有不同,可以发现 Android Things 系统整体上更紧凑,主要体现在 Android Things 的应用程序底层的层数更少,并且其应用层比普通的 Android 应用程序更接近驱动程序和外围设备。

即使 Android Things 基于 Android,Android Things 中也有一些 Android 并不支持的 API。下面简单介绍它们的相似之处和不同之处。

1) 内容提供者(content provider)

可以发现,在 Android 中广泛使用的内容提供者(content provider)并不在 Android Things SDK 中。因此,在开发 Android Things 应用程序时应该格外注意这一点。

要了解有关这些不支持的功能(如内容提供者)的更多信息,可以参阅 Android Things SDK 的官方网站:https://developer.android.google.cn/things/

2) 用户界面(UI)

与一般的 Android 应用程序一样,Android Things 应用程序可以拥有用户界面(User Interface,UI)。然而,在 Android Things 中,应用程序也可以没有 UI,这完全取决于要开发何种类型的应用程序。

用户完全可以像操作 Android 设备一样与 UI 交互,并在 Android Things 应用中响应相应的事件。

Android Things 中的 UI 开发方式与 Android 中的开发方式完全相同。这一点值得关注,因为我们可以重用一些 Android 知识来轻松快速地开发一套 IoT 应用程序的 UI。

3) 谷歌服务

值得关注的是,Android Things 完美地支持谷歌服务。几乎所有由谷歌公司实现的云服务都可以应用在 Android Things 中,但也有少数例外情况。

Android Things 不支持严格应用在移动手机中的谷歌服务及需要用户输入或身份验证的服务。不要忘了 Android Things 应用程序的用户界面可有可无。要获得 Android Things 中提供的谷歌服务的详细列表,请参阅 Android Things 官网。

4) 权限管理

权限的管理在 Android 开发中有非常重要的作用。读者可以假想 Android 应用程序其实运行在一个黑盒中,它对外部系统中资源的访问权限有限。当应用程序需要访问黑盒外的特定资源时,它必须申请相应的权限。

在开发 Android 应用程序时,可以在 Manifest.xml 文件中声明所需要的权限。Android Things 仍然使用这种方式,并且在安装时就可以授予应用程序申请的所有权限。Android 6(API 23)引入了一种申请权限的新方法,即应用程序不仅可以在安装时(使用 Manifest.xml 文件)申请权限,而且可以在运行时动态地申请权限;然而,Android Things 暂不支持这种方式,因此只能在 Manifest 文件中申请所有的权限。

5) 通知(notification)

最后要注意的是通知(notification)这个概念。Android Things 的系统 UI 并不支持通知状态栏,因此我们无法触发来自 Android Things 应用的通知。

总结

简单来说,我们应该了解,与 UI 相关的所有服务或依托 UI 来完成任务的所有服务都不一定在 Android Things 中有效。

IoT 依赖库

IoT 依赖库是由谷歌公司为 Android Things开发的全新类库,主要用来处理与外围设备和驱动程序的通信。Android SDK 不包含此库,该库也是 Android Things 重要的功能来源之一。该库公开了一组 Java 接口和类(API),可以使用这些 Java 接口和类来与传感器、执行器等外围设备连接并交换数据。

IoT 依赖库封装了内部通信细节,支持多种行业内标准的通信协议,例如:
使用这些协议可以连接到各种类型的外围设备。

此外,该库公开了一组 API,用于创建和注册名为用户驱动程序(user driver)的新设备驱动程序。这些驱动程序是用于扩展 Android Things 框架的 Android Things 应用程序的用户自定义部分。也就是说,该库是自定义库,可使应用程序与本机不支持的其他设备类型进行通信。

Android Things 主板的兼容性

Android Things 是专为 IoT 而开发的新操作系统。在编写本文时,Android Things 已经可以支持以下4种不同的主板:
不久的将来,Android Things 将支持更多的主板。谷歌公司已经宣布它将支持新的 NXP Argon i.MX6UL 主板。

Android Things 的强大之处在于它抽象了底层硬件提供的接口,这是与外围设备和设备交互的常用方式。使 Java 闻名的一句话“一次编写和到处运行”(Write Once and Run Anywhere,WORA)也适用于 Android Things。这是 Android Things 的一大特色,我们可以不关注底层开发板来开发 Android Things 应用程序。

然而,当在不同主板上开发 IoT 应用程序时,我们也应当考虑一些较小方面的偏差,以便应用程序可以移植到其他兼容的主板上。

所有教程

优秀文章