內容來源:2017 年 11 月 19 日,谷歌開發者專家王玉成在「2017谷歌開發者節北京站」進行《Android Things系統結構及展望》演講分享。IT 大咖說(微信id:itdakashuo)做爲獨家視頻合做方,經主辦方、演講者審閱受權發佈。
html
閱讀字數:3266 | 9分鐘閱讀linux
嘉賓演講視頻及PPT回顧:suo.im/4s6Gko
android
Android Things的功能,總體框架,以及軟件開發調試環境介紹。Google IoT Core介紹,以及現有的基於Android Things的項目概覽。數據庫
Android的整個生態涉及到手機、手錶、電視、汽車以及物聯網。Android Things的系統相對其餘幾部分更加精簡,適合與物體結合的場景,也就是物聯網方面。它的應用領域偏向於Camers、Gateways、HVAC Control、Smart Meters。安全
在物聯網設備中安全性的是比較難解決的,例如手環、Camers這類安全性相對較高的設備一旦被拿到最高權限,大量私密信息就會被暴露出去。考慮到這方面的問題Android Things在系統設計之初就在安全性上作了完善的配置。服務器
Android SDk是徹底支持Android Things的,固然也可以使用Android Studio做爲開發工具。Play Services是google Services的一個組件,Firebase則是數據庫,Cloud platform集成了對物聯網的數據應用。能夠看到Android Things借鑑了不少Android的工具,畢竟它是相似安卓的一套系統。微信
物聯網最基本的形態中相似於傳感器、攝像頭這樣的設備會對數據進行收集,而後進行粗加工傳送到雲端,最終處理分析這些數據。整個流程中數據會被存放到數據庫,可是收集到數據後進行深加工的這一環節,對目前的嵌入式設備來講還有不少問題沒有解決。所以數據的深加工都被放在雲端解決,這也使得Firebase和Cloud platform在整個數據處理的過程當中佔有比較重要的地位。架構
出於安全方面的考慮,Android Things的操做系統核心都是由谷歌直接管理,將開發者的權限限制在小範圍內。Google提供了IoT Developer Console進行雲應用上傳以及對設備的下發。框架
Automatic Security Update是自動安全升級,它在Developer Console中進行推送,一旦有新的Android Things鏡像或者須要從Android Things鏡像中升級應用都是經過Google服務器自動得到推送升級。Signed Images和Verifled Boot涉及到了嵌入式開發的領域。函數
通常的簡單嵌入式開發引導流程都是先從Bootloader到Linux Kernel,再進入到,以後纔是其餘應用的啓動過程。從整個系統的安全性來看,是能夠在Bootloader這部分夾雜一些代碼去得到權限的。因而Google 要求Signed Images和Verifled Boot這兩部分須要OEM廠商和本身進行認證,來保證這部分二進制鏡像的可靠性。
產品的開發中,須要在CPU芯片的模塊板上畫開發板,進行硬件方面的初期設計。完成後就進入到應用的開發時期,來讓開發者進行開發。
上圖是整個Android 的整個系統的框架,包括linux kernel、Libraries、Application Framework、Application。Application中大可能是手機或者平板的應用和框架。
Application Framework這層中灰掉的這部分是Android Things去掉的部分框架,這些框架都涉及到了用戶交互方面的應用,而Android Things並不讚揚經過屏幕去進行用戶交互。由於物聯網的設備只須要配置好最初的設備環境就能夠了,系統的運行過程當中主要是進行數據收集以及傳遞的工做。雖然Android Things並不會過多的涉及用戶交互,但仍是提供了一些交互渠道,好比音頻、keyboard、按鍵。
不一樣於Android的多應用多Activity,Android Things中去除用戶的交互以外,就只使用了一個應用而且只包含一個Activity。Android有着動態權限的獲取,而Android Things的惟一一個應用是伴隨系統啓動的,不須要用戶去動態獲取權限。因爲Android Things須要驅動衆多的外設,因此它還有一個支持這些外設的庫。安卓的開發中Android Studio提供了虛擬機的支持,但Android Things但是涉及到了衆多的硬件,所以在軟件層面上的虛擬機支持是沒必要要的。
上圖列出的是Android Things的API支持狀況,主要集中在數據、地圖、定位這類的服務。在數據相關的服務中關於用戶交互的部分也被去除了。Android Things的Cloud部分會生成各類服務API的key,而後在應用中加入key。這樣就解決了用戶態的認證缺失的狀況下,依然能判斷當前設備是否爲Android Things設備的問題。
Android Things提供了幾大類的IO,外設的IO包括GPIO,PWM、I2C、SPI、UART、Native PIO。GPIO 能夠用於傳感器的控制,PWM 用於對電機或聲音的控制。I2C、SPI、UART這三部分涵蓋了低中高三種總線,在目前全部的傳感器模塊中,若是須要鏈接板子都是要用到這三種總線的。
在用戶態這方面則抽象出了相似Android的輸入、傳感器、GPS、Audio的部分。還覆蓋了Peripheral I/O的一些設備,這部分的抽象被放在了Android Things Libraries中,經過接口就能夠調用。
上圖是GPIO的一個簡單例子,主要涉及到方向、觸發方式以及回調函數的註冊。
Android Things收集數據進行深處理必需要通過Google Cloud,上圖就是Cloud IoT Core的整個架構。設備將數據導入到Cloud IoT Core後再利用Functions配置數據,接着Pub/Sub進行交互,交互完成後利用Bigtable、BigQuery、ML進行數據的處理,處理完成後將數據交給Datalab以及Date Studio,最後完成一些其餘的處理。
上圖展現了用戶在Cloud IoT Core上的工做方式。整個流程中有着三個主要角色,第一個角色是設備數據採集的過程,在物聯網中數據是低頻的傳輸,基於TCP協議之上,它主要經過MQTT/HTTP協議將數據傳輸到Cloud IoT Core。另外一個角色是Provisioner,當產品開發完成後會交給Device Manager進行管理。Cloud IoT Core採集到的原始數據會被傳輸到Pub/Sub模塊,也就是最後一個角色。
Google’s IoT Developers Community:https://g.co/IoTdev
Google’s IoT Solutions:https://Iot.google.com
Android Things SDK:
https://developer.android.google.cn/things/index.html