Android12系统上支持Android手机的usb网络共享
Android系统需要支持Android手机通过usb共享过来的网络需要修改以下代码
1.修改内核,添加这几项内核驱动,kernel驱动默认有源码,我们只需配置上就行
+CONFIG_USB_USBNET=y
+CONFIG_USB_IPHETH=y
+CONFIG_USB_NET_RNDIS_HOST=y
2.需要修改dhcp服务,增加usb网络节点的添加,如下:
--- a/device/rockchip/common/rootdir/init.rockchip.rc
+++ b/device/rockchip/common/rootdir/init.rockchip.rc
@@ -65,6 +65,11 @@ service dhcpcd_eth0 /system/bin/dhcpcd -aABDKLdisabledoneshot+service dhcpcd_usb0 /system/bin/dhcpcd -aABDKL
+ class late_start
+ disabled
+ oneshot
+service iprenew_wlan0 /system/bin/dhcpcd -nclass maindisabled
@@ -75,6 +80,11 @@ service iprenew_eth0 /system/bin/dhcpcd -ndisabledoneshot+service iprenew_usb0 /system/bin/dhcpcd -n
+ class late_start
+ disabled
+ oneshot
+service iprenew_p2p /system/bin/dhcpcd -nclass maindisabled
3.android系统默认只会给eth wlan,移动网络节点去分配ip地址,所以我们需要去适配usb驱动生成的usb0网络节点。
这里有两种办法,1).一种就是修改驱动直接让usb网络驱动生成eth网络节点,但这样会影响以太网的功能,
2)第二就是我们修改framework,通过广播告诉,系统我们切到usb共享网络,需要给usb0分配ip地址。这个时候以太网就不能使用了
我们产品需要以太网功能,所以使用第二种,做一个动态切换的功能,修改如下:
--- a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetServiceImpl.java
+++ b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetServiceImpl.java
@@ -27,9 +27,15 @@ import android.os.Binder;import android.os.Handler;import android.os.HandlerThread;import android.os.RemoteException;
+import android.os.SystemProperties;import android.provider.Settings;import android.util.Log;import android.util.PrintWriterPrinter;
+//wade add
+import android.content.BroadcastReceiver;
+import android.content.Intent;
+import android.content.IntentFilter;
+import com.android.internal.util.IndentingPrintWriter;@@ -72,13 +78,18 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {== PackageManager.PERMISSION_GRANTED;}+public void start() {Log.i(TAG, "Starting Ethernet service");
+ IntentFilter intentFilter = new IntentFilter(); //创建IntentFilter实例
+ intentFilter.addAction("rgb.intent.action.SET_ETH_IFACE"); //接收网络状态广播
+ Receiver mIntentReceiver = new Receiver();
+ mContext.registerReceiver(mIntentReceiver,intentFilter);//注册广播HandlerThread handlerThread = new HandlerThread("EthernetServiceThread");handlerThread.start();mHandler = new Handler(handlerThread.getLooper());
-
+mTracker = new EthernetTracker(mContext, mHandler);mTracker.start();@@ -262,4 +273,27 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {mHandler.dump(new PrintWriterPrinter(pw), "EthernetServiceImpl");pw.decreaseIndent();}
+
+ public class Receiver extends BroadcastReceiver{
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if("rgb.intent.action.SET_ETH_IFACE".equals(action)){
+ String iface = intent.getStringExtra("EXTRA_ETH_IFACE");
+ if(iface==null) iface="eth0";
+ SystemProperties.set("net.eth.iface", iface);
+ Log.i(TAG, "restart EthernetNetworkFactory");
+ //enforceConnectivityInternalPermission();
+ enforceAccessPermission();
+ // mTracker.stop();
+ //重启网络,即调用start
+ mTracker.start();
+ //}
+ }
+ }
+ }
+
+
+
+}--- a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetTracker.java
+++ b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetTracker.java
@@ -41,6 +41,8 @@ import android.text.TextUtils;import android.util.ArrayMap;import android.util.Log;import android.net.util.NetdService;
+//wade add
+import android.os.SystemProperties;import com.android.internal.annotations.VisibleForTesting;import com.android.internal.util.IndentingPrintWriter;
@@ -419,6 +421,10 @@ final class EthernetTracker {mDefaultInterface = iface;}+ iface = SystemProperties.get("net.eth.iface", "eth0");
+
+ Log.i(TAG, "wade maybeTrackInterface: " + iface);
+if (mIpConfigForDefaultInterface != null) {updateIpConfiguration(iface, mIpConfigForDefaultInterface);mIpConfigForDefaultInterface = null;
apk这边需要添加发送光广播的代码如下:
Intent intent = new Intent("rgb.intent.action.SET_ETH_IFACE");
intent.putExtra("EXTRA_ETH_IFACE","usb0");
sendBroadcast(intent);
这样就可以动态的切到usb0网络,如下:
注意:以上只针对android手机的usb网络共享有效。苹果手机需要另做适配
Android12系统上支持Android手机的usb网络共享相关推荐
- android usb共享代码,让Android手机具有USB网络共享功能,可以通过USB连接到Internet...
第0章: 什么是USB网络共享功能 最近漫游Windows Phone的世界时,最新鲜的感觉之一就是诺基亚Lumia手机具有有趣的USB绑定功能,该功能使您的手机可以通过USB电缆连接到计算机,您可以 ...
- Android手机通过USB网络共享限速
在 Android上都有USB网络共享的功能,可以直接在手机上通过USB口使用电脑端的网络,有些手机叫"USB绑定",有些手机叫"网络共享". 简单说明一下US ...
- android 8 usb 未连接网络,让安卓手机拥有USB网络共享功能通过USB连上网络
第零章:什么是USB网络共享功能 最近在Windows Phone的世界里漫游了一圈,其中一个很新鲜的感受就是诺基亚Lumia手机有一个很有意思的USB网络共享功能,该功能能让你的手机只要通过USB数 ...
- Android手机通过USB数据线共享Linux电脑网络
这里要讲述的是手机通过usb数据线共享电脑(linux系统)的网络来自由上网.通过USB数据线将手机与电脑相连, 再分别在电脑和手机上虚拟出一个网络接口用于网络通信, 这很类似于VPN与虚拟机上网的原 ...
- ubuntu18连不上安卓手机的USB网络共享
把自己踩过的坑一一分享,希望能节约大家解决问题的时间. bug: 由于新装的Ubuntu18系统在安装的时候没装好wifi适配器,还没有路由器可以连网线,被迫只能用USB口连接电脑和手机,但连接好并点 ...
- 使用USB在PC上操作Android手机
使用USB在PC上操作Android手机 目录 使用USB在PC上操作Android手机 我的应用场景 环境介绍 基本原理 安装方法 几个常用命令 后记 我的应用场景 想上班的时候,通过笔记本直接阅读 ...
- Android手机的USB
Android手机的USB Android的手机很少使用USB Host功能,不过很多平板上倒是有,其实Android USB Host功能比较简单,就是驱动USB Controller和Port的驱 ...
- 电脑usb android上网,让你的Android手机通过USB共享电脑上网
转贴:来自 http://www.diypda.com/viewthread.php?tid=150277 首先这不是一篇关于 如何 让你的 Android 手机 通过 USB 共享 电脑 上网 (这 ...
- Android系统中如何添加USB网络共享
Android系统中如何添加USB网络共享 类别 需求 索引类别 USB网络共享 问题描述 平台是RT1296,在Android系统中已经有支持USB网络共享,但相应的产品系统中还未开启USB网络共享 ...
最新文章
- lucene查询语法,适用于ELk:kibana查询
- textread函数_matlab基础textread函数实例
- 2018-2019年新一代AI领域十大最具成长性技术展望
- java 中调用window系统中的文件,或者执行命令(shell、.CMD、.EXE)并获取返回值
- 成都python培训比较好的机构-成都Python培训班哪个好,怎样才能不走弯路学习
- 推荐一个Android开源项目-AisenWeiBo
- redis安装,主从集群
- 第5章 Python 数字图像处理(DIP) - 图像复原与重建4 - 指数噪声
- Precision-Recall Curve
- 蓝桥杯JAVA省赛2013-----B------2(马虎算式)
- Centos R安装
- Python私有变量的用法
- 【flink】Flink 1.12.2 源码浅析 : Task数据输入
- 【Shiro第一篇】 Shiro权限框架简介
- 苹果6swifi温度过高 iphone6s温度过高提醒修复教程
- 国内商务邮箱品牌——TOM企业邮箱
- MapReduce中名字的通俗解释--故事会
- 数据挖掘常用算法总结
- Flutter Visibility Widget
- Python量策风指标