Android things 開發需要注意的一些

一、 android things 簡介:

2016年12月,谷歌第一次對外公佈了物聯網操作系統Android Things的開發者預覽版本。新版操作系統將能夠支持一系列物聯網設備的計算平臺。Android Things是安卓系統的一個分支版本,類似於面向智能手錶和穿戴設備推出的Android Wear等。新版操作系統將能夠支持一系列物聯網設備的計算平臺,其中包括英特爾公司的袖珍電腦“愛迪生”,NXP公司的Pico平臺,以及全世界最小的板卡式電腦“樹莓派3”。 一句話說,Android Things就是讓開發者可以使用Android開發工具開發嵌入式設備。

1.1 Android Things的特性:
1.1.1 單一自啓動APP,通常設備會只運行單一的程序,即開發者的APP會自動啓動,系統APP不會呈現出來。
1.1.2 顯示是可選的,設備可以沒有屏幕,通過按鈕、觸摸、LED燈、語音或其他形式與用戶交互。
1.1.3 提供了通過I/O驅動外設的接口,讓開發者可以與傳感器和執行器進行通訊交互,支持GPIO、PWM、I2C、SPI和UART。
1.1.4 用戶驅動API,用戶驅動繼承Android Framework Services,允許APP將硬件事件注入到Framework中,使得其他APP可以使用標準的Android API訪問。
1.1.5 物聯網雲,通過Google物聯網雲平臺,開發者可以方便且安全的連接、管理數百萬計遍佈全球的設備,並從中獲取數據。Google物聯網雲平臺和一些其他的Google服務,提供了包括數據採集、處理分析和可視化物聯網數據的完整解決方案。
1.2 Android Things的優勢:
1.2.1 更統一的開發框架和接口
傳統的單片機開發智能硬件的方式,開發工具、開發接口多而雜,不同的單片機廠商甚至型號,都有特定的開發工具,學習成本高,不統一,程序的可移植性差、可管理性差。Android Things提供更完善的開發框架,更方便好用的開發工具(而且是免費的)。
1.2.2 更適合Android開發者進行智能設備的創新
智能硬件通常都要實現與服務器交互、與手機交互,這些領域都是Android開發者熟悉的領域,通過Android Things開發智能設備,可以將Android開發者在移動開發方面的經驗更深入的體現在智能設備開發中。傳統的硬件、單片機開發者,對移動開發不熟悉,自然會在智能設備創新中落後於對移動開發瞭如指掌的Android開發者。
1.2.3 更先進的基礎框架
Android Things相較於傳統的設備平臺,就如同Android手機與Nokia功能機的區別。尤其在有觸摸屏人機交互的設備中,Android的優勢明顯,Android對UI線程的優先和保障機制,使得傳統設備人機界面操作卡頓的問題可以很好解決。Android基於Java的面向對象開發,也使得程序更容易封裝和管理。衆多的Android開源資源,也可以方便的應用到Android Things中來。我們開發的Android工業設備智能操作終端,在應用中給用戶提供了更好的操作體驗,受到了用戶的廣泛好評。
1.2.4 更安全的物聯網雲
傳統的物聯網方案,由於設備端、服務端往往由不同的開發團隊完成,設備端開發往往還停留在比較古老的開發階段,對一些新的安全物聯網協議瞭解較少,使得很多物聯網設備,還在採用TCP協議明碼傳輸數據,很容易被截獲和篡改。而有信息安全概念和經驗的服務端開發者,由於不瞭解硬件開發也無能爲力。新聞報道過的一些智能攝像頭被入侵的案例,很多與這方面有關。而Android Things徹底改變了這種狀況,手機APP與服務端通訊安全方面的經驗,Android開發者可以直接應用在設備開發中。很多新的物聯網協議,如MQTT,都有Android的客戶端實現可以方便使用。
1.2.5 更豐富的雲服務資源
使用Android Things,有豐富的雲服務資源可以使用,可以基於TensorFlow實現人工智能(如圖像識別),可以通過Google Assistant獲得智能服務。國內訪問Google服務目前還有一些問題,不過想一些辦法解決。同時,阿里、騰訊也都有一些智能服務(如圖像識別、人臉識別等)通過雲提供,使用Android Things也可以方便集成。
1.2.6 更低的入門門檻
傳統的智能硬件開發,通常需要購買昂貴的開發套件,而Android Things只需要幾百塊錢買個開發套件接上顯示器或電視機就可以玩起來。如果你手上有樹莓派3,下載最新鏡像燒錄就可以玩了。
1.3 Android Things的劣勢:
1.3.1 成本
對於低成本的智能小設備,Android Things可能不適合,一個能流暢運行Android Things的硬件環境,成本也要200+。
1.3.2 硬件控制實時性
通過Android層對硬件進行控制,實時性肯定不及運行在單片機中的主程序進程,所以直接用Android Things做一些對傳感器高實時的掃描輪詢,或是對電機進行伺服控制,這不是Android Things的優勢。
1.3.3 已有熟悉的硬件開發平臺
如果開發者已經有自己熟悉的硬件開發平臺,有單片機開發經驗,但對Android開發並不熟悉,使用Android Things就有些得不償失

