带有Android的Google App Engine - 在真实设备上测试端点

时间:2013-07-31 13:36:36

标签: android google-app-engine google-cloud-endpoints

我一直在关注Creating an Endpoints Backend from an Android Project中的教程。一切都在编译,看起来很有希望。后端已启动,我将CloudEndpointUtils#LOCAL_ANDROID_RUN更改为“true”。但是当我尝试在真实设备(而不是模拟器)上测试应用程序时,我失败了 -

  

java.net.SocketException:20000ms后无法连接到/10.0.2.2(端口8888):isConnected失败:EHOSTUNREACH(无主机路由)

所以我查看了CloudEndpointUtils并看到将LOCAL_ANDROID_RUN设置为'true'会使应用程序在 http://10.0.2.2:8888 中查找DevAppServer,这是模拟器虚拟路由器。 但我不使用模拟器。所以我试图改变持有这个网址的常量 http://127.0.0.1:8888/ ,但仍然没有运气。我现在失败了 -

  

java.net.ConnectException:20000ms后无法连接到/127.0.0.1(端口8888):isConnected失败:ECONNREFUSED(拒绝连接)

我认为这可能是因为我的PC在防火墙后面,所以我禁用了它,但仍然没有。

任何建议都将不胜感激。

7 个答案:

答案 0 :(得分:12)

如果您想在Android Studio中执行此操作,请在build.gradle中按如下方式设置httpAddress

appengine {

  ...

  httpAddress = "0.0.0.0"
}

答案 1 :(得分:7)

完成此任务

  1. 把LOCAL_APP_ENGINE_SERVER_URL_FOR_ANDROID =你的IP地址(这是在你的Android应用程序中)
  2. 右键点击App-Engine项目 - >运行 - >运行配置 - > Web应用程序(左栏​​) - >你的app-engine项目。
  3. 2.(继续)转到Arugments - >添加完全像这样

    - 地址= 0.0.0.0 --port = .......

    *获取您的IP地址,转到cmd - > ipconfig - >在步骤1中添加(带端口号的IPV4地址)

    重要提示:如果您从加密狗或某些动态IP互联网服务访问互联网,请每次更改

    谢谢......这完美无缺

答案 2 :(得分:5)

这里有很多答案,但我发现它们凌乱或不完整。要在计算机上运行本地服务器并使用真实设备对其进行测试,请执行以下操作:

1)将httpAddress = "0.0.0.0"添加到后端(Google Cloud Endpoint)模块的appengine文件中的build.gradle块,如下所示:

appengine {
    ...
    httpAddress = "0.0.0.0"
}

根据对问题的评论,这意味着“将从任何地方接受”。

2)在本地运行后端模块(即启动Web服务器)。这很简单:在下拉菜单中选择后端配置,然后按绿色按钮。你可以find more detailed instructions here

您现在应该可以打开浏览器(在您的计算机上)并导航到http://localhost:8080/并查看包含“Hello,Endpoints!”的网页和许多其他的东西。

3)找到您计算机的IP地址(在Mac上转至系统偏好设置 - >网络),然后将其设置为Android应用代码中的根网址,如下所示:

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

这就是全部!

答案 3 :(得分:1)

从无本地主机地址本地测试Google云端点时--address =" 0.0.0.0"设置可能还不够。

从非localhost访问时,我的端点发出404 Not Found错误。我通过在API decoration中包含 path 参数解决了这个问题。

我的API注释看起来像这样:

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

答案 4 :(得分:0)

添加

--address="0.0.0.0" 

作为app引擎服务器地址参数 接受所有传入的连接。

答案 5 :(得分:0)

按照用户248187的2. point post           2.(继续)转到Arugments - >添加完全像这样               --address = 0.0.0.0 --port = .......

现在,在客户端Android代码上,您需要将服务的请求IP(RootURL)更改为本地IP。您可以使用builder.setRootUrl()来实现。你在android客户端上为outomatice添加一个单位是好的,然后它可以快速在本地和部署的app-engiene之间切换。如:

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

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(); 

答案 6 :(得分:-2)

地址 10.0.2.2 用于使用模拟器访问localhost,使用真实设备访问localhost,请使用以下步骤

- 打开你的命令行(cmd)运行ipconfig。 - 获取计算机的ipaddress并用它替换 10.0.2.2 , - 在您的设备上建立并运行。

希望这有助于某人