Been having some trouble with this too, thankfully I managed to find a fix (it does require you build the engine from source).
If you look at the GetLocalHostAddr function located in ‘Engine\Source\Runtime\Sockets\Private\Android\SocketSubsystemAndroid.cpp’ you’ll see the following code:
This appears to be the reason that 127.0.0.1 is getting returned. By looking at the rest of the function you can see that it actually works out what the IP of the device should be. I just removed the above lines and it now works as expected.
I’m sure there must be a reason that it is implemented this way but I can’t quite figure that one out!