內容來源:2017 年 11 月 19 日,谷歌開發者專家王玉成在“2017谷歌開發者節北京站”進行《Android Things系統結構及展望》演講分享。IT 大咖說(微信id:itdakashuo)作為獨家視訊合作方,經主辦方、演講者審閱授權釋出。
閱讀字數:3266 | 9分鐘閱讀
嘉賓演講視訊及PPT回顧:suo.im/4s6Gko
摘要
Android Things的功能,整體框架,以及軟體開發除錯環境介紹。Google IoT Core介紹,以及現有的基於Android Things的專案概覽。
Android Things
Android的整個生態涉及到手機、手錶、電視、汽車以及物聯網。Android Things的系統相對其他幾部分更加精簡,適合與物體結合的場景,也就是物聯網方面。它的應用領域偏向於Camers、Gateways、HVAC Control、Smart Meters。
在物聯網裝置中安全性的是比較難解決的,例如手環、Camers這類安全性相對較高的裝置一旦被拿到最高許可權,大量私密資訊就會被暴露出去。考慮到這方面的問題Android Things在系統設計之初就在安全性上做了完善的配置。
Android Things開發工具
Android SDk是完全支援Android Things的,當然也能夠使用Android Studio作為開發工具。Play Services是google Services的一個元件,Firebase則是資料庫,Cloud platform整合了對物聯網的資料應用。可以看到Android Things借鑑了很多Android的工具,畢竟它是類似安卓的一套系統。
物聯網最基本的形態中類似於感測器、攝像頭這樣的裝置會對資料進行收集,然後進行粗加工傳送到雲端,最終處理分析這些資料。整個流程中資料會被存放到資料庫,但是收集到資料後進行深加工的這一環節,對目前的嵌入式裝置來說還有很多問題沒有解決。因此資料的深加工都被放在雲端解決,這也使得Firebase和Cloud platform在整個資料處理的過程中佔有比較重要的地位。
IoT
出於安全方面的考慮,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 Things for Developers
上圖是整個Android 的整個系統的框架,包括linux kernel、Libraries、Application Framework、Application。Application中大多是手機或者平板的應用和框架。
Application Framework這層中灰掉的這部分是Android Things去掉的部分框架,這些框架都涉及到了使用者互動方面的應用,而Android Things並不讚賞通過螢幕去進行使用者互動。因為物聯網的裝置只需要配置好最初的裝置環境就可以了,系統的執行過程中主要是進行資料收集以及傳遞的工作。雖然Android Things並不會過多的涉及使用者互動,但還是提供了一些互動渠道,比如音訊、keyboard、按鍵。
Different from Android
不同於Android的多應用多Activity,Android Things中去除使用者的互動之外,就只使用了一個應用並且只包含一個Activity。Android有著動態許可權的獲取,而Android Things的唯一一個應用是伴隨系統啟動的,不需要使用者去動態獲取許可權。由於Android Things需要驅動眾多的外設,所以它還有一個支援這些外設的庫。安卓的開發中Android Studio提供了虛擬機器的支援,但Android Things可是涉及到了眾多的硬體,因此在軟體層面上的虛擬機器支援是不必要的。
Support Google Service
上圖列出的是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中,通過介面就可以呼叫。
Simple Peripheral I/O
上圖是GPIO的一個簡單例子,主要涉及到方向、觸發方式以及回撥函式的註冊。
Cloud IoT Core Beta
Android Things收集資料進行深處理必須要經過Google Cloud,上圖就是Cloud IoT Core的整個架構。裝置將資料匯入到Cloud IoT Core後再利用Functions配置資料,接著Pub/Sub進行互動,互動完成後利用Bigtable、BigQuery、ML進行資料的處理,處理完成後將資料交給Datalab以及Date Studio,最後完成一些其他的處理。
Work Flow
上圖展示了使用者在Cloud IoT Core上的工作方式。整個流程中有著三個主要角色,第一個角色是裝置資料採集的過程,在物聯網中資料是低頻的傳輸,基於TCP協議之上,它主要通過MQTT/HTTP協議將資料傳輸到Cloud IoT Core。另一個角色是Provisioner,當產品開發完成後會交給Device Manager進行管理。Cloud IoT Core採集到的原始資料會被傳輸到Pub/Sub模組,也就是最後一個角色。
Android Things 社群連結
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