SlideShare a Scribd company logo
1 of 42
Android IO Workshop

      作者: Jarey
關於艾鍗

•   艾鍗學院為艾鍗科技所設立的一所專業的嵌入式系統軟
    韌體開發教育訓練中心,提供產業之研發人員所需的專
    業軟韌體訓練課程

•   與                  共同合作開設
    嵌入式處理器/機器人軟體開發工程師訓練課程
艾鍗學院的會員已累計40多家科技公司




           3
講師介紹-Jarey
捷銳行動科技有限公司/ 創辦人

學經歷:
    東華大學資訊工程碩士
    訊舟科技股份公司/SW Leader
                                      專長
    網通科技公司/PM 產品管理
                                       Java/C/C++程式語言
    Catcan機器人設計領域科技公司/Firmware工程師     Android 程式設計
    艾鍗學院專任講師(Android應用程式開發、Java)      人機介面設計
    經濟部工業局99年度數位內容產業發展躍進計畫            Linux程式設計
      -Android手機應用程式開發A班講師。
                                       單晶片程式設計(Atmel、
    經濟部工業局99年度數位內容產業發展躍進計畫            Arduino、Renesas)
      -Embedded Linux行動應用加值開發就業班講師。
                                       ARM9嵌入式系統
    經濟部工業局99年度數位內容產業發展躍進計畫
                                       網路程式設計
      -Android手機應用程式開發B班講師。
                                       網路通訊協定
    台中技術學院-Android應用程式開發應用 講師
                                       無線區域網路

 著作:
    Ajile程式設計開發手冊(java硬體化平台設計)
    Java + Android開發課程(艾鍗教材)
                                 4
Agenda

  Android USB週邊裝置應用發展
     Android USB 週邊商機
     Android VS IPhone USB Accessory 開發
  Android Open Accessory Development Kit
     ADK運作架構介紹
     Android Accessory Protocol
     ADK開發工具下載與Eclipse環境建置
  MicroChip ADK Lib 應用實作
     MicroChip Android ADK Lib架構介紹
     與ADK進行連線通訊流程
     全雙工資料處理設計(多執行緒)
     ADK的除錯方式



                                5
Android USB週邊裝置應用發展

  早期Android週邊裝置
   在Google放出ADK工具之前,SmartPhone的週邊產品不
    外乎為手機保護套、車用連接架、喇叭底座、外掛電池。
  Android ADK 開放性週邊開發套件
   2011年5月10 Google IO 2011大會發布Android3.1平版作
    業系統,同時間也正式放出了全新的Android USB週邊設
    備開發套件(Android Open Accessory Development Kit)

   Android 3.1與手機版Android 2.3.4之後便開始支援ADK開
    發套件,開發者可以自行設計相關的USB週邊裝置,這將
    為Android Market帶來許多與硬體產品相結合的APP,這
    也是個機會能讓你所開發的APP在Market眾多的APP中與
    眾不同產生明顯的差異化。

                          6
Android USB週邊裝置應用發展
  Android USB週邊設備商機
   Gartner研究機構指出,預期從
    2011年開始,iPad以及其它媒
    體平板將開始取代部分筆記型
    電腦產品,這將減緩家庭用PC
    的出貨量。

   平版與手機將逐侵蝕傳統PC與                  USB介面
    NB的市場。
                           遊戲週邊    健康醫療設備
   使用者漸漸的會開始期待所購
    買USB週邊設備,除了能在PC
    上運行之外,也能同時在平版         運動休閒設備   音樂控制介面
    電腦上運行。
                                   安全防護應用
                          工業控制介面
                                    USB KEY

                      7
Android USB週邊裝置應用發展

  Android USB週邊設備商機
   在Android多樣且開放性的平
    台優勢下,其產品的市佔率
    將不斷的攀升。

   目前支援ADK的手機與平版
    佔整體Android的比例不高,
    但隨著Android 4.0將手機與
    平版系統整合為一後,在不
    久的將來經過汰舊換新後,
    絕大部份的Android手機與平
    版都將支援ADK介面。


                    8
