刚接到需求要实现USB reverse tether时, 还不清楚reverse tether 是个什么东东,经过几天的study, 原来USB reverse tether就是反向应用USB tether. 即Android 设备通过USB连接利用PC的共享连接, 实现上网的功能.
目前网上有很多攻略通过一些破解软件让android 手机实现这一功能, 这些方法都是可行的,但普通用户参考网上的攻略想使能这一功能时, 因为不了解内部机制, 只是照搬,实现过程中往往遇到一些问题, 导致最终费了很多功夫却上不了网. 如果android 设备厂商能把这一功能做在系统中应该会受用户欢迎.
总结一下实现这一功能要注意的问题:
首先是PC 端:
1. 需要安装Android USB Ethernet/RNDIS driver.
当用户插入USB 线连接PC 和android device 后, 打开android device 上的setting 程序, 点击Wireless&networks->Tethering&portable hotsport->USB tethering打开USB tethering, PC 端会自动跳出新设备安装向导. 按向导一步步添加你 的RNDIS driver(inf 文件里要有匹配你设备的usb VID/PID), 不要安装PC 默认驱动
2. PC 要支持Internet 连接共享
很多公司的网络, 会把Internet 连接共享用组策略屏蔽掉, 即"我的连接"->"属性"对话框中你看不到"高级"这一选项, 而"允许其他网络用户通过此计算机的internet连接来连接"这项设置主要是在"高级"属性页里配置的. 如果不支持, 就意味着你用公司电脑没办法使用这一功能.
即使PC 支持Internet 连接共享, 但你所有的设置配置完后,依旧不能上网, 但你的PC 和你的android device 可以互相ping 通,极大可能是你的PC 连接共享有问题, 换一台电脑或重装PC端操作系统基本可以解决问题.
其次看一下device 端
1. Setting 里要有USB tethering设置项
很多android 产品把这项移除掉了, 控制这一选项的flag 在packages/apps/Settings/res/values/bools.xml 文件中
<bool name="has_tether_settings">true</bool>
2. device端用ping 命令去检查网络连接时, 要用ping -c 4 XXX.XXX.XXX.XXX 这种格式, 不能只用ping XXX.XXX.XXX.XXX ,否则ping 命令的调试信息会一直输出, 没办法停掉
3. PC 端网络连接配置好后,要在device 端设置默认网关.
#busybox route add default gw 192.168.42.xxx (xxx 是PC 端共享连接设置IP)
这一步是整个过程的关键, 因为要有root 权限,对于玩家可以在网上下载root 工具, 对于系统开发者则要考虑什么时候调用这一命令, 而且目前实现是用静态IP 和路由,没有实现动态分配, 不适合在局域网中多人使用. 要考虑如何实现动态分配.
--2012.08.30