Google App Engine with Android - testing endpoints on real device

瘦欲@ 提交于 2019-11-27 18:33:36

问题


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.


回答1:


Add the

--address="0.0.0.0" 

as the app engine server address parameter to accept from all incoming connections.




回答2:


If you want to do this in Android Studio, set httpAddress as follows in your build.gradle

appengine {

  ...

  httpAddress = "0.0.0.0"
}



回答3:


To accomplish this

  1. Put LOCAL_APP_ENGINE_SERVER_URL_FOR_ANDROID = your IP address (this is in your android App)
  2. Right click on App-Engine project -> Run-> Run Configurations -> Web Application(left bar) -> your app-engine project.

2.(Contniued) Go to Arugments -> add exactly like this

--address=0.0.0.0 --port=.......

*to get your ip address, go to cmd -> ipconfig -> add (IPV4 address with port number) in step 1

important note: Please change this everytime in case you are accessing internet from dongle or some dynamic IP internet service

Thankyou ... this works perfectly




回答4:


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 the appengine block in your build.gradle file of the backend (Google Cloud Endpoint) module, like this:

appengine {
    ...
    httpAddress = "0.0.0.0"
}

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:

MyApi.Builder builder = new MyApi.Builder(
                            AndroidHttp.newCompatibleTransport(),
                            new AndroidJsonFactory(), 
                            null
).setRootUrl("http://192.168.1.36:8080/_ah/api/")

That's all!




回答5:


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:

@ApiMethod(name="saveResponse", httpMethod = "post", path="saveResponse)
public Response saveResponse(@Named("answerString") String responseString)



回答6:


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:

//........................

private boolean mFlatLocalHostServer=true;  
private static final String LOCAL_IP = "192.168.1.11"; //Ip debug server
public static final String  LOCAL_SERVER_IP = "http://"+LOCAL_IP+":8888/_ah/api";
//......................
Mydataendpoint.Builder builder = new Mydataendpoint.Builder(
                                AndroidHttp.newCompatibleTransport(),
                                new GsonFactory(),
                                        mCredential); 

//request the  service to local ip 
if(mFlatLocalHostServer){
         builder.setRootUrl(LOCAL_SERVER_IP); 
}

Mydataendpoint service =  builder.build();
response=service.insertMyData(mydata).execute(); 



回答7:


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



来源:https://stackoverflow.com/questions/17971954/google-app-engine-with-android-testing-endpoints-on-real-device

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!