React Native安卓真機調試,adb排坑總結

原創不易,請多多支持!對Java技術感興趣的童鞋請關注我,後續技術分享更精彩。 

React Native ,在linux下調試Android真機時,adb經常莫名其妙連接不上。作為小白,剛開始學RN,折騰了一段時間,總算把問題解決。記錄下來,供遇到類似煩惱的小夥伴參考。

環境

CentOS Linux release 7.3.1611 (Core)

手機連接檢測

確保手機和電腦連接同一網絡,不同wifi網絡可能導致adb連接失敗。檢測手機usb連接是否正常,多插拔幾次確認連接無誤。

打開手機中的開發人員選項,選擇手機系統中的設置 -- 系統 -- 開發人員選項

React Native安卓真機調試,adb排坑總結

如果沒有看到開發人員選項,可以通過 設置 -- 系統 -- 關於手機 -- 版本號 ,連續點擊多下開啟‘開發人員選項’。

'開發人員選項'開關開啟後,打開USB調試選項,開啟調試模式。如果android系統版本>=9.x時,請檢查 '選擇USB配置' 是否為'RNDIS(USB 網絡)'選項,默認可能是'僅充電'選項。我在這上面,因為這個選項未打開,折騰浪費了半天時間,小夥伴們一定要注意!!!

React Native安卓真機調試,adb排坑總結

React Native安卓真機調試,adb排坑總結

React Native安卓真機調試,adb排坑總結

通過以下命令檢測usb系統連接狀態,第一條即是我華為手機的usb連接信息。

lsusb
React Native安卓真機調試,adb排坑總結

adb連接檢測

執行adb命令,發現新出現device信息,即表示adb連接手機成功。

adb devices
React Native安卓真機調試,adb排坑總結

idVendor添加

如果adb連接不上。google提到修改/etc/udev/rules.d/51-android.rules的方法。即執行如下命令

echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/51-android-usb.rules

其中ATTR{idVendor}值修改為lsusb查看列表,對應的手機id信息。如我的手機信息為

Bus 001 Device 017: ID 12d1:108a Huawei Technologies Co., Ltd.

ID後的12d1即為ATTR{idVendor}的內容。

其實這樣做的目的,無非是為了使adb對創建的usb節點有訪問權限。只要使用root來啟動adb server就不存在此問題。

做法如下:在root終端上運行adb start-server ,如果已經有運行adb命令的則需要殺掉adb server,運行 ps -ef | grep adb ,找到adb server的pid,然後kill掉,如我機器上:

root 2795 0.0 0.0 30556 1244 pts/2 sl 09:00 0:03 adb fork-server server

執行kill 2795殺掉adb server。再adb start-server 啟動adb server。

通過以上辦法還無法識別android設備,可能你的android的VID未能加入adb中,你需要手動添加。添加的文件位置與你第一次啟動adb server有關,如你在root上啟動adb server,則其位置在/root/.android/adb_usb.ini,否則其在$HOME/.android/adb_usb.ini下,若$HOME為空,則在/tmp/.android/adb_usb.ini下。沒有文件或目錄請手動添加。

以下是一份adb_usb.ini的示例:

#for Huawei Honor 7X
0x12d1

其中#開頭表註釋,其它則表示android的VID,每個VID需要單獨一行。

測試

經過以上步驟仍未發現adb設備連接信息。多檢查下是否某步操作有所遺漏。多關閉打開幾次開發人與選項開關,重啟下手機試試。

如果一切正常,在React Native項目工程下執行命令,啟動安卓app。

react-native run-andoird

react native 項目編譯啟動日誌:

React Native安卓真機調試,adb排坑總結

手機app安裝提示:

React Native安卓真機調試,adb排坑總結

app手機端安裝成功,進入app頁面。

React Native安卓真機調試,adb排坑總結


分享到:


相關文章: