方案
今天给大家分享一下如何通过命令行动态设置Android手机的代理,其实如果只有一台手机,直接执行下面的命令行即可:
设置代理 adb shell settings put global http_proxy ip:port 清除代理 adb shell settings put global http_proxy :0
但是当宿主机挂载了多台设备的时候,就需要指定设备了,正常来说直接-s指定设备SN号即可,但是这里会有些问题,代理并不会生效,需要将原生的adb命令用pure-python-adb 这个Python库代替,这个是通过纯Python实现的ADB客户端,原理如下:
再通过Flask-Script把设置代理和清除代理封装成命令行工具,实现代码如下:
from flask_script import Manager from ppadb.client import Client as AdbClient @manager.option('-sn', '--sn', dest='sn', default='', help='设备sn号') @manager.option('-proxy', '--proxy', dest='proxy', default='', help='代理地址加端口') def set_proxy(sn, proxy): try: client = AdbClient(host="127.0.0.1", port=5037) device = client.device(sn) device.shell("settings put global http_proxy {0}".format(proxy)) LOGGER.debug("settings put global http_proxy {0}".format(proxy)) except Exception as e: LOGGER.error(e) @manager.option('-sn', '--sn', dest='sn', default='', help='设备sn号') def clean_proxy(sn): try: client = AdbClient(host="127.0.0.1", port=5037) device = client.device(sn) device.shell("settings put global http_proxy :0") LOGGER.debug("settings put global http_proxy :0") except Exception as e: LOGGER.error(e)
需要注意的是通过这种方式自动设置代理后WiFi高级选项中是看不到代理信息的而且无法取消,必须通过命令取消。