i've been following the tutorial in Creating an Endpoints Backend from an Android Project. Everything is compiling and looks promising. The backend is up, i changed CloudEndpointUtils#LOCAL_ANDROID_RUN to 'true'. but when i try to test the app on a real device (not emulator) im failing on -
java.net.SocketException: failed to connect to /10.0.2.2 (port 8888) after 20000ms: isConnected failed: EHOSTUNREACH (No route to host)
So i looked at CloudEndpointUtils and saw that setting LOCAL_ANDROID_RUN to 'true' makes the app look for DevAppServer in http://10.0.2.2:8888
, which is the emulator virtual router.
but im not using the emulator. so i tried to change the constant holding this url to http://127.0.0.1:8888/
but still no luck. im now failing on -
java.net.ConnectException: failed to connect to /127.0.0.1 (port 8888) after 20000ms: isConnected failed: ECONNREFUSED (Connection refused)
I thought it might be because my PC is behind a firewall, so i disabled it, but still nothing.
any suggestion would be appreciated.
There are many answers here but I've found them messy or uncomplete. To run the local server on your computer and test it with a real device do this:
1) Add
httpAddress = "0.0.0.0"
to theappengine
block in yourbuild.gradle
file of the backend (Google Cloud Endpoint) module, like this:According to a comment on the question this means that 'will accept from anywhere'.
2) Run your backend module locally (ie. start the web server). This is trivial: select the backend configuration on the drop-down menu and press the green button. You can find more detailed instructions here.
You should now be able to open a browser (on your computer) and navigate to
http://localhost:8080/
and see a webpage with 'Hello, Endpoints!' and many other stuff.3) Find your computer's IP address (on a Mac go to System Preferences -> Network) and then set it as the root url in your Android app code, like this:
That's all!
Add the
as the app engine server address parameter to accept from all incoming connections.
If you want to do this in Android Studio, set httpAddress as follows in your build.gradle
When locally testing Google cloud endpoints from none localhost address --address="0.0.0.0" setting might not be sufficient.
My Endpoints were giving 404 Not Found error when accessing from non localhost. I resolved it by including path parameter in API decoration.
My API annotation looked like this:
Address 10.0.2.2 is for accessing localhost using the emulator, to access localhost using a real device, use the following steps
-open your commandline (cmd) run ipconfig. -Get the ipaddress of your computer and replace 10.0.2.2 with it, -Build and run on your device.
Hope this helps someone
Follow the 2. point post by user248187 2.(Contniued) Go to Arugments -> add exactly like this --address=0.0.0.0 --port=.......
Now, On the client android code you need change the request IP (RootURL) of your services to local IP. You can do that by use builder.setRootUrl(). It is good that you add a flat for outomatice it on you android client, then it can switch between local and deployed app-engiene quickly. Such as: