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网络共享相关推荐

  1. android usb共享代码,让Android手机具有USB网络共享功能,可以通过USB连接到Internet...

    第0章: 什么是USB网络共享功能 最近漫游Windows Phone的世界时,最新鲜的感觉之一就是诺基亚Lumia手机具有有趣的USB绑定功能,该功能使您的手机可以通过USB电缆连接到计算机,您可以 ...

  2. Android手机通过USB网络共享限速

    在 Android上都有USB网络共享的功能,可以直接在手机上通过USB口使用电脑端的网络,有些手机叫"USB绑定",有些手机叫"网络共享". 简单说明一下US ...

  3. android 8 usb 未连接网络,让安卓手机拥有USB网络共享功能通过USB连上网络

    第零章:什么是USB网络共享功能 最近在Windows Phone的世界里漫游了一圈,其中一个很新鲜的感受就是诺基亚Lumia手机有一个很有意思的USB网络共享功能,该功能能让你的手机只要通过USB数 ...

  4. Android手机通过USB数据线共享Linux电脑网络

    这里要讲述的是手机通过usb数据线共享电脑(linux系统)的网络来自由上网.通过USB数据线将手机与电脑相连, 再分别在电脑和手机上虚拟出一个网络接口用于网络通信, 这很类似于VPN与虚拟机上网的原 ...

  5. ubuntu18连不上安卓手机的USB网络共享

    把自己踩过的坑一一分享,希望能节约大家解决问题的时间. bug: 由于新装的Ubuntu18系统在安装的时候没装好wifi适配器,还没有路由器可以连网线,被迫只能用USB口连接电脑和手机,但连接好并点 ...

  6. 使用USB在PC上操作Android手机

    使用USB在PC上操作Android手机 目录 使用USB在PC上操作Android手机 我的应用场景 环境介绍 基本原理 安装方法 几个常用命令 后记 我的应用场景 想上班的时候,通过笔记本直接阅读 ...

  7. Android手机的USB

    Android手机的USB Android的手机很少使用USB Host功能,不过很多平板上倒是有,其实Android USB Host功能比较简单,就是驱动USB Controller和Port的驱 ...

  8. 电脑usb android上网,让你的Android手机通过USB共享电脑上网

    转贴:来自 http://www.diypda.com/viewthread.php?tid=150277 首先这不是一篇关于 如何 让你的 Android 手机 通过 USB 共享 电脑 上网 (这 ...

  9. Android系统中如何添加USB网络共享

    Android系统中如何添加USB网络共享 类别 需求 索引类别 USB网络共享 问题描述 平台是RT1296,在Android系统中已经有支持USB网络共享,但相应的产品系统中还未开启USB网络共享 ...

最新文章

  1. lucene查询语法,适用于ELk:kibana查询
  2. textread函数_matlab基础textread函数实例
  3. 2018-2019年新一代AI领域十大最具成长性技术展望
  4. java 中调用window系统中的文件,或者执行命令(shell、.CMD、.EXE)并获取返回值
  5. 成都python培训比较好的机构-成都Python培训班哪个好,怎样才能不走弯路学习
  6. 推荐一个Android开源项目-AisenWeiBo
  7. redis安装,主从集群
  8. 第5章 Python 数字图像处理(DIP) - 图像复原与重建4 - 指数噪声
  9. Precision-Recall Curve
  10. 蓝桥杯JAVA省赛2013-----B------2(马虎算式)
  11. Centos R安装
  12. Python私有变量的用法
  13. 【flink】Flink 1.12.2 源码浅析 : Task数据输入
  14. 【Shiro第一篇】 Shiro权限框架简介
  15. 苹果6swifi温度过高 iphone6s温度过高提醒修复教程
  16. 国内商务邮箱品牌——TOM企业邮箱
  17. MapReduce中名字的通俗解释--故事会
  18. 数据挖掘常用算法总结
  19. Flutter Visibility Widget
  20. Python量策风指标

热门文章

  1. Android SurfaceView 的使用
  2. RISC-V 架构及MRS 开发环境介绍
  3. CockroachDB架构——SQL层
  4. storge engines in mysql
  5. 数据治理:元数据管理篇之Altas
  6. 全球及中国汽车驱动IC行业发展策略及投资可行性研究报告2022-2028年
  7. 中科院数学所计算机科学与技术,张松懋 - 中国科学院大学 - 计算机科学与技术学院...
  8. TFT-LCD显示直线、矩形、圆形
  9. 数据仓库、数据中台、数据湖都是什么?
  10. 括号匹配编码c语言,括号匹配(c语言实现)