android avd 连接外部服务器的方法
开发 android 程序,通常会有网络连接,当我们使用模拟器( avd )运行需要网络权限的 app 时候,
需要注意以下两点。
1、组网
avd 连接到外部网络,通常存在两种情况: avd 与服务在同一台机器上; avd 与服务在不同的机器
上。
1) avd 与服务在同一台机器上。这时候 avd 要连接服务器,该用哪个 IP 地址呢?可能有人会想到
127.0.0.1 ( localhost )。但是仔细想一想, avd 是一个模拟器,相当于一个虚拟机, localhost 就连
到了自己,这个是行不通的。 avd 是一个虚拟机,相当于一台独立的机器,因此有自己独立的网络 IP
地址。所以就常用的就是连接服务器的外网(在这个局域网或 internet 上的) IP 地址。
有人会问,我的服务器是通过 DHCP动态获取 IP 地址的,且我得 avd 与服务器在同一机器上,每次服
务器启动得 IP 地址都不一致,那我每次都得修改 app 配置文件中的 IP 地址?这个确实是一个麻烦事
情,不过还好, avd 提供了类似 127.0.0.1 的环回 IP 地址,其实是一个桥接地址更准确,他让你能够
连接到运行 avd 的服务器,这个 IP 地址就是10.0.2.2
2)avd 与服务器在不同的机器上。这种组网下只能连接服务器的外网 IP 地址。
2、 android app 配置
网络通了之后,可能会遇到 app 连接服务器失败的问题,其错误是 ConnectionRefused ,这种错误
一般是 IP 能够连通,但是连接某个特定的端口被拒绝了。仔细查看其异常信息,会发现有这么一个
信息:
socket failed :EACCES (Permission denied)
没有权限。
这个是 app 没有申请网络权限,在 app 的 AndroidManifest.xml 文件中,需要申请网络访问权限:
...
uses-permission android:name="android.permission.INTERNET"
...
加上权限申请之后,就可以工作了。