我正在考虑尝试在 Android 上实现 VPNService 以进行数据包过滤和报告,我最初一直在研究这个项目:
https://github.com/hexene/LocalVPN
除此之外,我一直将 Google 的 ToyVpn 视为了解我可以使用 VPNService 做什么和不能做什么的基础。两者的唯一问题是在构建 VPNService 时启动非阻塞 VPN,然后轮询文件描述符,然后等待大约 100 毫秒。两者都有评论表明这不是这样做的方法。我假设他们运行非阻塞 VPN,因为阻塞 VPN 要复杂得多?
我还假设(错误地)添加该行
builder.setBlocking(true);
会解决问题,但是虽然 VPN 服务似乎做了一些事情,但它似乎没有做任何有用的事情,因为如果你连接到它并打开浏览器会话,一切都会超时。就好像添加这条线会导致数据包被丢弃。
目的是将它作为一个阻塞 VPN,这样我就可以消除轮询文件描述符的需要,我确信这对电池寿命不利。