How can I connect to Android with ADB over TCP? [closed]
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 2 years ago.
Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.I am attempting to debug an application on a Motorola Droid, but I am having some difficulty connecting to the device via USB. My development server is a Windows 7 64-bit VM running in Hyper-V, and so I cannot connect directly via USB in the guest or from the host.
I installed a couple of different USB-over-TCP solutions, but the connection appears to have issues since the ADB monitor reports "devicemonitor failed to start monitoring" repeatedly. Is there a way to connect directly from the client on the development machine to the daemon on the device using the network instead of the USB connection or possibly a开发者_开发知识库nother viable options?
Manual Process
From your device, if it is rooted
According to a post on xda-developers, you can enable ADB over Wi-Fi from the device with the commands:
su
setprop service.adb.tcp.port 5555
stop adbd
start adbd
And you can disable it and return ADB to listening on USB with
setprop service.adb.tcp.port -1
stop adbd
start adbd
From a computer, if you have USB access already (no root required)
It is even easier to switch to using Wi-Fi, if you already have USB. From a command line on the computer that has the device connected via USB, issue the commands
adb tcpip 5555
adb connect 192.168.0.101:5555
Be sure to replace 192.168.0.101
with the IP address that is actually assigned to your device. Once you are done, you can disconnect from the adb tcp session by running:
adb disconnect 192.168.0.101:5555
You can find the IP address of a tablet in two ways:
Manual IP Discovery:
Go into Android's WiFi settings, click the menu button in the action bar (the vertical ellipsis), hit Advanced and see the IP address at the bottom of the screen.
Use ADB to discover IP:
Execute the following command via adb:
adb shell ip -f inet addr show wlan0
To tell the ADB daemon return to listening over USB
adb usb
Apps to automate the process
There are also several apps on Google Play that automate this process. A quick search suggests adbWireless, WiFi ADB and ADB WiFi. All of these require root access, but adbWireless requires fewer permissions.
This is really simple if your phone is rooted.
Download a terminal emulator from Google Play (there are lots that are free). Make sure that your Android device is connected to your Wi-Fi and get the Wi-Fi IP address. Open the terminal program and type:
su
setprop service.adb.tcp.port 5555
stop adbd
start adbd
Now go to your computer (assuming that you are using Windows) and create a shortcut on the desktop for "cmd.exe" (without the quotations).
Right click on the cmd shortcut and choose "Run as Administrator"
Change to your android-sdk-windows\tools
folder
Type:
adb connect ***wifi.ip.address***:5555
(example: adb connect 192.168.0.105:5555)
adb should now say that you are connected.
Note: if you are too fast to give the connect command it may fail. So try at least two times five seconds apart before you say this doesn't work.
Connect device via USB and make sure debugging is working, then run:
adb tcpip 5555 adb connect <DEVICE_IP_ADDRESS>:5555
Disconnect USB and proceed with wireless debugging.
When you're done and want to switch back to USB debugging, run:
adb -s <DEVICE_IP_ADDRESS>:5555
To find the IP address of your device, go to Settings > Wi-Fi > Advanced > IP Address
on your device or run adb shell netcfg
.
No root required. Only one device can be debugged at a time.
See this XDA post.
The adb
command is located in the platform-tools
folder of the Android SDK.
Assume you saved adb path into your Windows environment path
Activate debug mode in Android
Connect to PC via USB
Open command prompt type:
adb tcpip 5555
Disconnect your tablet or smartphone from pc
Open command prompt type:
adb connect IPADDRESS
(IPADDRESS is the DHCP/IP address of your tablet or smartphone, which you can find by Wi-Fi -> current connected network)
Now in command prompt you should see the result like: connected to xxx.xxx.xxx.xxx:5555
From adb --help
:
connect <host>:<port> - Connect to a device via TCP/IP
That's a command-line option by the way.
You should try connecting the phone to your Wi-Fi, and then get its IP address from your router. It's not going to work on the cell network.
The port is 5554.
For Windows users:
Step 1:
You have to enable Developer options in your Android phone.
You can enable Developer options using this way.
• Open Settings> About> Software Information> More.
• Then tap “Build number” seven times to enable Developer options.
• Go back to Settings menu and now you'll be able to see “Developer options” there.
• Tap it and turn on USB Debugging from the menu on the next screen.
Step 2:
Open cmd and type adb.
if you find that adb is not valid command then you have to add a path to the environment variable.
•First go to you SDK installed folder
Follow this path and this path is just for an example.
D:\softwares\Development\Andoird\SDK\sdk\platform-tools\;
D:\softwares\Development\Andoird\SDK\sdk\tools;
• Now search on windows system advanced setting
•
Open the Environment variable.
then open path and paste the following path
this is an example.
You SDK path is different from mine please use yours. D:\softwares\Development\Andoird\SDK\sdk\platform-tools\;
D:\softwares\Development\Andoird\SDK\sdk\tools;
Step 3:
Open cmd and type adb. if you still see that adb is not valid command then your path has not set properly follow above steps.
Now you can connect your android phone to PC.
Open cmd and type adb devices and you can see your device.
Find you phone ip address.
Type:- adb tcpip 5555
Get the IP address of your phone
adb shell netcfg
Now,
adb connect "IP address of your phone"
Now run your android project and if not see you device then type again adb connect IP address of your phone
For Linux and macOS users:
Step 1: open terminal and install adb using
sudo apt-get install android-tools-adb android-tools-fastboot
Connect your phone via USB cable to PC.
Type following command in terminal
adb tcpip 5555
Using adb, connect your android phone ip address.
Remove your phone.
From a computer on a non-rooted device
(Note that this can be done using a rooted device as well, but you can use a shell on a rooted device which doesn't require a USB connection)
Firstly, open command prompt (CMD). If you use Android Studio or IntelliJ there is a console included in there you can use.
If you have adb added to the path, you can skip the cd part.
If possible, open the SDK location, right click, and press "start command prompt here". Not all have this option so you have to do this (/these) commands as well:
Windows: change the drive (if applicable)
D:
And access the sdk and platform tools. Replace this path with your SDK location:
cd /sdk/path/here/platform-tools
Now you have access to the Android debug bridge.
With the device connected to the computer, do:
adb tcpip <port>
adb connect <ip>:<port>
Where <port>
is the port you want to connect to (default is 5555
) and <ip>
is the IP of the device you want to connect to.
Please note: 5555
is the default port and just writing the IP address connects it. If you use a custom port you can at least improve the security a bit. USB debugging over Wi-Fi can be abused, but only if the device is connected to the computer who wants to abuse the device. Using a non-default port at least makes it a bit harder to connect.
If you use a custom port, make sure to add it after the IP. Writing no port connects to 5555
and if you didn't use that the connection will fail.
You can find the IP address of a device in two ways:
Depending on your device, the exact names may vary. Open settings and go to About device -> Status -> IP address
Use ADB to get the IP
From the console, do:
adb shell ip -f inet addr show wlan0
And once you are finished with the connection, you can disconnect the device from your computer by doing:
adb disconnect <ip>:<port>
Or no IP to disconnect all devices. If you used a custom port, you must specify which port to disconnect from. The default is 5555 here as well.
To disable the port (if that is something you want to do) you do this command with the device connected:
adb usb
Or you can restart the device to remove the tcpip connection
From a computer on a rooted device
Firstly, you need access to the shell. You either connect the device using a usb cable and use adb shell
or download an app from Google Play, FDroid, or some other source.
Then you do:
su
setprop service.adb.tcp.port <port>
stop adbd
start adbd
And to connect the device, you do as in the non-rooted version by doing adb connect <ip>:<port>
.
And if you want to disable the port and go back to USB listening:
setprop service.adb.tcp.port -1
stop adbd
start adbd
You can also use an Android Studio plugin to do it for you (don't remember the name right now), and for rooted users there's also the option of downloading an Android app to set up the phone connection (adb connect is probably still required).
Some phones have a setting in developer options (this applies to some unrooted phones, though probably some rooted phones too) that allows for toggling ADB over Wi-Fi from the device itself without root or a computer connection to start it. Though there are few phones that have that
I needed to get both USB and TCPIP working for ADB (don't ask), so I did the following (using directions others have posted from xda-developers)
Using adb shell
:
su
#Set the port number for adbd
setprop service.adb.tcp.port 5555
#Run the adbd daemon *again* instead of doing stop/start, so there
#are two instances of adbd running.
adbd &
#Set the port back to USB, so the next time ADB is started it's
#on USB again.
setprop service.adb.tcp.port -1
exit
To connect your tablet using TCP port. Make sure your system and device is connected to same network.
- Open console cmd.exe
- Type
adb tcpip 5555
- Go to System -> Development option -> USB debugging --> Uncheck it for TCPIP connection
- Type
adb connect 192.168.1.2
this is your device IP address - Connected to 192.168.1.2
Connected using port forward Try to do port forwarding,
adb forward tcp:<PC port>
tcp:<device port>
like:
adb forward tcp:5555 tcp:5555.
C:\Users\abc>adb forward tcp:7612 tcp:7612
C:\Users\abc>adb tcpip 7612 restarting in TCP mode port: 7612
C:\Users\abc>adb connect 10.0.0.1:7612
connected to 10.0.0.1:7612
If you get message error: device not found connect a usb device to system then follow same procedure.
for a rooted device
setprop service.adb.tcp.port 5555
stop adbd
start adbd
I do not know how to connect the device without any USB connection at all, but if you manage to connect it maybe at another computer you can switch the adbd to TCP mode by issuing
adb tcpip <port>
from a terminal and connect to your device over wifi from any PC on the network by:
adb connect <ip>:<port>
Maybe it is also possible to switch to TCP mode from a terminal on the device.
First you must connect your device via USB
Then connect your device to WIFI and get the IP address. While still connect via usb type this in command line or via Android Studio Terminal
adb tcpip 5555
adb connect <device IP>:5555
You will see these messages:
restarting in TCP mode port: 5555
connected to 172.11.0.16:5555
Now remove the USB cable and you will still see your logcat as normal
Done. Enjoy
If you want to easily connect your device to run, debug or deploy your Android apps over WiFi you can use an open source IntelliJ Plugin I've developed. Here is the code and here the plugin ready to be used.
The usage is quite simple. Here you have a gif:
As Brian said:
According to a post on xda-developers, you can enable ADB over WiFi from the device with the commands
setprop service.adb.tcp.port 5555
stop adbd
start adbd
And you can disable it and return ADB to listening on USB with
setprop service.adb.tcp.port -1
stop adbd
start adbd
If you have USB access already, it is even easier to switch to using WiFi. From a command line on the computer that has the device connected via USB, issue the commands
adb tcpip 5555
adb connect 192.168.0.101:5555
To tell the ADB daemon return to listening over USB
adb usb
There are also several apps on the Android Market that automate this process.
It works.You just need to access the android shell and type those commands...
One other (easier) solution is on the Market: adbWireless, it will automatically set your phone.
Root is required! for both...
adb tcpip 5555
Weird, but this only works for me if I have the USB cable connected, then I can unplug the usb and go for it with everything else adb.
and the same when returning to usb,
adb usb
will only work if usb is connected.
It doesn't matter if I issue the
setprop service.adb.tcp.port 5555
or
setprop service.adb.tcp.port -1
then stop & start adbd, I still need the usb cable in or it doesn't work.
So, if my ADB over usb wasn't working, I bet I wouldn't be able to enable ADB over WiFi either.
To switch between TCP and USB modes with just one command, you can add this to /init.rc
:
on property:service.adb.tcp.port=*
restart adbd
on property:service.adb.tcp.enable=1
setprop service.adb.tcp.port 5555
on property:service.adb.tcp.enable=0
setprop service.adb.tcp.port -1
And now you can use property service.adb.tcp.enable
to enable or disable listening on port 5555. Run netstat
to check whether it's listening. As you can see it will also trigger if you do wish to change service.adb.tcp.port
manually.
Bash util function:
function adb-connect-to-wifi {
ip="$(adb shell ip route | awk '{print $9}')"
port=5555
adb tcpip ${port}
adb connect ${ip}:${port}
}
STEP 1.
Make sure both your adb host computer and Android device are on the same Wifi network.
STEP 2.
Connect the Android device with the computer using your USB cable. As soon as you do that, your host computer will detect your device and adb will start running in the USB mode on the computer. You can check the attached devices with adb devices
whereas ensure that adb is running in the USB mode by executing adb usb
.
$ adb usb
restarting in USB mode
$ adb devices
List of devices attached
ZX1D63HX9R device
STEP 3.
Restart adb in tcpip mode with this command:
$ adb tcpip 5556
restarting in TCP mode port: 5556
STEP 4.
Find out the IP address of the Android device. There are several ways to do that:
- WAY: 1 Go to Settings -> About phone/tablet -> Status -> IP address.
- WAY: 2 Go to the list of Wi-fi networks available. The one to which you’re connected, tap on that and get to know your IP.
- WAY: 3 Try
$ adb shell netcfg
.
Now that you know the IP address of your device, connect your adb host to it.
$ adb connect 192.168.0.102:5556
already connected to 192.168.0.102:5556
$ adb devices
List of devices attached
ZX1D63HX9R device
192.168.0.102:5556 device
STEP 5.
Remove the USB cable and you should be connected to your device. If you don’t see it in adb devices
then just reconnect using the previous step’s command:
$ adb connect 192.168.0.102:5556
connected to 192.168.0.102:5556
$ adb devices
List of devices attached
192.168.0.102:5556 device
Either you’re good to go now or you’ll need to kill your adb server by executing adb kill-server
and go through all the steps again once more.
Hope that helps!
Reference:
- http://developer.android.com/tools/help/adb.html#wireless
- http://codetheory.in/android-debug-bridge-adb-wireless-debugging-over-wi-fi/
These are the steps I followed and it worked for me,
adb shell ifconfig (get the ip address of the device from here)
adb tcpip 7777 (connect adb to some port)
adb connect "ipaddress":7777
You can also use SSH local port forwarding. But it still involves a USB cable. Connect your phone using USB to a computer (host) with an sshd running. On a remote (guest) pc start an SSH client capable of portforwarding/tunneling. Example:
plink -L 5037:localhost:5037 <host_IP_address>
I use this construction to connect my device to a virtual machine. Eltima USB to Ethernet wasn't stable enough (timeouts during debug).
SSH tunneling works for free and is more reliable.
I find the other answers confusing. Far simpler to use adbWireless:
http://ppareit.github.com/AdbConnect/
Simply install an app on your phone to toggle debugging over wifi, install an eclipse plug-in and you're done.
I put together a batch file for automatic enabling and connecting ADB via TCP, to a device connected via USB. With it you don't have to put in the IP manually.
@echo off
setlocal
REM Use a default env variable to find adb if possible
if NOT "%AndroidSDK%" == "" set PATH=%PATH%;%AndroidSDK%\platform-tools
REM If off is first parameter then we turn off the tcp connection.
if "%1%" == "off" goto off
REM Set vars
set port=%1
set int=%2
if "%port%" == "" set port=5557
if "%int%" == "" set int=wlan0
REM Enable TCP
adb -d wait-for-device tcpip %port%
REM Get IP Address from device
set shellCmd="ip addr show %int% | grep 'inet [0-9]{1,3}(\.[0-9]{1,3}){3}' -oE | grep '[0-9]{1,3}(\.[0-9]{1,3}){3}' -oE"
for /f %%i in ('adb wait-for-device shell %shellCmd%') do set IP=%%i
REM Connect ADB to device
adb connect %IP%:%port%
goto end
:fail
echo adbWifi [port] [interface]
echo adbWifi off
goto end
:off
adb wait-for-device usb
:end
Here's an extension to Brian's answer using Bluetooth:
On Linux, use Blueman to share PC internet with your device via Bluetooth:
$ sudo apt-get install blueman $ blueman-manager Pair them: Search devices after enabling Bluetooth on your phone and making it visible $ blueman-services Network > [X] Network Access Point (NAP) Your Phone > Settings > Bluetooth > Paired Device > [X] Internet access
Use the Bluetooth network for ADB commands:
$ adb tcpip 5555 $ adb connect $(adb shell ip -f inet addr show bt-pan | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n1):5555
Once done to return to USB mode:
$ adb disconnect
$ adb usb
Note: Bluetooth 3.0 and 4.0 can go up to 24 Mbit/s.
Steps :
su
-- To switch to super user.setprop service.adb.tcp.port 5555
- To specify the tcp Port - 5555 is the port number herestop adbd
- To stop the adbd service.start adbd
- To start adbd service.
this works perfectly with ssh
from my windows PC
I try to do this on the boot on my cyanogen mobile or launch this with plink. With plink I can't launch shell with su right ... sudo or su command not works. On boot I don't know how it's works!
My shell program works from ssh with su -c "sh /storage/sdcard1/start_adb.sh"
with the last 3 commands (without su --)
Thanks
One additional note (learned the hard way): You should not have your company VPN-connection active at the same time...
You Need to do following things:
- First, Add ADB to your environment path.
- From your CLI type this command adb connect YOUR_DEVICE_IP:PORT_NUMBER (example adb connect 192.168.100.100:5555)
There are two ways to connect your Android device with ADB over TCP?
First way
Follow this steps
First use below command to get your device IP Address
adb shell ifconfig
OUTPUT of above command
wlan0 Link encap:UNSPEC Driver icnss
inet addr:XXX.XXX.X.XX Bcast:XXX.XXX.X.XXX
With the help you above command you will find the IP Address of connected device
Now use below command
adb tcpip 5555
The above command will restart this TCP port: 5555
Now use below command to connect your device
adb connect XXX.XXX.X.XXX:5555
^^^ ^^^ ^ ^^^
IP Address of device
Second way
You can use Android Studio Plugin Android device with ADB
Android WiFi ADB - IntelliJ/Android Studio Plugin
IntelliJ and Android Studio plugin created to quickly connect your Android device over WiFi to install, run and debug your applications without a USB connected. Press one button and forget about your USB cable
Please check this article for more information
Connect Android Device with Wifi within Android Studio
I'm struct at the same issue but
a simple hack adb reverse tcp:<PORT> tcp:<PORT>
worked for me. It allows the system to accept tcp requests.
Thank You for reading
Use the adbwireless app to enable the phone, then use adb connect from the Windows machine to talk to it. The adbwireless app on the phone tells you how to connect to it, giving the IP address and everything.
The much less fun alternative is to connect via USB, tell the phone to use TCPIP via adb tcpip 5555, then disconnect USB, then use adb connect. This is much harder because this way you have to figure out the IP address of the phone yourself (adbwireless tells you the IP), you have to connect via USB, and you have to run adb tcpip (adbwireless takes care of that too).
So: install adbwireless on your phone. Use it. It is possible, I do it routinely on Linux and on Windows.
On my system it went like this:
On my Android device in my Linux shell, a simple "ifconfig" did not give me my IP address. I had to type:
ifconfig eth0
-or-
netcfg
to get my IP address. (I knew eth0 was configured because I saw it in my dmesg.) Then I did the :
setprop service.adb.tcp.port -1
stop adbd
start adbd
Then on my Win7 box (the one running Eclipse 3.7.1). I opened a command prompt to
\android-sdk\platform-tools>
without running as admin. Then I did a
adb connect 12.345.678.90
I never put a port. If I did a
adb tcpip 5555
it said it couldn't find the device then nothing appeared in my "adb devices" list. I.e. it only works if I DON'T do the tcpip command above.
I can do an "adb shell" and mess with my Android Device. But my Android Device does not appear in my Run->Run Configurations->Target tab right now. On the other hand, if I keep the Target Tab set to automatic. Then when I run my app via Run->Run it does run on my Android device even though my Android device is not even listed as one of my targets.
I did get this working. Didn't use any usb cable.
- app adb wireless.
Run it. That will set ip and port; Then in dos
cd C:\Program Files\Android\android-sdk\platform-tools adb connect "192.168.2.22:8000 "enter"
Connected.
精彩评论