首先介绍一下 Google 基于 Android 的庞大的生态系统,有支持智能手机和平板电脑的 Android OS,有支持可穿戴设备的 Android Wear,如智能手表;有支持笔记本和台式机的 Chrome OS;有为机顶盒和电视机服务的 Android TV 系统,而现 Android 家族又添加了新成员 Android Things 。那么 Andriod Things 是什么 呢?
2016年12月,Google 第一次对外公布了Android Things 的预览版本。Android Things 是 Google 针对物联网(IoT,Internet of Things)和智能硬件推出的一款操作系统。从名字可知这是Android 系统的一个子集,对Android 开发人员来说绝对是个好消息。谷歌的理念是通过 Android Things 让 Android 开发者与公司能够以他们过去的开发方式继续开发物联网硬件设备。它可以运行在有线扬声器、智能控温器、安全摄像头、路由器等设备上。但Android Things 系统的定位是集成度更高的智能设备,它让智能设备自己处理任务而非全让服务器处理,所以能适应更复杂的任务。
Android Things 的前世
Android Things 这款操作系统并非凭空出现,它是 Google 开发的物联网操作系统 Brillo 改进之后的一个操作系统。尽管 Brillo 的核心是 Android 系统,但是把 C/C++ 作为主要开发环境,其开发和部署都不同于常规的Android 开发。Android Things 则继承 Android 强大和易用的特点,可以依靠现有的 Android 生态资源,包括 Android Studio( 下文简称 AS )、Android SDK 等,且开发周期同 Android App 一样。在安全方面,Android Things 将会利用 Android OS 定期的安全更新来保障自身的安全性。
Android Things 天生支持物联网通讯协议 Weave。Weave 协议同 Brillo 在2015年的 Google I/O 大会上一同推出, Weave 是一个框架的范畴,因为其不依赖底层的通信协议,可以运行在任何常见的物联网通信协议之上,如 WiFi 、Zigbee等。
Android Things 优点
The ease and power of Android
- Android Things 可以依靠现有的生态资源,如开发工具、Android SDK 和庞大的开发者社区等
- Android Things 将为物联网设备提供新的APIs,如低电平的I/O接口和为通用组件提供了库支持,如温度显示器、显示控制器等
- 利用 Android OS 定期的更新机制保证其自身的安全性
Rapid prototypes to real products
- 一站式的硬件解决方案:Google认证的开发板上有系统芯片、RAM、无线模块等使得开发人员能够快速上手
- 低门槛:开发者开发应用时可以快速的构建产品原型,而不用考虑内核、固件和开发者本身
- 规模化产品开发:Android Things 支持的开发板已经是商业级别的,你可以在开发板上根据需求制作自己的产品
The power of Google at your fingertips
- 支持广泛的 Google 服务,如 Google Play services 和 Weave 协议
- Google 提供镜像、更新和补丁等,使得开发者能够把精力集中在创造更加优秀的产品
- 支持通过 OTA(On The Air,无线下载)推送谷歌提供的操作系统更新和应用更新
硬件平台
既然是一款操作系统,怎么能少的了硬件呢。目前 Android Things 预览版的操作系统已经可兼容 Intel Edison、NXP Pico 以及 Raspberry Pi 3 等开发板。对于新手学习的话用树莓派就够了,一个是因为树莓派社区用户量多,网上有大量的教程和例子,另一个是因为它价格便宜啊。
Intel® Edison Intel® Joule™ NXP i.MX6ULNXP i.MX7D Raspberry Pi 3
Android Things 框架
Android Things 架构从 Android Things 的系统架构来看,在 Framework 层 相较于 Android 系统添加了 Things Support Library 的支持。也就是说 Android Things 通过添加支持库的方式添加了对智能设备的支持。新的Android 框架层 API 为类似于传感器、显示控制器等通用组件提供了低电平的I/O和开发库。
Android Things 系统镜像
各个开发板的系统镜像均可以点击这里下载,下面是各个开发板烧镜像教程。
- Intel Edison 烧镜像教程:Intel® Edison
- Intel Joule 烧镜像教程:Intel® Joule™
- NXP i.MX6UL 烧镜像教程:NXP i.MX6UL
- NXP i.MX7D 烧镜像教程:NXP i.MX7D
- Raspberry Pi 3 烧镜像教程:Raspberry Pi 3
WiFi 连网(树莓派 3 为例)
有线连网很简单,只需要给开发板供电并插入网线就可以了。树莓派 3 支持 HDMI 数据接口,可通过 HDMI 线连接显示器,如果连网成功的话,显示器上会显示该开发板的 IP 地址。 WiFi连网 配置操作如下:
- 先有线连网,并记录下开发版的 IP 地址(不要拔掉网线)
- 假设开发板的 IP 地址是 192.117.0.4,我们可通过 adb 连接此 IP 地址 ,在命令行输入
$ adb connect 192.117.0.4
- 如果连接成功,则会显示(ip-address即为你的网络地址):
connected to <ip-address>:5555
- adb 连接成功以后,便可以真正配置 WiFi了,其中 Network_SSID 代表要连接到 WiFi 网络的名称,Network_Passcode 代表该网络的密码,如果网络不需要密码的话可以移除 passphrase 这一行
$ am startservice \
-n com.google.wifisetup/.WifiSetupService \
-a WifiSetupService.Connect \
-e ssid <Network_SSID> \
-e passphrase <Network_Passcode>
- 通过 logcat 测试当前网络是否连接成功,
$ logcat -d | grep Wifi
...
V WifiWatcher: Network state changed to CONNECTED
V WifiWatcher: SSID changed: ...
I WifiConfigurator: Successfully connected to ...
- 测试能否访问远程的 IP 地址:
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=6.67 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=55.5 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=57 time=23.0 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=57 time=245 ms
测试系统时间是否正确,需要注意的是时间错误可能会引起 SSL 错误,当时间错误时需要重启设备让其自动获取时间(连网状态)。
$ date
应用开发
Android Things 希望应用程序在 Manifest 文件中提供一个 "home activity" 作为系统启动时自动加载的一个主入口。 这个 Activity 必须包含一个包含 CATEGORY_DEFAULT和 IOT_LAUNCHER 的 Intent Filter 。
为了便于开发,这个 Activity 应包含CATEGORY_LAUNCHER Intent Filter,以便 AS 可以在部署或调试时将其作为默认 Activity 加载。
<application
android:label="@string/app_name">
<activity android:name=".HomeActivity">
<!-- Launch activity as default from Android Studio -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<!-- Launch activity automatically on boot -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.IOT_LAUNCHER"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
权限申请
需要注意的是 Android Things 并不支持在运行时申请权限,因为嵌入式设备不能保证有一个 UI 来接受运行时的对话框,所以所有权限都应该在 manifest 文件中声明。
通知
Android Things 硬件设备没有系统范围的状态栏和窗口阴影,不支持通知,所以应当避免在应用中调用NotificationManager APIs。
参考文献
https://developer.android.google.cn/things/index.html
http://blog.csdn.net/wfing/article/details/56026194
网友评论