簡體   English   中英

通過USB連接到VirtualBox主機的調試設備,從VM內部的Android-Studio

[英]Debug device connected by USB to VirtualBox's host, from Android-Studio inside VM

我正在嘗試讓 mono for android(aka monodroid)在 virtualbox 上的 windows 7 虛擬機中工作,但我的手機的 adb 連接有問題。 當我運行“adb devices”以列出存在的設備時,它顯示沒有問題,但是當我嘗試運行“adb install”、logcat 或 push 時它掛起。 目前 virtualbox 中存在一個適用於此的錯誤,但我希望比我更有知識的人能有一個解決方法。

https://www.virtualbox.org/ticket/6620

如果 Xamarin 發布了他們產品的 linux 端口,或者如果我熟悉 Java,那么這些都不是問題,但我想這些是稍微不同的問題。

Brian,您可能考慮的一種解決方法是讓您的 VM 主機也成為 ADB 主機。 然后您可以通過 TCP/IP 將您的 VM 客戶端連接到它。 這是該設置的總體思路:

  1. 在主機上安裝 Android SDK。 您應該只需要包含adb的平台工具包。
  2. 不要讓您的 VM 客戶端擁有 Android 設備的所有權,因此禁用您擁有的任何 VirtualBox USB 過濾規則,然后分離並重新連接設備也不會受到傷害。
  3. 從您的 VM 客戶端,運行adb kill-server 確定它是一個tskill adb 如果您有任何正在運行的 Eclipse 實例,您需要先關閉它們,因為它實際上會在后台啟動adb 不要跳過這一步。
  4. 從主機執行adb devices 如果一切順利(應該如此),您將看到您的設備已列出。 它應該看起來像這樣(請注意端口號並抱歉修改):

     * daemon not running. starting it now on port 5037 * * daemon started successfully * List of devices attached 015d2994ed200409 device

此時,您的主機應該有一個運行在 5037 端口的 ADB 服務器。您可以通過運行telnet 10.0.2.2 5037從 VM 客戶端檢查這一點,其中10.0.2.2是 VirtualBox 主機的默認 IP, 5037是默認的 ADB 端口上面提到。

  1. 現在您必須將端口從您的主機轉發到您的 VM 客戶端,或者以其他方式將 ADB 直接連接到您的主機 IP:port。 如果你像我一樣,你會發現 ADBHOST 和 ANDROID_ADB_SERVER_PORT 變量的文檔很差並且很容易搞砸。 出於這個原因,請考慮從 VM 客戶端通過ssh (可能通過 Cygwin)進行簡單的端口轉發:

     autossh -nNL5037:localhost:5037 -oExitOnForwardFailure=yes 10.0.2.2
  2. 最后,從您的 VM 客戶端運行adb devices 如果您看到“守護進程未運行”,則表示您的端口轉發被搞砸了。 否則,您應該會看到您的設備並能夠整天登錄。 值得注意的一點是,您的 VM 客戶端上不會運行adb守護程序,當然,除非您實際使用調試橋。

我使用了一種類似的機制來調試通過網絡連接到遠程機器的設備,並且運行良好。

不確定自發布問題以來 VirtualBox 中發生了什么變化,但從 VirtualBox 菜單Devices -> USB -> DeviceName 中選擇 USB 設備可以無縫工作。 我正在使用 VirtualBox 5.1.2 r108956。

我也遇到了在 VM 上運行 ADB 的問題。 我有一個 Windows 10 主機和一個 Ubuntu 14.04 客戶端。 autossh方法對我不起作用。 我從另一個StackOverflow 問題中找到了一個更簡單的解決方案。 它要求您的 PC 和您的設備在同一個 WiFi 網絡上。

  1. 在您的 VM 客戶端上運行以下命令: adb tcpip 5555

    設備將與 VM 斷開連接,因為 ADB 現在處於 TCP 模式而不是 USB。

  2. 對於下一部分,您需要設備的 IP 地址。 要找到它,只需運行adb shell ip -f inet addr show wlan0

  3. 現在您可以連接到您的設備。 在您的 VM 客戶端上,運行:

    adb connect <Device IP>:5555

從這里開始,我所有的 adb shell、logcat 和monkey 會話都不間斷地運行!

我在此處為設置與我類似的人發布此信息:

  • 主機操作系統:OSX(10.15.4 Catalina)
  • 客戶端操作系統:Windows 10 Enterprise (v1903 build 18362.752)
  • VirtualBox v6.1.4
  • 安卓工作室 v3.6.2

