簡體   English   中英

React-Native、Android、Genymotion:ADB 服務器沒有 ACK

[英]React-Native, Android, Genymotion: ADB server didn't ACK

我正在 Mac 上使用 React-Native、Android 和 Genymotion。 當我運行react-native run-android我在啟動操作結束時得到以下幾行:

...
04:54:40 E/adb: error: could not install *smartsocket* listener: Address already in use
04:54:40 E/adb: ADB server didn't ACK
04:54:40 E/ddms: '/Users/paulbrie/Library/Android/sdk/platform-tools/adb,start-server' failed -- run manually if necessary
04:54:40 E/adb: * failed to start daemon *
04:54:40 E/adb: error: cannot connect to daemon
:app:installDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:installDebug'.
> com.android.builder.testing.api.DeviceException: Timeout getting device list.
...

但是, adb devices返回這個:

List of devices attached
192.168.59.101:5555 device

到目前為止,我還沒有找到在模擬器上運行我的應用程序的解決方案。 有沒有人遇到過同樣的問題?

謝謝,保羅

經過更多研究,我意識到 Genymotion 默認使用自己的 adb。

在此處輸入圖片說明

我切換到我的主 adb(與 react-native 使用的相同)並解決了這個問題。 我猜是因為首先啟動了 Genymotion 的 adb,所以我收到了Address already in use錯誤消息。

我正在使用 genymotion,但 Paul 的解決方案本身並沒有修復錯誤(對於 Mac)。

我不得不:

通過 SDK 管理器將 Android SDK 更新到最新版本 (24.4.1)

在命令行輸入android

在 SDK 管理器中找到最新的 SDK 工具並安裝。

安裝后,SDK 路徑應更新新的 SDK 位置,如下所示。

在此處輸入圖片說明

然后更新 $ANDROID_HOME 以使用新的 SDK

export ANDROID_HOME=/usr/local/Cellar/android-sdk/24.4.1_1

export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

通過使用echo $PATH查看您的路徑來確認它已添加

然后在 genymotion 中執行 @Paul 上面所說的並指向 genymotion ADB 使用相同的 sdk

在此處輸入圖片說明

系統: Windows 10

我的問題:將 Genymotion 設置為指向自定義 SDK 沒有任何影響。 我還是收到了:

無法在 Android 上啟動項目:無法安裝智能套接字偵聽器:無法綁定到 127.0.0.1:5037:通常每個套接字地址(協議/網絡地址/端口)只允許使用一次。 (10048) 無法從 ADB 服務器讀取 ok * 無法啟動守護程序 * 錯誤:無法連接到守護程序

我發現整個系統中使用的 ADB 版本存在差異。 這是我用來查找它們的命令:

where /r C:\ adb.exe

這產生了結果:

C:\Program Files\Expo XDE\resources\app\node_modules\xdl\binaries\windows\adb\adb.exe
C:\Program Files\Genymobile\Genymotion\tools\adb.exe
C:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb.exe
C:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb backup\adb.exe

導航到每個目錄並運行:

adb.exe version

讓我看到 Expo 正在運行 ADB 版本:

Android Debug Bridge version 1.0.36
Revision fd9e4d07b0f5-android

雖然使用自定義 SDK 的 Genymotion 有版本 (c:\\Users\\kyle\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe):

Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android

作為測試,我從

c:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb.exe

並將它們放入備份文件夾中。 然后我移動了位於

c:\Program Files\Expo XDE\resources\app\node_modules\xdl\binaries\windows\adb\adb.exe

進入同一個位置。 我用以下命令殺死了 adb:

adb kill-server

由於我的 Genymotion 設備已經在運行,這導致 adb 服務器自動重啟。 我點擊了 Expo XDE 內的“重啟”按鈕,它立即開始工作。 這是我在凌晨 1:13:04 按下重啟按鈕的日志:

12:45:53 AM
could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: Only one usage of each socket address (protocol/network address/port) is normally permitted. (10048)
could not read ok from ADB Server
* failed to start daemon *
error: cannot connect to daemon
1:13:04 AM
Restarting project and clearing packager cache (Hold shift while clicking restart to avoid clearing cache).
1:13:11 AM
Starting React Native packager...
1:13:17 AM
Scanning 543 folders for symlinks in C:\Users\kyle\git\betalog\node_modules (49ms)
1:13:17 AM
1:13:19 AM
Couldn't adb reverse: closed
1:13:20 AM
Project opened! You can now use the "Share" or "Device" buttons to view your project.
1:13:26 AM
Couldn't adb reverse: closed
1:13:26 AM
Downloading latest version of Expo
1:13:28 AM
Installing Expo on device
1:13:33 AM
Opening on Android device
1:13:56 AM
Building JavaScript bundle: finished in 59643ms.
1:14:01 AM
Dependency graph loaded.
1:14:03 AM
Your JavaScript transform cache is empty, rebuilding (this may take a minute).

