Android remote emulator lose connection using ANDROID_ADB_SERVER_ADDRESS
Environment Component nativescript has 7.2.0 version and is up to date. ✔ Component @nativescript/core has 7.2.1 version and is up to date. ✔ Component @nativescript/ios has 7.2.0 version and is up to date. ✔ Component @nativescript/android has 7.0.1 version and is up to date.
Describe the bug The use of the command for running on a remote Android emulator (in my case a Virtualbox with Ubuntu 20.04.1 and Android SDK and emulator running) as follows:
$ ANDROID_ADB_SERVER_ADDRESS={VirtualMachineIP} ns run android --no-hmr
The application is installed and has run successfully but the CLI command seems to timeout when trying to connect to the application log with the error:
Installing on device emulator-5554...
Successfully installed on device with identifier 'emulator-5554'.
Unable to apply changes on device: emulator-5554. Error is: connect ECONNREFUSED 127.0.0.1:51258.
Seems like NativeScript is trying to connect to a port in the local machine ignoring the ANDROID_ADB_SERVER_ADDRESS IP address
To Reproduce
- Create an Ubuntu virtual machine with android SDK on a VirtualBox or similar on a Mac OS host machine
- create an Android emulator and run it
- in the virtual machine OS (Ubuntu in this case) terminal run
adb -a -P 5037 nodaemon server - in the host machine (Mac OS in my case) execute an android application with the NativeScript CLI
ANDROID_ADB_SERVER_ADDRESS={VirtualMachineIP} ns run android --no-hmr
Expected behavior Running an Android application in a remote machine as normal as in host machine with debug and log capabilities.
Additional context The virtual machine should have bridged adapter configured, I don't know if NAT is also working
I've ran into this before & worked around it by changing https://github.com/NativeScript/nativescript-cli/blob/25410b74a411bfa04d0aa968d47e2bd5a3c2cd1a/lib/services/livesync/android-livesync-tool.ts#L15 to the correct IP.
is ANDROID_ADB_SERVER_ADDRESS a standard env name recommended by android docs? If so, we could change that line to read from it.