允許客戶端操作系統 (Windows) 中的 Android Studio 通過 USB 連接到 Android 手機(使用 adb):

  1. 更新到最新版本的 VirtualBox(當前為 6.1.4)
  2. 從這里安裝 VirtualBox 擴展包
  3. 關閉VM,轉到設置 > 端口 > USB 並確保啟用了 USB 3.0 (xHCI) 控制器,然后單擊“確定”
  4. 主機操作系統(即 OSX)打開終端並啟動adb並通過運行adb devices確認手機已連接
  5. 啟動 VM,然后從 VirtualBox 菜單中選擇 Devices > USB > [YOUR PHONE] 將主機操作系統 USB 端口連接到 VM
  6. 在客戶端操作系統 (Windows) 上打開終端並運行adb devices以確認 adb 服務器正在運行並且可以找到您的手機。 您可能需要將 Android 平台工具添加到您的 PATH(我的位於 C:\\Users\\Username\\AppData\\Local\\Android\\Sdk\\platform-tools)。 這一步可能是可選的——我懷疑 Android Studio 可能會自己啟動adb
  7. 在客戶端操作系統 (Windows) 中啟動 Android Studio 並轉到文件 > 設置 > 外觀和行為 > 系統設置 > Android SDK > SDK 工具並確保已安裝 Google USB 驅動程序(請參閱此處的屏幕截圖

完成這些操作后,Android Studio 能夠檢測到我的手機並使用該設備運行/調試應用程序。

希望這可以幫助!

我遇到了同樣的問題,這讓我搜索了大約 2 個小時。我嘗試了幾種方法,包括上述所有解決方案,但都沒有奏效

我的情況

我的主機是 archlinux,來賓是 windows 8.1 我在 windows 中運行 flash builder 但 USB 調試不起作用,我連接的設備是 nexus 5 所以我按照這些步驟

  1. 從虛擬機菜單啟用 USB 控制器 Machine-->settings-->usb 啟用 USB 控制器並啟用 USB 2.0 (EHCI) 控制器然后添加您的設備(單擊右側的 + 按鈕)然后啟動您的虛擬機
  2. 現在你應該從這里下載最新的谷歌 USB 驅動程序並解壓
  3. 轉到控制面板設備管理器右鍵單擊您的設備轉到驅動程序選項卡並單擊更新驅動程序應該有兩個選項一個自動搜索...另一個瀏覽我的計算機選擇第二個並提供提取的文件路徑(檢查包括子文件夾選項)之后,Windows 應該可以識別您的設備,並且您的 android 設備中會顯示一條消息,允許訪問您的設備

在我的情況下,我也應該將驅動程序復制到 flashbuilder android 驅動程序路徑,但也許對於您的情況,這不是必需的

我在 VirtualBox 5.0.14 上遇到了同樣的問題,Stephen Niedzielski 提供的解決方案對我不起作用。 如果有人仍然感興趣可以嘗試這個解決方案。

我的環境是:

  • 主機操作系統:Mac OS 10.11
  • VirtualBox 中的來賓操作系統:Ubuntu 14.04
  • 設備:運行 Cyanomodgen 12.1 的 Galaxy S5

在主機操作系統中啟動 wifi 熱點並在那里連接 android 設備,或在路由器中連接兩者。 在 virtualbox 中,將來賓操作系統的網絡模式設置為“橋接適配器”,然后選擇 Wifi 適配器的名稱。 這樣主機操作系統和安卓設備就在同一個網絡中。

然后,在 android 設備中激活“開發者模式”並啟用 Cyanomodgen 提供的“ADB over network”。 (對於具有原始版本 android 的設備,如果可能的話,谷歌如何通過網絡使用 ADV)在主機操作系統中運行“adb kill-server”並確保沒有 ADB 實例正在運行。 然后運行命令'adb connect 192.168.2.12',android設備的ip。

恭喜 :) 現在您可以在 Android 設備上使用 ADB 來獲取 logcat 或拉取和推送文件。

  1. 在主機上安裝 Android SDK。 您應該只需要包含adb的平台工具 package。

  2. 不要讓您的 VM 客戶端獲得 Android 設備的所有權,因此禁用您擁有的任何 VirtualBox USB 過濾規則,然后分離並重新連接設備也不會造成傷害。

  3. 從您的 VM 客戶端運行adb kill-server 確保將其設為tskill adb 如果您有任何正在運行的 Eclipse 實例,您需要先關閉它們,因為它實際上會在后台啟動adb 不要跳過這一步。

  4. 在主機上執行adb devices 如果一切順利(應該如此),您會看到您的設備已列出。 它看起來應該是這樣的(注意端口號,抱歉弄錯了):

     * daemon not running. starting it now on port 5037 * * daemon started successfully * List of devices attached 015d2994ed200409 device

此時,您的主機應該有一個運行在端口 5037 的 ADB 服務器。您可以通過運行te.net 10.0.2.2 5037從 VM 客戶端檢查這一點,其中10.0.2.2是 VirtualBox 主機的默認值5037是默認值上面提到的 ADB 端口。

https://stackoverflow.com/a/12557836/16902966

在虛擬機 (Windows) 中:

set ADB_SERVER_SOCKET=tcp:10.0.2.2:5037

連接的設備: ...\platform-tools>adb.exe devices

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM