Android Things在 #io17

Posted 王玉成的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Things在 #io17相关的知识,希望对你有一定的参考价值。

文| 谷歌IoT开发技术专家 (GDE) 王玉成 (York Wang)

Google IO 2017圆满结束了。这次大会上,聊到了android生态系统的一系列变化,聊到了人工智能,聊到了增强现实,聊到了机器学习。Keynote中也只是简单的提到了Android Things的发布,但是Android Things相关的Session却在大会上完全铺开了。

session的亮点

今年的IO大会,为我们带来的Android Things相关的Session有7个,

  • What’s new in Google’s IoT platform? Ubiquitous computing at Google
    Google的IoT平台的系统总体,以及各种技术的介绍。
  • Bringing Device Production to Everyone With Android Things Android
    Things在Android生态中的地位,以及Android Things的未来。
  • From Prototype to Production Devices with Android Things
    着重提到了原型开发中硬件的准备及使用方法。
  • Security for IoT on Android Things
    Android Things中的安全相关的分析。
  • Developing for Android Things using Android Studio 使用Android
    Studio来开发Android Things,重点介绍了与硬件相关的代码编写,Bug跟踪的过程。
  • Building for enterprise IoT using Android Things and Google Cloud
    Platform 如何在企业Android Things中连接相关的云端服务,首次推出Cloud IoT Core。
  • Using Google Cloud, TensorFlow, and the Google Assistant on Android
    Things Android Things使用云端的其它服务。

这七个Session把Android Things的生态,系统,开发工具,硬件开发,软件开发,安全,以及云端服务,做了全方位的介绍。对比之前公开的Android Things的相关代码以及文档,这次又提出了一些新的视角。我们一起来看看Android Things的安全,以及Cloud IoT Core这两个亮点。

安全

关于物联网的安全,是一个不容忽视,长期探讨的话题。那么Android Things又给我们带来安全相关的哪些视角呢?

从安全角度来讲,我们也需要对以下类型的攻击加以防备:

  • Pervasive:这一类漏洞能够广泛的被利用,影响数以万计的物联网设备。比如之前的摄像头安全问题。
  • Privileged:关于权限的问题,一直是安全方面的重点,黑客在不断的利用各种漏洞提权,厂商采用各种策略防止提权。
  • Persistent:入侵一旦成功,那么这种入侵就会持久的驻留在宿主机上,甚至会控制设备重启,升级等操作。
    如果攻击者一旦获以上的三种类型的攻击之一,这种攻击给黑客带来的投资回报(ROI Return on investment)是相当丰厚的。

那么,Google从安全的角度来考虑,最好的策略是,增加攻击的成本,减少攻击的回报,减少安全防护的成本。

对于Android Things来说,安全防护,主要是来源于Android Things的系统防护,Google已经为我们考虑到了。

OS Hardening

我们应该还记得,Android系统安全性做了大量的工作。现在,这些安全措施完全平滑迁移到Android Things上了。这些措施集中在Kernel与Framework层

从操作系统层面来讲,Android Things已经为我们做了大量的工作了,那么开发者只需要申请各种权限即可。相当方便了。
这儿需要补充一下,Android Things相对于Android,更多的集中操作各种外设,总线。
做过linux bsp的人都知道,开发driver会直接影响到系统的稳定性。特别对于中断,同步,异步,锁等特性使用不当,会造成系统的不稳定性。那么,Android Things给开发者的外设接口,也极大的简化了操作系统层面的问题。只需要实现外设的基本功能即可。

OS Update

从之前的资料中,我们知道Android Things的升级完全由Google完成的。那么,在系统升级这一部分,Google又做了哪些安全措施呢?
我们先来还原一下Android Things升级的内容,

升级包括两个部分,一部分是用户开发的App,一部分是Google的OS,然后这两部分内容,都需要根据需求,完成升级。
对于系统的升级,会采用AB升级的模式,也就是把当前的系统做一个备份,如果升级不成功,那么会自动回退到先着的版本。
对于App,开发者不需要主动触发升级,最新的App会自动的安装到在线的所有设备上去。但是会留给开发者做测试的时间窗口。

另外一个要点,就是开机启动验证。

只有经过认证的系统,才能够正常启动。这一部分工作,是由bootloader完成的。那么问题来了,OEM厂商提供bootloader以及OS BSP的支持,Google提供Android Things的系统的升级,他们之间的认证,是怎样一个工作流程?

在产品开发之前,会为当前的产品原型准备一个密钥,这个密钥只能用于这个设备中。

正式产品的系统升级,采用AB式的升级模式,会备份之前的版本,并且旧版本和新版本有不同的key,如果是升级后,系统启动失败,会回退到老版本加以启动。如果是新版本启动成功,则把验证的key替换成新版本的key,老版本也就再也不能启动了。

Bootloader又是怎么去验证Key的呢?它用的还是Android Verified Boot(AVB)的机制。

关于AVB的详细介绍,请参考[https://android.googlesource.com/platform/external/avb/]

如果用户恶意的去更改验证的代码,最后会造成系统无法启动。没办法修复。

Google在系统的安全性上下足了功夫,也确实防备了之前提到的三类安全问题,用户只考虑开发中的问题即可。

Cloud IoT Core

参考去年Android Things发布的相关文章,我们还记得,当时可以用Android Things连接到云端的一些服务。现在在Google Cloud中增加了新的功能,Android Things只需要连接Cloud IoT Core,即可以完成云端的各种服务的连接。现在这部分功能处于内测阶段。我们可以先了解一下IoT Core的作用。

说到IoT Core,我们得回顾一下Google Cloud的发展:

2010年开始立足于BigQuery,从2014年开始,数据处理相关的各种服务,就慢慢登上Google Cloud,今年TPU开发完成,并且Google Cloud已经可以直接调用TPU。数据相关的各种服务,也就理所当然的用于Cloud IoT Core了。

云端数据相关的服务,一般包括数据的存储及处理。刚才我们提到的都是数据处理技术,那么,IoT与Cloud又是怎么进行数据的上传与下载的呢?
Cloud IoT Core利用MQTT协议,用于数据传输,这样可以保证节点与云端可以进行双向的数据交互。这样数据从Android Things到云端的通路完全打通。
用Device Manager来管理各个节点的工作状态,管理员可以在控制去管理一个,或者一组节点的当前运行状态,比如说关机等操作。给予管理员完全管理权限。

Cloud IoT Core提供了相当简单的设备管理操作界面。

有了这些服务的介绍,我们就能够汇总Android Things连接IoT Core的完整流程了。
整个工作流程如下:

可以前往如下链接进行申请试用 https://cloud.google.com/iot-core/

Android Things 展台

听完一些Session,我还特意跑到Android Things的展台

展台展示了一些Demo的应用。
用Android Things检测天气状况。

工作人员现场仔细讲解:


最后这一张照片,讲述的是Android Things如何用TensorFlow去识别动物。玩法是这样的,预备了两张照片,一张是猫,一张是狗。如果把猫的照片对着摄像头,然后Android Things会识别出这个动物是猫。如果照片是狗,Android Things会识别出来是狗。

结语

看完Session的技术讲解, 再看平台展示的Demo。是不是觉得Android Things会如此亲切呢?对于物联网系统的每一个环节,Google都替我们贴心的考虑到了,开发应用是如此简单。不枉今年IO之行。

Android Things的大幕在缓缓拉开。更多的期待还在未来。

以上是关于Android Things在 #io17的主要内容,如果未能解决你的问题,请参考以下文章

Android Things:撸起袖子来创建第一个Things工程

透过ALSA这层迷雾剖析AliOS Things音频框架设计

在Android Things上扫描Wifi网络会返回空列表

如何在 Android Things 上设置设备所有者?

MediaPlayer无法在Android Things Raspberry Pi 3上运行

Android Things:树莓派游戏手柄 USB