二、樹莓派3簡介:

樹莓派是世界上最流行的單板計算機,3 Model B是最新的版本,我們後面就使用它給大家介紹Android Things。它提供瞭如下配置:
樹莓派

1.一個雙核64位ARM Cortext-A53 1.2GHz CPU(512M的內存,在背面);
2.400 MHz GPU;
3.電源接口;
4.HDMI和DSI視頻接口;
5.音頻接口;
6.有線、無線網絡和藍牙4.1模塊;
7.4個USB 2.0接口;
8.40-針GPIO連接器用於連接外設;
9.SD卡存儲(在側邊);

三、 用樹莓派開發android things:
:
3.1 連接系統:
連接好樹莓派開發板,啓動Android Things系統,並在開發電腦中使用adb connect命令連接到開發板(這樣你就可以在構建運行的時候選擇樹莓派開發板進行安裝了 );
連接ip

3.2使用advanced ip scanner 查看所連接的樹莓派的ip
查看ip

如圖:製造商爲Raspberry Pi Foundation 對應的IP 即爲網絡內連接樹莓派開發版。

3.3 連接出現錯誤
如果在連接時出現以下錯誤
連接出錯
一般出現這種情況都是因爲其他其他程序佔用了5037端口(比如豌豆莢,刷機精靈等),
方法1:
通過以下命令可以找出哪個進程佔用了5037端口

netstat -ano | findstr "5037"
 TCP    127.0.0.1:5037         127.0.0.1:60478        ESTABLISHED     6312
 TCP    127.0.0.1:5037         127.0.0.1:60479        ESTABLISHED     6312
 TCP    127.0.0.1:5037         127.0.0.1:60480        ESTABLISHED     6312
 TCP    127.0.0.1:5037         127.0.0.1:60481        ESTABLISHED     6312
 TCP    127.0.0.1:5037         127.0.0.1:60482        ESTABLISHED     6312

我這邊找到的進程號是6312, 然後我們在任務管理器裏找到這個進程
端口對應進程
如果這個進程不是adb, 結束它,再重啓adb就會成功了。
方法2:
如果使用方法一說的可能是5037端口被佔用,殺進程的方法不行,因爲查看Windows任務管理器中沒有發現5037端口被佔用

【解決方案一:】
1.輸入命令:adb nodaemon server,則dos頁面上顯示靜止,表示此命令正在執行
2.再打開一個新的dos命令行窗口cmd
3.輸入adb devices,成功顯示目前連接的設備
【解決方案二:】
1.請解壓ADB包裏面的所有文件,複製到C:\Windows\SysWOW64目錄下
2.輸入adb devices,成功顯示目前連接的設備
備註:貌似這個方法是針對WIN7 64位用戶,這個方法整完以後,解決方案一就失效啦

3.4 編譯gradle文件配置要求:

dependencies {
    //添加依賴
    provided 'com.google.android.things:androidthings:1.0'    
}
 **android things 要求SDK Tools爲24或者更高版本;
 Android SDK爲7.0(API 24)或者更高版本;**
compileSdkVersion 25
    buildToolsVersion  "25.0.2"
    defaultConfig {
        applicationId "com.example.androidthings.simpleui"
        minSdkVersion 25
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }

3.5 . android things 沒有像手機那樣的launcher ,所以app要設置開機自啓動

        <activity android:name=".SimpleUiActivity">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

           <!--在系統啓動的時候自動啓動app-->
            <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>

以上就是需要注意的,其他的就跟普通的android app一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章