結論: Genymotion 和 Expo 可能需要使用相同版本的 adb,以便 Expo 可以與模擬設備正確通信。 將 Genymotion 指向您的 android SDK 位置並確保 Expo XDE 具有相同版本將允許設備之間正確通信。 我將 Expo XDE 版本移到了 SDK 位置,但您可能可以采用另一種方式(獲取 sdk ADB 文件並將它們放在 Expo XDE 資源位置)。

PS我已經閱讀了與此問題相關的所有 stackoverflow 帖子。 只是為了讓你們知道我的任務管理器顯示了三個正在運行的 adb.exe 實例。 如果你殺了他們中的任何一個,他們就會回來。

希望這有幫助/干杯

也許你的 adb 版本不匹配

查看:

adb version 

然后:

cd /Path/to/Android/Sdk/platform-tools && ./adb version

如果這兩個不同,你在這里有錯誤,只需從 sys 中刪除 adb 並將 platform-tools 中的一個復制到 /usr/bin/

如果想保持系統干凈,您也可以使用 Genymotion 而不使用 Android Studio

  1. 找到 Genymotion 的adb副本。 在 macOS 上,這通常是/Applications/Genymotion.app/Contents/MacOS/tools/
  2. 將 Genymotion 工具目錄添加到您的路徑 - 執行/添加export PATH=/Applications/Genymotion.app/Contents/MacOS/tools/:$PATH到您的~/.bash_profile~/.bash_rc
  3. 確保您可以從終端運行 adb。

(來自https://docs.expo.io/versions/latest/workflow/genymotion

您系統上的 adb 版本與 android sdk platform-tools 上的 adb 版本不同。 以下建議適用於 Linux 操作系統

  1. 檢查 sys adb 版本運行以下命令

亞行版

Android 調試橋版本 1.0.39

  1. 檢查 sdk adb 版本

cd /root/Android/Sdk/platform-tools

./adb 版本

Android 調試橋版本 1.0.32

  1. 復制

rm /usr/bin/adb

[注意:上述命令刪除現有的 adb,然后從 sdk/platform-tools 目錄中復制 adb]

須藤cp /root/Android/Sdk/platform-tools/adb /usr/bin/adb

然后使用此命令運行項目

react-native run-android

當我嘗試從 expo UI 運行時,我遇到了同樣的事情。 做了同樣的事情,如答案中所述,但應用程序沒有運行。 當一次嘗試從命令行(在項目文件夾中)運行exp android ,應用程序運行成功,下次從 Expo UI 運行成功。

我有一個類似的問題。

首先,我卸載了該應用程序。 然后,我將 GenyMotion 指向 Android Studio 提供的 android sdk 接下來,我在終端中運行“adb kill-server”。 最后,我重新運行了“react-native run-android”並獲得了構建成功。

對我有用的步驟是:

  • $ adb kill-server

  • $ adb 啟動服務器

  • $ cd 安卓

  • $ ./gradlew 干凈

  • $ cd ..

  • $ react-native run-android

對於 Ubuntu

這個對我有用!!

  1. 檢查系統 adb 版本

亞行版

Android 調試橋版本 1.0.39

2 檢查sdk adb 版本

cd /home/user_name/Android/sdk/platform-tools

./adb 版本

Android 調試橋版本 1.0.32

  1. 復制

須藤cp /home/user_name/Android/sdk/platform-tools/adb /usr/local/bin

就這樣! 它現在會起作用。

1.在genymotion中使用自定義sdk路徑。(假設這一個不起作用意味着,嘗試執行第二個)

2.手動使用此命令執行(SDK PATH/adb she ll am start -n/Package name/MainActivity)。

C:\\Users\\AppData\\Local\\Android\\Sdk/platform-tools/adb she ll am start -n com.example/com.example.ManiActivity

並嘗試使用 react-native run-android 運行應用程序。

當我嘗試在 Genymotion 中運行我的 react-native 項目時發生了同樣的問題

對於 Linux ubuntu 20.04 轉到/home/mycomputer/Android/Sdk/platorm-tools

運行$./adb version

只需將 adb 路徑復制到/usr/bin

$ sudo cp /home/raik/Android/Sdk/platform-tools/adb /usr/bin

然后我可以在 genymotion 中運行我的項目。

注意:在某些Linux系統中可能會復制到這個路徑/usr/local/bin`

如果有人在使用 Android Studio 模擬器的 Windows 中遇到此問題,則只需在 powershell 或 cmd 中運行以下命令:

taskkill /F /IM adb.exe

它應該殺死所有 adb 進程實例,然后您可以通過 Expo CLI 重新加載應用程序或再次在 Android 上啟動應用程序。

暫無
暫無

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

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