前言
在某些情况下,android测试机是需要隔绝外部网络环境,但是有需要可以连接内网,因此近日将研究下了android如何通过usb共享上网以及如何去除wifi、蓝牙、数据等功能。
各个通信模块
wifi模块
HAL层
/frameworks/opt/net/wifi/service/jni/com_android_server_wifi_nan_WifiNanNative.cpp
驱动层
/frameworks/opt/net/wifi/service/jni/com_android_server_wifi_nan_WifiNanNative.cpp
蓝牙模块
HAL层
/system/bt/btcore/src/hal_util.cc
驱动层
/kernel/lge/hammerhead/drivers/bluetooth/
NFC模块
/system/nfc/halimpl/bcm2079x/nfc_nci.c
伪造网络连接状态
/frameworks/base/core/java/android/net/ConnectivityManager.java
ublic NetworkInfo getActiveNetworkInfo() {
NetworkInfo result = null;
try {
result = mService.getActiveNetworkInfo();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
//~~~ Forge result
if(result ==null){
result = new NetworkInfo(1,0,"WIFI","");
result.setExtraInfo("Test");
result.setIsAvailable(true);
}
//~~~
return result;
}
手机adb shell命令实现配置
1、USBTether开启USB网络共享
service call connectivity 33 i32 1
调用connectivity
服务的int setUsbTethering(boolean enable)
33
表示在文件IConnectivityManager.aidl
中是第33
个api函数;i32
表示int32
;1
表示true
;
在android不同版本下命令如下,8.0后该函数参数个数改变,具体还需分析源码:
service call connectivity 32 i32 1 on Ice Cream Sandwich (4.0)
service call connectivity 33 i32 1 on Jelly Bean (4.1 to 4.3)
service call connectivity 34 i32 1 on KitKat (4.4)
service call connectivity 30 i32 1 on Lollipop (5.0)
service call connectivity 31 i32 1 on Lollipop (5.1)
service call connectivity 30 i32 1 on Marshmallow (6.0), untested
service call connectivity 41 i32 1 on Samsung Marshmallow (6.0)
service call connectivity 33 i32 1 on Nougat (7.0)
service call connectivity 39 i32 1 on Samsung Nougat (7.0)
2、配置ip
ifconfig rndis0 192.168.137.101 netmask 255.255.255.0 up
3、创建新接口
ndc network create 1
4、修改接口
先把rndis0从老接口移除,不确定是否一定99,可以通过下个命令的日志来看
ndc network interface remove 99 rndis0
5、配置路由
创建路由表,网关根据自己实际设置
ndc network route add 1 rndis0 0.0.0.0/0 192.168.137.1
6、指定DNS
ndc resolver setnetdns 1 localdomain 192.168.102.81 192.168.102.82
7、指定缺省的网络接口
ndc network default set 1