Android USB週邊裝置應用發展

  Android IO 2011應用Demo
   Android手機透過ADK連接跑步機…健身器材。




   Android 遊戲控制(http://youtu.be/GrE_JO5rXKA)




   Android機器人控制(http://youtu.be/jwvkJVUECrg)


                             9
Android USB週邊裝置應用發展

  艾鍗學院開發之相關應用
   Android平版透過ADK連接KTV系統




                   10
Android VS iPhone USB週邊開發

  Android
     開放H/W平台
     Open協定與SourceCode
     免審核機制
     免授權費
  iPhone
     需要取得Made for iPhone認證
     認證要求高 , 審核時程長
     申請成功後需要支付授權費
     申請成功才能拿到開發文件技術
     Apple擁有隨時終止你產品的權利

                          11
ADK運作架構介紹

 ADK於Android的API支援
    Android 3.1 平板電腦作業系統已內建 Android Open
     Accessory Development Kit ( ADK ) 的 Android Open
     Accessory APIs ,並具備USB Host mode 。
    Android 2.3.4 智慧型手機作業系統可以透過 Google APIs
     附加函式庫 (Google APIs add-on library ) 的方式運作。)
 USB Host and Accessory Mode



                                      ※USB Host Mode只在
                                      Android
                                       3.1以上版本支援




                               12
ADK運作架構介紹

 USB Accessory API(android.hardware.usb)
    Class          Description
    UsbManager     Allows you to enumerate and communicate with connected
                   USB accessories.
    UsbAccessory   Represents a USB accessory and contains methods to access its
                   identifying information.

 USB Host API(android.hardware.usb
  Class                  Description

                         Allows you to enumerate and communicate with connected USB devices.
  UsbManager
                         Represents a connected USB device and contains methods to access its identifying information,
  UsbDevice              interfaces, and endpoints.
                         Represents an interface of a USB device, which defines a set of functionality for the device. A device can
  UsbInterface           have one or more interfaces on which to communicate on.
                         Represents an interface endpoint, which is a communication channel for this interface. An interface can
  UsbEndpoint            have one or more endpoints, and usually has input and output endpoints for two-way communication
                         with the device.
                         Represents a connection to the device, which transfers data on endpoints. This class allows you to send
  UsbDeviceConnection    data back and forth sychronously or asynchronously.
                         Represents an asynchronous request to communicate with a device through a UsbDeviceConnection.
  UsbRequest
                         Defines USB constants that correspond to definitions in linux/usb/ch9.h of the Linux kernel.
  UsbConstants

                                                             13
ADK運作架構介紹

 Android USB 週邊連接架構
             Android 手機/平版




            MCU控制層 ADK
            Support




                 IO資料傳輸




                       14
Android Accessory Protocol
  Android Accessory Protocol
     任何Android USB Accessory皆必須實作Accessory Protocol,該
      Protocol為開放協定,其定義了裝置偵測(detects)與通訊連線初始化
      流程(包含mode切換機制)。


  Accessory Protocol通訊流程
     等待偵測裝置連線
     確認裝置支援Accessory mode
     如果該裝置支援USB Accessory mode,則建立兩者之間的通訊通道。

  ADK開發版運作於Host Mode
     由開發版供電給手機/平版
     手機端運作於Accessory Mode 透過Accessory API與開發版通訊
     開發版需偵測Android裝置的PID與VID,以確保連線的裝置為
      Google 手機/平版
     Google vendor ID:(0x18D1) Product ID: 0x2D00 or 0x2D01



                                     15
Android Accessory Protocol
  Android Accessory 初始化流程(USB H/W與手機內部溝通交握程序)
  1.   USB 線路之連接確認:當《 USB 週邊設備》與 《 Android 裝置》之間的
       USB 線路連接與裝置偵測無誤後,彼此才會開始進行溝通動作。
  2.   識別代碼之產生:在此過程中,《 Android 裝置》會先依製造商與設備型號
       等資料,去產生一個屬於自己的新 VID/PID 識別代碼。
  3.   設備模式 ( Accessory Mode ) 之支援確認:然後,《 USB 週邊設備》則需發
       送一個控制交易訊息 ( Control Transaction ) 給《 Android 裝置》,詢問它是
       否支援設備模式 ( Accessory Mode ) 。
  4.   應用程式之相容確認:一旦《 Android 裝置》向《 USB 週邊設備》確認支援
       設備模式 Accessory Mode ) 時,《 USB 週邊設備》會透過控制交易訊息傳
       送一連串的字串給《 Android 裝置》。這些字串是提供《 Android 裝置》去
       確認它的系統中是否有相容於該《 USB 週邊設備》的應用程式。
  5.   下載安裝相容應用程式:假若,它沒有找到合適的應用程式時,該訊息也會
       提供一個 URL 網址,以供《 Android 裝置》的用戶至網路下載安裝相容於該
       《 USB 週邊設備》的應用程式。(註:該 URL 網址可以是該應用程式在
       Android Market 之中的下載網址)
  6.   設備模式 ( Accessory Mode ) 開始運作:這個步驟完成後,《 USB 週邊設備》
       會再傳送一個控制交易訊息給《 Android 裝置》,以告知《 Android 裝置》
       可以進入設備模式 ( Accessory Mode )
                                16
Android Open Accessory Development Kit

   開發環境所需工具
      Java JDK 1.6以上
        http://www.oracle.com/technetwork/java/javase/downloads/
         index.html
      Eclipse IDE開發工具
        http://www.eclipse.org/
      Android 開發工具ADT
        http://developer.android.com/sdk/eclipse-adt.html
      Android SDK (2.3.4以上版本)
        http://developer.android.com/sdk/index.html
      Microchip pic24 Development kit for android
        http://www.microchip.com/stellent/idcplg?IdcService=SS_G
         ET_PAGE&nodeId=1406&dDocName=en553673
      Android 實體手機(2.3.4以上/平版3.1以上)
      ADK開發版H/W


                                                   17
Android開發環境建置-JDK6下載

  下載JDK環境
     http://www.oracle.com/technetwork/java/javase/downloads/inde
      x.html




為你把關每一道 學習品質                                                         18
Android開發環境建置-Eclipse 下載

  下載安裝Eclipse開發工具
   http://www.eclipse.org/downloads/




為你把關每一道 學習品質                            19
Android開發環境建置-安裝ADT

  安裝Android ADT開發環境




為你把關每一道 學習品質          20
Android開發環境建置-安裝ADT

  透過Eclipse plugin安裝工具下載ADT
   http://dl-ssl.google.com/android/eclipse/




為你把關每一道 學習品質                                    21
Android開發環境建置-下載SDK

  下載Android SDK(也可透過ADT自動下載)
   http://developer.android.com/intl/zh-TW/sdk/index.html




為你把關每一道 學習品質                                                 22
Android開發環境建置-設定SDK

  指定Android SDK所在路徑




為你把關每一道 學習品質          23
Android開發環境建置-更新SDK




為你把關每一道 學習品質          24
Android開發環境建置-更新SDK




為你把關每一道 學習品質          25
MicroChip ADK Lib 架構介紹
   MicroChip提供更高階包裝的LIB
    MicroChip提供一層更高階的warp類別,將複雜的
     USB 連線,斷線,初始化,資料快取,Thread管
     理.等等機制包裝起來,讓開發者可以更專注在資料
     封包的制定與UI的互動設計上。

    外包的類別分別為: USBAccessoryManager與
     USBAccessoryManagerMessage




                     26
MicroChip ADK Lib 架構介紹
      USBAccessoryManager 類別
           USB Accessory管理層,處理連線、斷線處理、資料的讀、寫
           支援Buffer快取從USB讀入的資料
           讀取部份使用單獨的work thread,可全雙工進行資料IO

                USBAccessoryManager

 高階函式庫                                      handler
available()        Buffer       Message
disable()
enable()        ReadThread
isConnected()
peek(byte[])                  Create                       USB
read(byte[])    Accessory                   InputStream
write(byte[])   連線管理                        OutputStream


                                       27
MicroChip ADK Lib 架構介紹
   USBAccessoryManagerMessage 類別
      提供Android Read Thread用來與UI Thread函式通訊用的封包
      資料透過Java的封裝特性被封裝在USBAccessoryManagerMessage
       中
      最終資料將被掛在 android.os.message物件中(object欄位)透過
       Handler傳送至UI Thread中處理。
      USBAccessoryManagerMessage所所定義的封裝資料為:
       public enum MessageType {
            READ,
            ERROR,
            CONNECTED,
            DISCONNECTED,
            READY
       };




                          28
與ADK進行連線通訊開發流程

 STEP1:建立新的Android專案
    SDK 目標版本需選擇在Level 10(含Google API版本)以上




                              29
與ADK進行連線通訊開發流程

 STEP 2:載入所需的USB Lib
        編輯AndroidManifest.xml,使用uses-library tag,輸入所需使用的usb函式庫

         <uses-library android:name="com.android.future.usb.accessory" />




                                             4
     1
                                                  5

                                                                            6
                                                      3

                       2


                                                 30
與ADK進行連線通訊開發流程

 STEP 3:撰寫USB Plug&Play 自動偵測USB裝置並開啟APP
    於AndroidManifest.xml中利用intent-filter,濾出當USB裝置插入時所要啟動的
     Activity頁面。
     <intent-filter>
     <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
     </intent-filter>
     <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
     android:resource="@xml/accessory_filter" />




    另外需要外掛一個meta-data欄位,指定過濾的條件需為一個xml檔:
     <resources>
     <usb-accessory manufacturer=“Ittraining Technology Inc." model="Basic Accessory
     Demo"version="1.0"/>
     </resources>

                                                   31
與ADK進行連線通訊開發流程

 STEP 4:滙入IT_ADK_LIB專案
    IT_ADK_LIB專案中包含了USBAccessoryManager與
     USBAccessoryManagerMessage 兩個高階函式類別, IT_ADK_LIB專
     案己經宣告為Library型式的專案,可供其他Android Project直接引用。




    在你的練習範例中宣告引入IT_ADK_LIB專案(專案上按右鍵點選內容)




                            32
與ADK進行連線通訊開發流程

  STEP 5:於Activity中撰寫Handler類別
   Handler, Message, Looper, MessageQueue 為Android設計在
     不同Thread/Process之間互相通訊與傳遞訊息的機制,為
     Android核心設計中相當重要的一環。
          private Handler handler = new Handler(){
                @Override
                public void handleMessage(Message msg) {
                      super.handleMessage(msg);
                }
          };

                        handleMessage                      handleMessage

message
                          主執行緒                                                      message
           Looper         UI Thread                        子執行緒            Looper

  MQ                                          Push                                   MQ
                                              Handler
                                                    33
與ADK進行連線通訊開發流程

 STEP 6:建構USBAccessoryManager物件
  建構式需帶入二個參數: Handler handler物件與int what
    其中what指的是當USBAccessoryManager讀取到來至ADK開發
    版的事件代碼,可供在handlerMessage函式中識別用。
 private final static int USBAccessoryWhat = 0;
 private USBAccessoryManager accessoryManager
 public void onCreate(Bundle savedInstanceState) {
 ….略
               accessoryManager = new USBAccessoryManager(handler, USBAccessoryWhat);
 ….略

 }




                                                 34
與ADK進行連線通訊開發流程

 STEP 6:依Activity生命週期啟動與關閉USBAccessoryManager
  於onResume()中啟動USBAccessoryManager
  於onPause()或onStop()函式關閉USBAccessoryManager
   public void onResume() {
      super.onResume();
       accessoryManager.enable(this);
    }
   public void onStop () {
      super.onPause();
      accessoryManager.disable(this);
   }




                                        35
與ADK進行連線通訊開發流程

 STEP 7:寫入資料至ADK開發版
  包裝message封包,並透過handler物件將message封包送往UI
    Thread的Message Queue中排程,排程時間到時會交由
    handlerMessage函式進行處理。
  Message物件可以透過obtain取得快取中先前用過的message來
    重複使用,可有效節省記憶體消耗。
    public final Message obtainMessage (int what, int arg1, int arg2, Object obj)


    透過Handler物件中的sendMessage將message推入
     MessageQueue
     Message msg=handler.obtainMessage(1,0,0,null);
     handler.sendMessage(msg);




                                          36
與ADK進行連線通訊開發流程

 STEP 8:覆寫Handler中的handlerMessage函式
  無論是從ADK開發版送上來的資料,或是準備要被寫入到ADK
    開發版的資料,最終都會被送到MessageQueue中排程被處理。
  系統的Looper物件會自動檢查MessageQueue中是否有資料需
    要處理,若有則會自動呼叫handlerMessage函式。
  public void handleMessage(Message msg) {
    switch(msg.what){
       case USBAccessoryWhat: //從ADK開發版讀到的資料,資料被封裝在msg.obj物件中
         switch(((USBAccessoryManagerMessage)msg.obj).type) {
            case READ:
               if(accessoryManager.isConnected() == false)
                  return;
                  break;
             case CONNECTED:
                  break;
             case READY:
                  setTitle("Ittraining Demo: Device connected."); break;
             case DISCONNECTED:
                  disconnectAccessory(); break;
           }
         break;
        default:
         break;
     }
  }
                                                             37
與ADK進行連線通訊開發流程

 STEP 9:ADK資料的讀、寫
    ADK資料的讀寫可以透過USBAccessoryManager中的read與write函式
     呼叫來完成處理。
    其中read資料並不是直接和ADK開發版要求資料,而是直接向系統中的
     Buffer取得資料(Manager中有實作Buffer快取)


     //回傳目前buffer中還有多少資料可以被讀取
     int available()
     //從buffer中讀取 array大小的資料,回傳實際讀取了多少資料
     int read(byte[] array)
     //從buffer中讀滿array的資料,回傳實際讀取了多少資料
     int peek(byte[] array)
     //從buffer中丟棄指定大小的資料
     void ignore(int num)




                          38
全雙工資料處理設計

  提升ADK資料讀、寫效率
         建立兩個執行緒,一個負責寫入資料,一個負責讀取資料。
         子執行緒本身不具有Looper與MQ,因必須先為子執行緒建立Looper與MQ物件。

                                                                 Activity
      USBAccessory                                           Activity
                                                          Activity
        Manager

                      readHandler          writeHandler
                     handleMessage        handleMessage


message
                      讀取                    寫入
                                                                       message
           Looper                                           Looper
                      執行緒                   執行緒
  MQ                                                                        MQ


                                     39
全雙工資料處理設計

    替子執行緒產生Looper與MQ                          public static final void prepare() {
                                               if (sThreadLocal.get() != null) {
                                                   throw new RuntimeException(
Class subThread implements Runnable{               "Only one Looper may be created
  public void run(){                                per thread");
                                                 }
    Looper.prepare();          框架原始碼
                                                 sThreadLocal.set(new Looper());
    workLooper = Looper.myLooper();           }
    h = new Handler(){
        public handlerMessage(Message msg){
            //處理message
        }
     };
                                            private Looper() {
    Looper.loop();             框架原始碼            mQueue = new MessageQueue();
                                                mRun = true;
  }                                             mThread = Thread.currentThread();
}                                           }

                                            40
全雙工資料處理設計

  如何於子執行緒中變更UI內容
     在Android中非UI Thread是不能直接去控制UI,一但違反此條件,系統
      將會造成應用強制結束。
     在Android子執行緒要進入UI Thread去變更UI內容,有以下的四種方法
• 透過掛Handler Push Message/Runnable於UI Thread 處理UI內容
• 透過Activity.runOnUIThread(),直接指定進入UI Thread內處理
• 透過View.Post(Runnable)介面處理
• 透過AsncTask類別協助處理,需1.5版後的Android才有支援。




                            41
ADK的除錯方式
 ADK Debug方式
    由於USB線被USB Accessory裝置給佔用,因此將無法使利用ADB透過
     USB線做Debug的連線。
    需改使用WiFi ADB連線,此功能需要root權限
 WiFi ADB
    可於market搜尋adb wifi 可以找到許多相關的軟體。
    或是先利用USB 連接電腦透過adb 輸入以下指令:
     adb shell
     setprop service.adb.tcp.port 8000
     stop adbd
     start adbd
    在透過adb connect指令進行連線
     //透過wifi進行adb連接
     adb connect 192.168.1.103:8000
     //讓手機進入監聽usb連線狀態
     adb usb




                                         42

More Related Content

Similar to Android ADK

Orientation Program
Orientation ProgramOrientation Program
Orientation ProgramLuo Korth
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海Shaoning Pan
 
04.layman android google handheld device application design
04.layman android   google handheld device application design04.layman android   google handheld device application design
04.layman android google handheld device application designgaquay086
 
51 cto下载 android应用程序开发宝典
51 cto下载 android应用程序开发宝典51 cto下载 android应用程序开发宝典
51 cto下载 android应用程序开发宝典sys520084
 
智能手機與平版電腦系統及開發平台概覽
智能手機與平版電腦系統及開發平台概覽智能手機與平版電腦系統及開發平台概覽
智能手機與平版電腦系統及開發平台概覽Amanda Lam
 
Android -汇博
Android -汇博Android -汇博
Android -汇博dlqingxi
 
20141212 html5 及微軟跨平台佈局 long
20141212 html5 及微軟跨平台佈局   long20141212 html5 及微軟跨平台佈局   long
20141212 html5 及微軟跨平台佈局 longMeng-Ru (Raymond) Tsai
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Gelis Wu
 
Introduction to open source platform
Introduction to open source  platformIntroduction to open source  platform
Introduction to open source platformHsien-Tang Lin
 
Apache cordova 開發環境建置
Apache cordova 開發環境建置Apache cordova 開發環境建置
Apache cordova 開發環境建置My own sweet home!
 
Android開發app
Android開發appAndroid開發app
Android開發app騰昱 魏
 
Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture lusecheng
 
程式人雜誌 -- 2013 年 2 月號
程式人雜誌 -- 2013 年 2 月號程式人雜誌 -- 2013 年 2 月號
程式人雜誌 -- 2013 年 2 月號鍾誠 陳鍾誠
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂imShining @DevCamp
 
Azure Functions
Azure FunctionsAzure Functions
Azure FunctionsDino Wang
 
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)Shanda innovation institute
 

Similar to Android ADK (20)

Android
AndroidAndroid
Android
 
Orientation Program
Orientation ProgramOrientation Program
Orientation Program
 
Android应用开发 - 沈大海
Android应用开发 - 沈大海Android应用开发 - 沈大海
Android应用开发 - 沈大海
 
04.layman android google handheld device application design
04.layman android   google handheld device application design04.layman android   google handheld device application design
04.layman android google handheld device application design
 
行動技術開發概論
行動技術開發概論行動技術開發概論
行動技術開發概論
 
Android JNI
Android JNIAndroid JNI
Android JNI
 
51 cto下载 android应用程序开发宝典
51 cto下载 android应用程序开发宝典51 cto下载 android应用程序开发宝典
51 cto下载 android应用程序开发宝典
 
智能手機與平版電腦系統及開發平台概覽
智能手機與平版電腦系統及開發平台概覽智能手機與平版電腦系統及開發平台概覽
智能手機與平版電腦系統及開發平台概覽
 
Android -汇博
Android -汇博Android -汇博
Android -汇博
 
20141212 html5 及微軟跨平台佈局 long
20141212 html5 及微軟跨平台佈局   long20141212 html5 及微軟跨平台佈局   long
20141212 html5 及微軟跨平台佈局 long
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
 
Introduction to open source platform
Introduction to open source  platformIntroduction to open source  platform
Introduction to open source platform
 
Apache cordova 開發環境建置
Apache cordova 開發環境建置Apache cordova 開發環境建置
Apache cordova 開發環境建置
 
Android開發app
Android開發appAndroid開發app
Android開發app
 
Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture Coscup2011: porting android to brand-new cpu architecture
Coscup2011: porting android to brand-new cpu architecture
 
程式人雜誌 -- 2013 年 2 月號
程式人雜誌 -- 2013 年 2 月號程式人雜誌 -- 2013 年 2 月號
程式人雜誌 -- 2013 年 2 月號
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂
 
Tech days2011
Tech days2011Tech days2011
Tech days2011
 
Azure Functions
Azure FunctionsAzure Functions
Azure Functions
 
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
[Flash开发者交流][2010.11.28]air android开发的一些心得(邱彦林)
 

More from 艾鍗科技

TinyML - 4 speech recognition
TinyML - 4 speech recognition TinyML - 4 speech recognition
TinyML - 4 speech recognition 艾鍗科技
 
Appendix 1 Goolge colab
Appendix 1 Goolge colabAppendix 1 Goolge colab
Appendix 1 Goolge colab艾鍗科技
 
Project-IOT於餐館系統的應用
Project-IOT於餐館系統的應用Project-IOT於餐館系統的應用
Project-IOT於餐館系統的應用艾鍗科技
 
02 IoT implementation
02 IoT implementation02 IoT implementation
02 IoT implementation艾鍗科技
 
Tiny ML for spark Fun Edge
Tiny ML for spark Fun EdgeTiny ML for spark Fun Edge
Tiny ML for spark Fun Edge艾鍗科技
 
2. 機器學習簡介
2. 機器學習簡介2. 機器學習簡介
2. 機器學習簡介艾鍗科技
 
5.MLP(Multi-Layer Perceptron)
5.MLP(Multi-Layer Perceptron) 5.MLP(Multi-Layer Perceptron)
5.MLP(Multi-Layer Perceptron) 艾鍗科技
 
心率血氧檢測與運動促進
心率血氧檢測與運動促進心率血氧檢測與運動促進
心率血氧檢測與運動促進艾鍗科技
 
利用音樂&情境燈幫助放鬆
利用音樂&情境燈幫助放鬆利用音樂&情境燈幫助放鬆
利用音樂&情境燈幫助放鬆艾鍗科技
 
IoT感測器驅動程式 在樹莓派上實作
IoT感測器驅動程式在樹莓派上實作IoT感測器驅動程式在樹莓派上實作
IoT感測器驅動程式 在樹莓派上實作艾鍗科技
 
無線聲控遙控車
無線聲控遙控車無線聲控遙控車
無線聲控遙控車艾鍗科技
 
最佳光源的研究和實作
最佳光源的研究和實作最佳光源的研究和實作
最佳光源的研究和實作 艾鍗科技
 
無線監控網路攝影機與控制自走車
無線監控網路攝影機與控制自走車無線監控網路攝影機與控制自走車
無線監控網路攝影機與控制自走車 艾鍗科技
 
Reinforcement Learning
Reinforcement LearningReinforcement Learning
Reinforcement Learning艾鍗科技
 
人臉辨識考勤系統
人臉辨識考勤系統人臉辨識考勤系統
人臉辨識考勤系統艾鍗科技
 
智慧家庭Smart Home
智慧家庭Smart Home智慧家庭Smart Home
智慧家庭Smart Home艾鍗科技
 

More from 艾鍗科技 (20)

TinyML - 4 speech recognition
TinyML - 4 speech recognition TinyML - 4 speech recognition
TinyML - 4 speech recognition
 
Appendix 1 Goolge colab
Appendix 1 Goolge colabAppendix 1 Goolge colab
Appendix 1 Goolge colab
 
Project-IOT於餐館系統的應用
Project-IOT於餐館系統的應用Project-IOT於餐館系統的應用
Project-IOT於餐館系統的應用
 
02 IoT implementation
02 IoT implementation02 IoT implementation
02 IoT implementation
 
Tiny ML for spark Fun Edge
Tiny ML for spark Fun EdgeTiny ML for spark Fun Edge
Tiny ML for spark Fun Edge
 
Openvino ncs2
Openvino ncs2Openvino ncs2
Openvino ncs2
 
Step motor
Step motorStep motor
Step motor
 
2. 機器學習簡介
2. 機器學習簡介2. 機器學習簡介
2. 機器學習簡介
 
5.MLP(Multi-Layer Perceptron)
5.MLP(Multi-Layer Perceptron) 5.MLP(Multi-Layer Perceptron)
5.MLP(Multi-Layer Perceptron)
 
3. data features
3. data features3. data features
3. data features
 
心率血氧檢測與運動促進
心率血氧檢測與運動促進心率血氧檢測與運動促進
心率血氧檢測與運動促進
 
利用音樂&情境燈幫助放鬆
利用音樂&情境燈幫助放鬆利用音樂&情境燈幫助放鬆
利用音樂&情境燈幫助放鬆
 
IoT感測器驅動程式 在樹莓派上實作
IoT感測器驅動程式在樹莓派上實作IoT感測器驅動程式在樹莓派上實作
IoT感測器驅動程式 在樹莓派上實作
 
無線聲控遙控車
無線聲控遙控車無線聲控遙控車
無線聲控遙控車
 
最佳光源的研究和實作
最佳光源的研究和實作最佳光源的研究和實作
最佳光源的研究和實作
 
無線監控網路攝影機與控制自走車
無線監控網路攝影機與控制自走車無線監控網路攝影機與控制自走車
無線監控網路攝影機與控制自走車
 
Reinforcement Learning
Reinforcement LearningReinforcement Learning
Reinforcement Learning
 
Linux Device Tree
Linux Device TreeLinux Device Tree
Linux Device Tree
 
人臉辨識考勤系統
人臉辨識考勤系統人臉辨識考勤系統
人臉辨識考勤系統
 
智慧家庭Smart Home
智慧家庭Smart Home智慧家庭Smart Home
智慧家庭Smart Home
 

Android ADK

  • 1. Android IO Workshop 作者: Jarey
  • 2. 關於艾鍗 • 艾鍗學院為艾鍗科技所設立的一所專業的嵌入式系統軟 韌體開發教育訓練中心,提供產業之研發人員所需的專 業軟韌體訓練課程 • 與 共同合作開設 嵌入式處理器/機器人軟體開發工程師訓練課程
  • 4. 講師介紹-Jarey 捷銳行動科技有限公司/ 創辦人 學經歷:  東華大學資訊工程碩士  訊舟科技股份公司/SW Leader 專長  網通科技公司/PM 產品管理 Java/C/C++程式語言  Catcan機器人設計領域科技公司/Firmware工程師 Android 程式設計  艾鍗學院專任講師(Android應用程式開發、Java) 人機介面設計  經濟部工業局99年度數位內容產業發展躍進計畫 Linux程式設計 -Android手機應用程式開發A班講師。 單晶片程式設計(Atmel、  經濟部工業局99年度數位內容產業發展躍進計畫 Arduino、Renesas) -Embedded Linux行動應用加值開發就業班講師。 ARM9嵌入式系統  經濟部工業局99年度數位內容產業發展躍進計畫 網路程式設計 -Android手機應用程式開發B班講師。 網路通訊協定  台中技術學院-Android應用程式開發應用 講師 無線區域網路 著作:  Ajile程式設計開發手冊(java硬體化平台設計)  Java + Android開發課程(艾鍗教材) 4
  • 5. Agenda Android USB週邊裝置應用發展  Android USB 週邊商機  Android VS IPhone USB Accessory 開發 Android Open Accessory Development Kit  ADK運作架構介紹  Android Accessory Protocol  ADK開發工具下載與Eclipse環境建置 MicroChip ADK Lib 應用實作  MicroChip Android ADK Lib架構介紹  與ADK進行連線通訊流程  全雙工資料處理設計(多執行緒)  ADK的除錯方式 5
  • 6. Android USB週邊裝置應用發展 早期Android週邊裝置  在Google放出ADK工具之前,SmartPhone的週邊產品不 外乎為手機保護套、車用連接架、喇叭底座、外掛電池。 Android ADK 開放性週邊開發套件  2011年5月10 Google IO 2011大會發布Android3.1平版作 業系統,同時間也正式放出了全新的Android USB週邊設 備開發套件(Android Open Accessory Development Kit)  Android 3.1與手機版Android 2.3.4之後便開始支援ADK開 發套件,開發者可以自行設計相關的USB週邊裝置,這將 為Android Market帶來許多與硬體產品相結合的APP,這 也是個機會能讓你所開發的APP在Market眾多的APP中與 眾不同產生明顯的差異化。 6
  • 7. Android USB週邊裝置應用發展 Android USB週邊設備商機  Gartner研究機構指出,預期從 2011年開始,iPad以及其它媒 體平板將開始取代部分筆記型 電腦產品,這將減緩家庭用PC 的出貨量。  平版與手機將逐侵蝕傳統PC與 USB介面 NB的市場。 遊戲週邊 健康醫療設備  使用者漸漸的會開始期待所購 買USB週邊設備,除了能在PC 上運行之外,也能同時在平版 運動休閒設備 音樂控制介面 電腦上運行。 安全防護應用 工業控制介面 USB KEY 7
  • 8. Android USB週邊裝置應用發展 Android USB週邊設備商機  在Android多樣且開放性的平 台優勢下,其產品的市佔率 將不斷的攀升。  目前支援ADK的手機與平版 佔整體Android的比例不高, 但隨著Android 4.0將手機與 平版系統整合為一後,在不 久的將來經過汰舊換新後, 絕大部份的Android手機與平 版都將支援ADK介面。 8
  • 9. Android USB週邊裝置應用發展 Android IO 2011應用Demo  Android手機透過ADK連接跑步機…健身器材。  Android 遊戲控制(http://youtu.be/GrE_JO5rXKA)  Android機器人控制(http://youtu.be/jwvkJVUECrg) 9
  • 10. Android USB週邊裝置應用發展 艾鍗學院開發之相關應用  Android平版透過ADK連接KTV系統 10
  • 11. Android VS iPhone USB週邊開發 Android  開放H/W平台  Open協定與SourceCode  免審核機制  免授權費 iPhone  需要取得Made for iPhone認證  認證要求高 , 審核時程長  申請成功後需要支付授權費  申請成功才能拿到開發文件技術  Apple擁有隨時終止你產品的權利 11
  • 12. ADK運作架構介紹 ADK於Android的API支援  Android 3.1 平板電腦作業系統已內建 Android Open Accessory Development Kit ( ADK ) 的 Android Open Accessory APIs ,並具備USB Host mode 。  Android 2.3.4 智慧型手機作業系統可以透過 Google APIs 附加函式庫 (Google APIs add-on library ) 的方式運作。) USB Host and Accessory Mode ※USB Host Mode只在 Android 3.1以上版本支援 12
  • 13. ADK運作架構介紹 USB Accessory API(android.hardware.usb) Class Description UsbManager Allows you to enumerate and communicate with connected USB accessories. UsbAccessory Represents a USB accessory and contains methods to access its identifying information. USB Host API(android.hardware.usb Class Description Allows you to enumerate and communicate with connected USB devices. UsbManager Represents a connected USB device and contains methods to access its identifying information, UsbDevice interfaces, and endpoints. Represents an interface of a USB device, which defines a set of functionality for the device. A device can UsbInterface have one or more interfaces on which to communicate on. Represents an interface endpoint, which is a communication channel for this interface. An interface can UsbEndpoint have one or more endpoints, and usually has input and output endpoints for two-way communication with the device. Represents a connection to the device, which transfers data on endpoints. This class allows you to send UsbDeviceConnection data back and forth sychronously or asynchronously. Represents an asynchronous request to communicate with a device through a UsbDeviceConnection. UsbRequest Defines USB constants that correspond to definitions in linux/usb/ch9.h of the Linux kernel. UsbConstants 13
  • 14. ADK運作架構介紹 Android USB 週邊連接架構 Android 手機/平版 MCU控制層 ADK Support IO資料傳輸 14
  • 15. Android Accessory Protocol Android Accessory Protocol  任何Android USB Accessory皆必須實作Accessory Protocol,該 Protocol為開放協定,其定義了裝置偵測(detects)與通訊連線初始化 流程(包含mode切換機制)。 Accessory Protocol通訊流程  等待偵測裝置連線  確認裝置支援Accessory mode  如果該裝置支援USB Accessory mode,則建立兩者之間的通訊通道。 ADK開發版運作於Host Mode  由開發版供電給手機/平版  手機端運作於Accessory Mode 透過Accessory API與開發版通訊  開發版需偵測Android裝置的PID與VID,以確保連線的裝置為 Google 手機/平版  Google vendor ID:(0x18D1) Product ID: 0x2D00 or 0x2D01 15
  • 16. Android Accessory Protocol Android Accessory 初始化流程(USB H/W與手機內部溝通交握程序) 1. USB 線路之連接確認:當《 USB 週邊設備》與 《 Android 裝置》之間的 USB 線路連接與裝置偵測無誤後,彼此才會開始進行溝通動作。 2. 識別代碼之產生:在此過程中,《 Android 裝置》會先依製造商與設備型號 等資料,去產生一個屬於自己的新 VID/PID 識別代碼。 3. 設備模式 ( Accessory Mode ) 之支援確認:然後,《 USB 週邊設備》則需發 送一個控制交易訊息 ( Control Transaction ) 給《 Android 裝置》,詢問它是 否支援設備模式 ( Accessory Mode ) 。 4. 應用程式之相容確認:一旦《 Android 裝置》向《 USB 週邊設備》確認支援 設備模式 Accessory Mode ) 時,《 USB 週邊設備》會透過控制交易訊息傳 送一連串的字串給《 Android 裝置》。這些字串是提供《 Android 裝置》去 確認它的系統中是否有相容於該《 USB 週邊設備》的應用程式。 5. 下載安裝相容應用程式:假若,它沒有找到合適的應用程式時,該訊息也會 提供一個 URL 網址,以供《 Android 裝置》的用戶至網路下載安裝相容於該 《 USB 週邊設備》的應用程式。(註:該 URL 網址可以是該應用程式在 Android Market 之中的下載網址) 6. 設備模式 ( Accessory Mode ) 開始運作:這個步驟完成後,《 USB 週邊設備》 會再傳送一個控制交易訊息給《 Android 裝置》,以告知《 Android 裝置》 可以進入設備模式 ( Accessory Mode ) 16
  • 17. Android Open Accessory Development Kit 開發環境所需工具  Java JDK 1.6以上  http://www.oracle.com/technetwork/java/javase/downloads/ index.html  Eclipse IDE開發工具  http://www.eclipse.org/  Android 開發工具ADT  http://developer.android.com/sdk/eclipse-adt.html  Android SDK (2.3.4以上版本)  http://developer.android.com/sdk/index.html  Microchip pic24 Development kit for android  http://www.microchip.com/stellent/idcplg?IdcService=SS_G ET_PAGE&nodeId=1406&dDocName=en553673  Android 實體手機(2.3.4以上/平版3.1以上)  ADK開發版H/W 17
  • 18. Android開發環境建置-JDK6下載 下載JDK環境  http://www.oracle.com/technetwork/java/javase/downloads/inde x.html 為你把關每一道 學習品質 18
  • 19. Android開發環境建置-Eclipse 下載 下載安裝Eclipse開發工具  http://www.eclipse.org/downloads/ 為你把關每一道 學習品質 19
  • 20. Android開發環境建置-安裝ADT 安裝Android ADT開發環境 為你把關每一道 學習品質 20
  • 21. Android開發環境建置-安裝ADT 透過Eclipse plugin安裝工具下載ADT  http://dl-ssl.google.com/android/eclipse/ 為你把關每一道 學習品質 21
  • 22. Android開發環境建置-下載SDK 下載Android SDK(也可透過ADT自動下載)  http://developer.android.com/intl/zh-TW/sdk/index.html 為你把關每一道 學習品質 22
  • 23. Android開發環境建置-設定SDK 指定Android SDK所在路徑 為你把關每一道 學習品質 23
  • 26. MicroChip ADK Lib 架構介紹 MicroChip提供更高階包裝的LIB  MicroChip提供一層更高階的warp類別,將複雜的 USB 連線,斷線,初始化,資料快取,Thread管 理.等等機制包裝起來,讓開發者可以更專注在資料 封包的制定與UI的互動設計上。  外包的類別分別為: USBAccessoryManager與 USBAccessoryManagerMessage 26
  • 27. MicroChip ADK Lib 架構介紹 USBAccessoryManager 類別  USB Accessory管理層,處理連線、斷線處理、資料的讀、寫  支援Buffer快取從USB讀入的資料  讀取部份使用單獨的work thread,可全雙工進行資料IO USBAccessoryManager 高階函式庫 handler available() Buffer Message disable() enable() ReadThread isConnected() peek(byte[]) Create USB read(byte[]) Accessory InputStream write(byte[]) 連線管理 OutputStream 27
  • 28. MicroChip ADK Lib 架構介紹 USBAccessoryManagerMessage 類別  提供Android Read Thread用來與UI Thread函式通訊用的封包  資料透過Java的封裝特性被封裝在USBAccessoryManagerMessage 中  最終資料將被掛在 android.os.message物件中(object欄位)透過 Handler傳送至UI Thread中處理。  USBAccessoryManagerMessage所所定義的封裝資料為: public enum MessageType { READ, ERROR, CONNECTED, DISCONNECTED, READY }; 28
  • 29. 與ADK進行連線通訊開發流程 STEP1:建立新的Android專案  SDK 目標版本需選擇在Level 10(含Google API版本)以上 29
  • 30. 與ADK進行連線通訊開發流程 STEP 2:載入所需的USB Lib  編輯AndroidManifest.xml,使用uses-library tag,輸入所需使用的usb函式庫 <uses-library android:name="com.android.future.usb.accessory" /> 4 1 5 6 3 2 30
  • 31. 與ADK進行連線通訊開發流程 STEP 3:撰寫USB Plug&Play 自動偵測USB裝置並開啟APP  於AndroidManifest.xml中利用intent-filter,濾出當USB裝置插入時所要啟動的 Activity頁面。 <intent-filter> <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /> </intent-filter> <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" android:resource="@xml/accessory_filter" />  另外需要外掛一個meta-data欄位,指定過濾的條件需為一個xml檔: <resources> <usb-accessory manufacturer=“Ittraining Technology Inc." model="Basic Accessory Demo"version="1.0"/> </resources> 31
  • 32. 與ADK進行連線通訊開發流程 STEP 4:滙入IT_ADK_LIB專案  IT_ADK_LIB專案中包含了USBAccessoryManager與 USBAccessoryManagerMessage 兩個高階函式類別, IT_ADK_LIB專 案己經宣告為Library型式的專案,可供其他Android Project直接引用。  在你的練習範例中宣告引入IT_ADK_LIB專案(專案上按右鍵點選內容) 32
  • 33. 與ADK進行連線通訊開發流程 STEP 5:於Activity中撰寫Handler類別  Handler, Message, Looper, MessageQueue 為Android設計在 不同Thread/Process之間互相通訊與傳遞訊息的機制,為 Android核心設計中相當重要的一環。 private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); } }; handleMessage handleMessage message 主執行緒 message Looper UI Thread 子執行緒 Looper MQ Push MQ Handler 33
  • 34. 與ADK進行連線通訊開發流程 STEP 6:建構USBAccessoryManager物件  建構式需帶入二個參數: Handler handler物件與int what 其中what指的是當USBAccessoryManager讀取到來至ADK開發 版的事件代碼,可供在handlerMessage函式中識別用。 private final static int USBAccessoryWhat = 0; private USBAccessoryManager accessoryManager public void onCreate(Bundle savedInstanceState) { ….略 accessoryManager = new USBAccessoryManager(handler, USBAccessoryWhat); ….略 } 34
  • 35. 與ADK進行連線通訊開發流程 STEP 6:依Activity生命週期啟動與關閉USBAccessoryManager  於onResume()中啟動USBAccessoryManager  於onPause()或onStop()函式關閉USBAccessoryManager public void onResume() { super.onResume(); accessoryManager.enable(this); } public void onStop () { super.onPause(); accessoryManager.disable(this); } 35
  • 36. 與ADK進行連線通訊開發流程 STEP 7:寫入資料至ADK開發版  包裝message封包,並透過handler物件將message封包送往UI Thread的Message Queue中排程,排程時間到時會交由 handlerMessage函式進行處理。  Message物件可以透過obtain取得快取中先前用過的message來 重複使用,可有效節省記憶體消耗。 public final Message obtainMessage (int what, int arg1, int arg2, Object obj)  透過Handler物件中的sendMessage將message推入 MessageQueue Message msg=handler.obtainMessage(1,0,0,null); handler.sendMessage(msg); 36
  • 37. 與ADK進行連線通訊開發流程 STEP 8:覆寫Handler中的handlerMessage函式  無論是從ADK開發版送上來的資料,或是準備要被寫入到ADK 開發版的資料,最終都會被送到MessageQueue中排程被處理。  系統的Looper物件會自動檢查MessageQueue中是否有資料需 要處理,若有則會自動呼叫handlerMessage函式。 public void handleMessage(Message msg) { switch(msg.what){ case USBAccessoryWhat: //從ADK開發版讀到的資料,資料被封裝在msg.obj物件中 switch(((USBAccessoryManagerMessage)msg.obj).type) { case READ: if(accessoryManager.isConnected() == false) return; break; case CONNECTED: break; case READY: setTitle("Ittraining Demo: Device connected."); break; case DISCONNECTED: disconnectAccessory(); break; } break; default: break; } } 37
  • 38. 與ADK進行連線通訊開發流程 STEP 9:ADK資料的讀、寫  ADK資料的讀寫可以透過USBAccessoryManager中的read與write函式 呼叫來完成處理。  其中read資料並不是直接和ADK開發版要求資料,而是直接向系統中的 Buffer取得資料(Manager中有實作Buffer快取) //回傳目前buffer中還有多少資料可以被讀取 int available() //從buffer中讀取 array大小的資料,回傳實際讀取了多少資料 int read(byte[] array) //從buffer中讀滿array的資料,回傳實際讀取了多少資料 int peek(byte[] array) //從buffer中丟棄指定大小的資料 void ignore(int num) 38
  • 39. 全雙工資料處理設計 提升ADK資料讀、寫效率  建立兩個執行緒,一個負責寫入資料,一個負責讀取資料。  子執行緒本身不具有Looper與MQ,因必須先為子執行緒建立Looper與MQ物件。 Activity USBAccessory Activity Activity Manager readHandler writeHandler handleMessage handleMessage message 讀取 寫入 message Looper Looper 執行緒 執行緒 MQ MQ 39
  • 40. 全雙工資料處理設計 替子執行緒產生Looper與MQ public static final void prepare() { if (sThreadLocal.get() != null) { throw new RuntimeException( Class subThread implements Runnable{ "Only one Looper may be created public void run(){ per thread"); } Looper.prepare(); 框架原始碼 sThreadLocal.set(new Looper()); workLooper = Looper.myLooper(); } h = new Handler(){ public handlerMessage(Message msg){ //處理message } }; private Looper() { Looper.loop(); 框架原始碼 mQueue = new MessageQueue(); mRun = true; } mThread = Thread.currentThread(); } } 40
  • 41. 全雙工資料處理設計 如何於子執行緒中變更UI內容  在Android中非UI Thread是不能直接去控制UI,一但違反此條件,系統 將會造成應用強制結束。  在Android子執行緒要進入UI Thread去變更UI內容,有以下的四種方法 • 透過掛Handler Push Message/Runnable於UI Thread 處理UI內容 • 透過Activity.runOnUIThread(),直接指定進入UI Thread內處理 • 透過View.Post(Runnable)介面處理 • 透過AsncTask類別協助處理,需1.5版後的Android才有支援。 41
  • 42. ADK的除錯方式 ADK Debug方式  由於USB線被USB Accessory裝置給佔用,因此將無法使利用ADB透過 USB線做Debug的連線。  需改使用WiFi ADB連線,此功能需要root權限 WiFi ADB  可於market搜尋adb wifi 可以找到許多相關的軟體。  或是先利用USB 連接電腦透過adb 輸入以下指令: adb shell setprop service.adb.tcp.port 8000 stop adbd start adbd  在透過adb connect指令進行連線 //透過wifi進行adb連接 adb connect 192.168.1.103:8000 //讓手機進入監聽usb連線狀態 adb usb 42