Using ADB locally on device (loopback) shows no devices - android

I am trying to use ADB on an Android device itself, so without any host computer. This was working perfectly a couple of days ago, but it suddenly stopped working. As far as I know nothing changed since then (e.g. no apps (un)installed). I could use adb backup -f /sdcard/backup.ab <package-name> in a terminal emulator and it would start to backup that package. When I try that now, it returns adb: unable to connect for backup. Investigating using adb devices returns an empty list. I never bothered to check the devices previously, I just went straight to my adb command, because everything was working.
This was on an HTC Desire running Android 4.4.2, ADB version 1.0.31.
Using ADB from my PC with this phone is working perfectly, but this is not what I want.
What I have tried
I have tried to perform the same actions on different devices (Asus PadFone 2 on 4.4.2, Samsung Galaxy Note GT-N7000 on 4.4.2, Sony Xperia S on 4.1.2.) but adb devices returns an empty list on all of them. I am starting to wonder why this has worked on my HTC Desire in the first place.
Searching Google and Stack Overflow, but most (if not all) results refer to a driver problem or any other problem involving a host computer.
adb kill-server + adb start-server about a hundred times, as well as stop adbd + start adbd.
Turning 'USB Debugging' off and on in the Settings, as well as revoking access to previously authorized computers. (However, in the working situation, I never got any RSA key verification prompt.)
adb -a devices -> empty list.
adb usb -> error: device not found.
Trying to restart adb(d) in TCP mode is unsuccessful (even though this was not necessary in the working situation). adb tcpip 5555 returns error: device not found.
getprop returns no entry named service.adb.tcp.port and setprop service.adb.tcp.port 5555 silently fails. (Checking afterwards using getprop service.adb.tcp.port returns nothing. Doesn't this need root?)
adb connect localhost returns unable to connect to localhost:5555.
When the daemon starts, it starts on port 5038 (when using ADB from my PC it starts on 5037). adb connect localhost:5038 returns connected to localhost:5038. However adb devices still returns an empty list, and adb backup returns adb: unable to connect for backup. Furthermore adb shell returns error: device not found and adb get-state returns unknown. So no success here either.
Finding my local ip using getprop dhcp.wlan0.ipaddress (returns 192.168.1.xx) and then adb connect 192.168.1.xx returns unable to connect to :5555. adb connect 192.168.1.xx:5038 -> unable to connect to :5038. Using ADBHOST=192.168.1.xx adb start-server has no effect on these outcomes.
One of the few search results that was actually somewhat relevant is this thread on the AOSP Issue Tracker. Yet, it describes a problem where, after using setprop service.adb.tcp.port 5555, adb devices at least shows a device, however offline (namely localhost:5555 offline). Somewhat near the end of the thread a solution is reached, which involves changing the $HOME directory so as to change where the RSA keys are saved, e.g. HOME=/sdcard. It is then necessary to append the public key to /data/misc/adb/adb_keys using cat /sdcard/.android/adbkey.pub >> /data/misc/adb/adb_keys. However, I presume this needs root? Also, all of this was not necessary in the working situation so I doubt the solution to my problem is to be found in this direction. This article, derived from the thread at AOSP's Issue Tracker, does not speak of appending the public key. However, the approach mentioned is unsuccessful.
netstat returns (among others):
Proto: tcp
Recv-Q: 0
Send-Q: 0
Local Address: 127.0.0.1:5038
Foreign Address: 0.0.0.0:*
State: LISTEN
ps shows an /sbin/adbd process as well as an adb process:
USER: shell PID: 92 PPID: 1 VSIZE: 3624 RSS: 264 WCHAN: ffffffff PC: 00000000 S NAME: /sbin/adbd
USER: u0_a57 PID: 9754 PPID: 1 VSIZE: 3016 RSS: 988 WCHAN: ffffffff PC: 4014f768 S NAME: adb
(Commands executed from the terminal are executed as USER: u0_a57.)
I guess that's pretty much it.
I am looking for a solution where no root is needed, as it was not needed when I had it working before.
I hope my situation and question is clear. Please let me know if my question needs improving, as this is my first time posting on Stack Overflow.
Hopefully someone can help me with this. Thanks in advance!

I believe your device might have rebooted. To initially get your phone into tcp, you must have ran adb tcpip 5555 from a computer. But that doesn't last forever. If your phone gets rebooted, then you will have to run adb tcpip 5555 from a computer again.
I am not sure what you meant when you said:
Trying to restart adb(d) in TCP mode is unsuccessful (even though this was not necessary in the working situation). adb tcpip 5555 returns error: device not found.
Did you run that from a computer? If it was from a computer then I'm not sure what the problem is there. But if it was from the phone, then it can't find the device to change to tcp.
To fix this, adb tcpip 5555 from a computer should work.

Related

adb reverse --list on Android 5

The following scenario:
Windows 10 machine with adb version 1.0.40
rooted Android phones, anything from android 5 to 8
An application does the following on each found adb device:
a reverse connection is set up on each phone using adb -s xxx reverse tcp:8080 tcp:8080
using adb -s xxx reverse --list is checked if the reverse is set up correctly
The android application opens a WebSocket connection to a running WS server on the PC
On Android 6 and higher, the --list command returns (reverse) tcp:8080 tcp:8080, which is correct. The android application opens the WebSocket connection properly.
Problem:
On any Android 5 phone, the following happens:
opening the reverse works properly.
Android is opening the WS connection to the PC
The command adb -s xxx reverse --list is returning the error error: protocol fault (couldn't read status length): No error
This causes the phone to be disconnected and reconnected again (seeing the windows popup of the connected device)
This, of course, also kills the WebSocket connection
Now my questions:
I couldn't find the above error message, even with googling.
Shouldn't it at least appear somewhere in some Adb source code?
Is there any component which does the Adb stuff on Android, that
could be updated somehow, or is it tied to the android version?
Could this check (adb reverse --list) also done on the adb shell?
Any other ideas how to do the check without that command or make the
command work on Android 5?

android - adb more than one device/emulator

I genymotion emulator and my phone connected , I want to run and debug my application over wifi , I found the instruction to do so but I get this error when I enter this code :
adb tcpip 5555
I get this error :
error: more than one device/emulator
How can I make my device as default or something like that to solve this problem ?
You can send commands to a specific device, according to docs:
$ adb devices
List of devices attached
emulator-5554 device
emulator-5555 device
$ adb -s emulator-5555 do_your_command
Also, if only one is emulator or a real device you can just attach -e or -d and send the command to it:
If you have multiple devices available, but only one is an emulator, use the -e option to send commands to the emulator. Likewise, if there are multiple devices but only one hardware device attached, use the -d option to send commands to the hardware device.
Do following thing which will help you,
You getting the message just because you are connected more than one device.
Run commands
adb devices
after the fire above command, you get the list of the device, From the list select your device id which not emulator
and fire following command
adb -s f725aa8b7ce4(deviceId) tcpip 5555
and after this fire
adb connect yourIp 5555
I was struggling with same issue since months, later while testing in postman I got know that "Appium inspector" is the main reason for this issue. As it creates new session Id and interrupt the running framework server.
Hence, adb kill-server adb start-server resolves the issue as it actually kill the session ID created by Appium inspector and starts new server.

ADB : unable to connect to 192.168.1.10:5555

I cannot use adb connect to connect via WiFi to my device (Nexus 5, Android 6), but since I'm developing a cordova plugin using USB OTG, I really need to connect via WiFi.
I tried to adb kill-server, and all solutions provided on SO, and none is working for me...
Before it was working ok (i.e android 5).
Any idea?
I had the same issue since the android 6 upgrading.
I noticed that for some reason the device is playing "hard to get" when you try to contact it over WIFI.
Try these following steps:
Make sure that Aggressive Wi-Fi to Cellular handover under Networking section in the device's developer options is turned off.
ping continuously from your pc to the device to make sure it's not in network idle mode ping -t 192.168.1.10 (windows cmd), unlock the device and even try to surf to some website just to make it get out of the network idle.
If ping doesn't work, turn off / on Android Wifi and go back to step 2.
When it replies to the ping, connect it via usb, and:
adb usb
adb tcpip 5555
adb connect 192.168.10.1:5555
In case it's still not connected, try to switch the USB connection mode as MTP / PTP / Camera while the device is connected through USB and repeat these steps over again...
If the above points are not working please try running ADB as admin.
For Ubuntu -
`sudo adb start-server`
I had the same issue. i tried all commands like adb kill-server then
adb tcpip 5555 then
adb connect <IPAddress>:5555 but the issue remain same
the IP address which i used to connect ... showing me message unable to connect .....
what i did is
go to phone's settings
then About phone
then Status`
then check IP address
Now try to connect phone with that IP address
Note : - The problem is the IP address changed which i used to connect
First, you need to pair your computer :
Go to Wireless debugging > Pair device with pairing code.
Go to console of your pc and run adb pair ip:port pairing_code
Now , run adb connect ip:port on your pc and enjoy.
Go to Android Studio and you can the see new device.
I had the same problem. The solution was as follows.
In Developer Options.
+ Activate "Allow ADB debugging in load only mode."
+ In Spanish, "Permitir depuraciĆ³n ADB en modo solo carga."
Explanation
My problem was as follows: I was doing all the steps:
adb kill-server
adb start-server
adb tcpip 5555
adb connect (your ip).
After completing these steps, I disconnected the phone from the USB cable, and the connection was lost, I could not make the wireless connection.
However, this worked for me on a Huawei ALE-23 cell phone, but it did not work for me on the Huawei Y9S cell phone (Android 10), it failed.
I solved it only by activating the option "Allow ADB debugging in load only mode" in the cell Huawei Y9S.
Cheers!!!.
Make sure you are not connected to a VPN. I was able to connect to adb as soon as I disconnected from the VPN. For a sure way to connect do this:
Unplug USB
Restart Android device
Shutdown Android Studio or any other IDE using ADB
adb kill-server
Plug back in USB after restart
adb devices This automatically starts the server. You sould see the device plugged in via USB
adb shell ip addr show wlan0 to get your devices IP address
adb tcpip 5555 Set the port to 5555 that you want to connect through
adb connect 192.168.0.6:5555 Replace IP address with one from step 6.
Disconnect the USB
I used the same approach as #IVAN MANJARREZ ADB : unable to connect to 192.168.1.10:5555
The only difference was I used Huawei - p20 pro.
Where for p20 - pro, you have to search for and activate
"Allow ADB debugging in charge only mode"
I have tried everything but still, nothing worked for me. Then randomly, I used the following command:
$ adb tcpip 5555
error: no devices/emulators found
$ adb connect 192.168.0.104:5555
failed to connect to 192.168.0.104:5555
$ adb connect 192.168.0.104:5555
already connected to 192.168.0.104:5555
It was connected at this point but my device was offline. I was always able to connect at the second attempt but my device was always offline. At this point, I connected my device to my PC with USB.
$ adb tcpip 5555
error: more than one device/emulator
$ adb disconnect
disconnected everything
$ adb tcpip 5555
restarting in TCP mode port: 5555
$ adb connect 192.168.0.104:5555
connected to 192.168.0.104:5555
I disconnected my USB and voila! my device was still connected.
I am sorry but I can't explain why it worked. I was randomly trying different things on internet. I had used the same commands several times but in different orders but they didn't work. I hope it will help someone.
I solved this problem by disabling USB debugging and enabling it again
The critical step in getting this to work is disconnecting the usb cable after issuing the adb connect xx.x.x.xx:5555 command. At this point you are connected but unauthorized.
Execute adb kill-server and re-issue the connect command.
Verify with execution of adb shell date.
Similar issue happened to me when I tried to connect wirelessly to my phone. I got this error:
failed to connect to 192.168.1.187:42534
I tried to restart everything, phone, PC, adb server. The issue was simply that you have to connect by cable first to authorize the client and then you can unplag the cable and connect wirelessly.
In my case I had to shut of and on the wifi adb debugger app, on the device.
On another USB device I had to shitch off and on developer mode, then re-set the development options.
Also reset my pc.
Seem that adb in some way made a mess with global communication and all the debug communication have to be reset on both sides.
After this the devices start to comunicate again
sudo adb start-server
Just worked for me. after A day of looking for a solution.
So my situation was that i restarted it in tcp mode but still couldn't connect, i had an No route to host error ,so i tried pinging it but i couldn't find it either even though it was on the arp table. so what i noticed was that when i connect it by usb, it pings successfully. so i had to do the adb connect ip before i could unplug the usb.
I ran into this same issue on not being able to connect via Wi-Fi but was using the snap version of scrcpy. I kept seeing messages like adb server version (40) doesn't match this client (39); killing... when I would run adb or scrcpy commands but it still worked, until I tried to connect over Wi-Fi.
$ scrcpy
INFO: scrcpy 1.16 <https://github.com/Genymobile/scrcpy>
adb server version (40) doesn't match this client (39); killing...
* daemon started successfully
adb: error: failed to get feature set: no devices/emulators found
ERROR: "adb push" returned with value 1
I believe this means it was unable to push the server app to the device.
Running the commands to setup Wi-Fi using the adb built into the snap, scrpy.adb solved this for me.
$ scrcpy.adb tcpip 5555
$ scrcpy.adb connect 192.168.1.25:5555
connected to 192.168.1.25:5555
$ scrcpy
INFO: scrcpy 1.16 <https://github.com/Genymobile/scrcpy>
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed. 0.6 MB/s (33622 bytes in 0.051s)
[server] INFO: Device: XXXXX XXXXXXX (Android 9)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6.0 NVIDIA 390.25
INFO: Trilinear filtering enabled
INFO: Initial texture: 1440x2560
connect using USB and Just use this command
adb tcpip 5555
It will restart services
and then adb connect <device-ip>:5555
Note: to find device IP, you can navigate to wifi -> YOUR_NETWORK -> IP address
I faced the same issue with the ADB over WiFi connection between my Android 10 phone and Windows 10 PC, which was OK before and suddenly this happened. After reading this question and answers above, I first turned off WiFi on my router and turned it back on.(I repeat not the router, just WiFi) It worked.
I created this powershell script that automates the connection to the phone, to make it work follow the steps and reassign the variables to make it work on your device
#Important!!!
# Enable developer options on your phone and follow the steps below:
# Step 0: Developer options > (USB debugging = true) and (Permanently accept the digital signature of the computer)
# Step 1: Developer Options > Active Screen = true
# Step 2: Developer options > Allow ADB debugging in load-only mode = true
$customPort = '5555'
$ipPhone = '192.168.1.53'
$fullIpPhone = $ipPhone + ':' + $customPort
Write-Host
Write-Host '=============Start script============='
adb usb
Write-Host
Write-Host '=============Start clean network============='
adb devices
adb disconnect
adb kill-server
adb devices
Write-Host
Write-Host '=============Start connection============='
adb tcpip $customPort
# adb tcpip 5555 # $customPort
adb connect $fullIpPhone
# adb connect 192.168.1.53:5555 # $fullIpPhone
adb devices
Write-Host
Write-Host '=============End script============='
I had the same issue. i tried all commands like adb kill-server then
adb tcpip 5555 then
adb connect :5555 but the issue remain same
the IP address which i used to connect ... showing me message unable to connect .....
what i did is
go to phone's Settings
then About phone
then Status`
then check IP address
Now try to connect phone with that IP address
Note : - The problem is the IP address changed which i used to connect
I'll add my two cents.
For some devices, you can directly connect by the address and port as specified in the Wireless Debugging section e.g 192.155.230.241:43522
use adb connect <IP:PORT>
If not successful, use adb connect <IP:5555>
If still not successful, it probably means you will have to pair your device to your machine via adb first. This usually comes on some devices with above commands but if not then,
use adb pair <IP:PORT>
On Device > Developer Options > Wireless Debugging > select Pair device with pairing code
Enter this pairing code on console and device will pair.
Now use adb connect <IP:PORT>
Also note, You don't need USB debugging on or any cable connections first and TCPIP configuring with this way.
In my case just restarting the device worked. Just try if you are lucky!
[Dec-2022] I suffered from this problem around 2-3 months.
I tried all the cmd way but my device(Android 12) was not connecting wirelessly. As my laptop & mobile was both connected 5 ghz connection of my router.
After switching my mobile to normal 2.4 ghz wifi network. it connected with adb connect {ip-of-device} !!
So, if your wifi network supports both the 2.4 and 5 ghz then try connecting your devices(laptop/mobile) to another combination. Then try to connect with adb connect {ip-of-device}

Android - adb tcpip error

I want to connect to the Android device using adb over the network. I am familiar with How can I connect to Android with ADB over TCP? and with https://developer.android.com/guide/topics/usb/index.html and follow the guidelines. Specifically, I did the following:
# adb kill-server
# adb tcpip 5555
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting in TCP mode port: 5555
# adb connect 192.168.1.101:5555
unable to connect to 192.168.1.101:5555:5555
Due to the last error, I also tried
# adb connect 192.168.1.101
unable to connect to 192.168.1.101:5555
I also tried to restart the device itself, but it did not help.
Any reason why it does not work?
Update: To clear any doubts, I am sure that this is my device internal IP address.
I've been having the same issue with my unrooted device. And contrary to popular belief it seems that adb tcpip <port> requires either an emulator or a debug build or root privileges; at least according to the source code.
master branch: https://github.com/android/platform_system_core/blob/master/adb/adb.c#L898 look at should_drop_privileges which prevents https://github.com/android/platform_system_core/blob/master/adb/adb.c#L966 adb_main to open a TCP/IP socket connection.
In older branches the logic for identifying the privileges of adbd were in adb_main itself. See: https://github.com/android/platform_system_core/blob/froyo-release/adb/adb.c#L860
So, to further prove that adbd won't enter TCP/IP mode (even though adb tcpip gives out no errors), look at the following:
adb shell getprop | grep 'ro.secure\|debuggable\|qemu', output for my device:
[ro.secure]: [1]
[ro.debuggable]: [0]
This does not meet the conditions of being able to get a secure value of 0 in adbd, since I'm not running an emulator (which needs TCP/IP by default), I'm not running a debuggable build of Android, and I'm not root.
Furthermore if you issue an adb shell netstat command you'll see that there's nobody listening on port 5037 or 5555 or whatever else you supplied to the tcpip command as expected from an adbd running in TCP/IP mode.
Hope this helps, good luck!
The ability to restart adbd using tcpip transport can vary from device to device. Without knowing exactly which device you're using it's very difficult to know the exact cause.
I tested "adb tcpip 5555" on a Galaxy Nexus (takju) running 4.2.1 and found it to work. I also tested on a couple other devices and those did not work.
I managed to get it to work using root access on a Motorola Droid 3. Note that ro.secure=1 and ro.debuggable=0 still. I simply by manually set service.adb.tcp.port" to "5555" as such:
devbox:~/droid3$ adb shell
shell#cdma_solana:/$ getprop | grep 'ro.secure\|debuggable\|qemu'
[ro.secure]: [1]
[ro.debuggable]: [0]
shell#cdma_solana:/$ su -c 'setprop service.adb.tcp.port 5555'
shell#cdma_solana:/$ exit
devbox:~/droid3$ adb tcpip 5555
restarting in TCP mode port: 5555
devbox:~/droid3$ adb connect 172.16.0.14
connected to 172.16.0.14:5555
devbox:~/droid3$ adb -s 172.16.0.14:5555 shell
shell#cdma_solana:/$
Although I specified 5555 when running "adb tcpip" it gets ignored by the device. It seems that this particular device does not have the required access to set the "service.adb.tcp.port" property without root.
Similarly, you can go back to USB as such:
shell#cdma_solana:/$ getprop | grep adb
[persist.service.adb.enable]: [1]
[ro.sys.atvc_allow_all_adb]: [0]
[persist.adb.tcp.port]: []
[init.svc.adbd]: [running]
[service.adb.tcp.port]: [5555]
shell#cdma_solana:/$ su -c 'setprop service.adb.tcp.port ""'
shell#cdma_solana:/$ exit
devbox:~/droid3$ adb -s 172.16.0.14:5555 usb
restarting in USB mode
devbox:~/droid3$ adb shell
shell#cdma_solana:/$
The reasons that this might not work on other devices vary.
On the Galaxy Nexus I tested, the shell user is able to set the "service.adb.tcp.port" property. It's not clear why this differs at this time.
Interestingly it seems the droid3 will not continue to listen on USB if you enable TCPIP. However, the Galaxy Nexus will.
Hope this helps..
PS. See also: How can I connect to Android with ADB over TCP?
I also met same scenario as your, TCPIP setup succeseed, but adb connet failed. I finally found it's my network problem, the ping also failed under that scenairo.
After i made the ping works, the adb connect works as well. So, my suggestion is to check your network environment.
Hi there I know this is an old question but I was having the same problem. I am not sure it is the same case for you but the problem for me was that I was connecting my Android device through a USB expansion, as soon as I connected the Android device directly to the USB port in my MAC it worked.
Just to clarify try to connect the Android device directly to the computer or try switching the USB port.

setprop doesn't set the property on rooted Android phone

I'm developing an application (using Eclipse + Android SDk/NDK) which uses the micro-usb port on an android phone to connect to peripherals. I am trying to connect to the ADB daemon on the phone via WiFi (tcp port 5555) so I can debug my application in Eclipse. However, I just can't get this to work.
Nothing I try actually results in the ADB daemon on the phone switching to TCPIP mode (as far as I can tell by looking at the output of getprop). The issue seems to be that I can't set the relevant service.adb.tcp.port property on the phone. The development phone I am using is an LG GT540 running CyanogenMod 7.0.0 (Android v2.3.3). Development machine is iMac running OS X Lion.
Here is some relevant information on what I have tried/confirmed/discovered:
The phone is rooted (ru.secure = 0)
Connecting to ADB via USB works fine
The adb service on the Mac is running as root (adb root)
adb shell gives me a shell with super-user access (# prompt, su, ability to edit system files etc)
adb tcpip 5555 does not complain or throw errors when run from a terminal window on the mac but does not set the service.adb.tcp.port property on the phone
setprop service.adb.tcp.port 5555 entered at the # prompt of a terminal window on the phone does not complain or throw errors but does not set the service.adb.tcp.port property
setprop persist.service.adb.enable 0 works from both Mac and phone shells (confirmed by checking ADB daemon stops and getprop returns 0 for the enable property)
setprop persist.service.adb.enable 1 works fine from both Mac and phone shells (confirmed by checking ADB daemon starts and getprop returns 1 for enable property)
The only properties on the phone relating to ADB on the phone are persist.service.adb.enable and init.svc.adbd (if ADB is running)(confirmed by getprop | grep adb on the phone)
Apps on the market that purport to 'automatically' configure ADB for Wifi (such as WiFi ADB) do not work either (tcp.port property is not set and ADB over TCP does not work)
Am I looking too hard here and missing something obvious? There are many posts and articles on the Internet relating to problems getting ADB to work over TCP but they all relate to phone rooting issues.
Is anyone able to shed some light on why I can't seem to set this particular property or suggest any other issue that may be preventing the ADB daemon from running in TCPIP mode?
You need to stop and then restart adbd on the phone for the tcp port property to take effect.
setprop service.adb.tcp.port 5555
stop adbd
start adbd
With any device (rooted or not) it really ought to be as simple as:
Connect to USB
Run adb tcpip <port>
You will see restarting in TCP mode port: <port> spit out the terminal if it worked. If you see nothing, it didn't.
The property is set for you by the daemon. Tutorials telling you to set the propery and reboot adbd are focused on code that needs to execute on-device (i.e. if you are writing an ADB over WiFi app).
However, you mentioned you are using Cyanogenmod. Doesn't CM have an "ADB over Network" setting in Developer Options (I swear it was there in CM7)? I know that their chosen port is 5555. You may be running into conflicts with that feature trying to do it manually. Probably best to use what's built into the system if it's there.
1 line to add on start of application.
setprop service.adb.tcp.port 5555 && stop adbd && start adbd
This resets adb on start!

Categories

Resources