adb reverse tcp:8080 tcp:8080能否支持非localhost域名转发?
解决Android通过ADB反向转发访问自定义域名的问题
问题核心原因
adb reverse tcp:8080 tcp:8080实现的是Android设备端口到主机端口的转发,但Android设备访问my.example.com:8080时,会优先使用自身系统的hosts文件解析域名,而非主机的hosts配置。即使主机把my.example.com指向127.0.0.1,Android设备没做对应配置的话,域名解析结果不指向本地127.0.0.1,请求自然不会走ADB转发的端口。
可行解决方法
方法1:修改Android设备的hosts文件
- 若设备已root:
- 进入设备shell:
adb shell - 挂载系统分区为可写:
mount -o remount,rw /system(部分设备路径为/system_root,需自行适配) - 添加域名映射:
echo "127.0.0.1 my.example.com" >> /system/etc/hosts - 恢复只读挂载:
mount -o remount,ro /system
- 进入设备shell:
- 非root设备可临时使用adb命令推送修改后的hosts文件(部分系统版本支持):
- 在本地创建包含
127.0.0.1 my.example.com的hosts文件 - 执行
adb push ./hosts /sdcard/ - 进入shell后复制到系统目录:
cp /sdcard/hosts /system/etc/hosts(需确保系统分区可写,部分设备可能受限)
- 在本地创建包含
方法2:应用内直接映射域名(无需修改设备)
在Android应用的网络配置或代码中,将my.example.com直接替换为127.0.0.1,或者通过OkHttp等网络库的拦截器实现域名到127.0.0.1的映射,绕开设备系统的域名解析环节,直接利用ADB的端口转发规则。
方法3:临时代理方案(测试场景用)
在Android设备的网络设置中,将代理设置为127.0.0.1:8080,此时所有网络请求会走本地端口,结合ADB转发规则也能实现访问,但此方法会影响设备其他网络请求,仅适合临时测试。
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

