Android 有线网开发调试总结

Android 有线网开发调试总结

文章目录

  • [Android 有线网开发调试总结](#Android 有线网开发调试总结)
    • 一、前言
    • 二、有线网开发
    • 三、其他
      • [1、Android 有线网开发调试小结](#1、Android 有线网开发调试小结)
      • [2、Android13 有线网开关研究](#2、Android13 有线网开关研究)
      • [3、Android9、11 有线网络开关设置](#3、Android9、11 有线网络开关设置)
      • [4、Android13 实现有线网络和wifi共存](#4、Android13 实现有线网络和wifi共存)
      • [5、Android11 有线网Score分析流程](#5、Android11 有线网Score分析流程)

一、前言

如果开发有线网相关功能,必须先掌握基本api知识和相关广播的监听;

Android13 之后有线网是有暴露开关控制api的,Android11 之前是需要自己添加开关控制接口的。

本简单介绍有线网开发基本知识,有兴趣的可以看看。

二、有线网开发

1、开关

复制代码
//开关
EthernetManager ethernetManager = (EthernetManager)context.getSystemService(Context.ETHERNET_SERVICE);
ethernetManager.setEthernetEnabled(isEnable);//true、false参数表示开关

Android 11已经更旧的版本,系统未暴露有线网开关api,需要自己在EthernetManager里面添加接口。

Android13 或者更新的版本,系统才暴露有线网开关api接口,进行开关控制,

但是默认是没有开关状态记录,需要自定义属性进行记录。

2、相关日志

复制代码
有线网节点关键字是:eth
上层关键字:EthernetTracker、EthernetNetwork、ConnectivityService
分配ip的关键字:DHCP

日志过滤示例:
logcat | grep -i "eth"
logcat | grep -iE "EthernetTracker|EthernetNetwork|ConnectivityService"
logcat | grep -iE "EthernetTracker|EthernetNetwork|ConnectivityServic|eth"

有线网正常开启,并自动获取到ip部分日志:

复制代码
logcat | grep -iE "EthernetTracker|EthernetNetwork|ConnectivityService"
04-26 17:23:37.997   821  1038 I EthernetTracker: maybeTrackInterface: eth0 //打开节点
04-26 17:23:38.191   821  1038 D EthernetNetworkFactory: updateInterfaceLinkState, iface: eth0, up: false
04-26 17:23:41.257   821  7570 I EthernetTracker: interfaceLinkStateChanged, iface: eth0, up: true //节点启动成功
04-26 17:23:41.307  1231  5322 D DhcpClient: Broadcasting DHCPREQUEST ciaddr=0.0.0.0 request=192.168.31.6 serverid=192.168.31.1 //分配到ip
04-26 17:23:41.335   821  1040 D ConnectivityService: [113 ETHERNET] EVENT_NETWORK_INFO_CHANGED, going from CONNECTING to CONNECTED
04-26 17:23:41.337   821  1040 D ConnectivityService: Setting DNS servers for network 113 to [/192.168.31.1] 
04-26 17:23:41.339   821  1040 D ConnectivityService: Adding iface eth0 to network 113 //网络注册正常

上面可以看到,打开有线网开关到自动获取有线网ip大概需要5秒。有时候只要1-2秒就可以。

(3)相关广播
复制代码
Android没有有线网插拔变化的广播,ip变化可以用监听到。
ConnectivityManager.CONNECTIVITY_ACTION:网络ip变化广播,wifi和有线网通用
String ETHERNET_STATE_CHANGE = "action.ebsw.eth.status.change"; //自定义的底层回调后有线网络广播,这个是系统底层监听io口回调的。
(4)demo示例

上面是开启有线网后显示ip的基本信息。

设置静态ip和代理信息后的显示:

有线网demo 的简单说明:

复制代码
1、Android 原生没有有线网开关状态,需要自定义属性进行开关记忆;所以默认没设置switch开关控件;
2、有线网开关状态之前方案都是使用Settings.Global.ethernet 开关记录的,3588 AN15 使用的是prop属性记录;
3、静态ip设置:要和自动获取的ip在同一个网段;网关一般设置成X.X.X.1,设置错误会导致无法上网;
4、代理设置:端口号有范围:1-65535,以前好像遇到过311D2 wifi设置端口号范围超出数值会导致系统重启。
5、有些方案设置静态ip或者代理需要关开一次有线网才能生效。
6、有线网接入状态是导入了定制包的,只针对特定系统,其他系统不适用,直接使用估计会崩溃,
其他系统调试需要去除判断有线网接入部分代码,重新编译apk使用;
底层是如何实现判断有线网接入的,没有去研究分析,大概是通过io是否接入判断的。

有线网调试demo源码和apk.zip 下载地址:

https://download.csdn.net/download/wenzhi20102321/90780716

三、其他

1、Android 有线网开发调试小结

Android13 之后有线网在EthernetManager有暴露开关控制api的,Android11 之前是需要自己添加开关控制接口的。

有线网开关默认是没有开关状态记录,需要自定义属性进行记录。

2、Android13 有线网开关研究

主要 对比 Android9 自己开发的有线网开关代码 :

https://blog.csdn.net/wenzhi20102321/article/details/131871354

3、Android9、11 有线网络开关设置

Android系统开发中发现,Android8以后有线网络开关没有api了,

需要自己进行通路建造,或者自己实现开关控制。

这部分修改在Framework 的Java层进行修改即可完成:

https://blog.csdn.net/wenzhi20102321/article/details/122243396

4、Android13 实现有线网络和wifi共存

Android 系统Framework进行一定适配后,可以实现wifi和有线网络端口都打开的,

如果同时连接wifi和有线网网络,优先并且默认使用的是有线网的网络,

但是可以在App端即可实现通过代码控制选择使用wifi或者有线网络进行网络请求。

https://blog.csdn.net/wenzhi20102321/article/details/133950414

5、Android11 有线网Score分析流程

Android 有线网络和wifi,同时连通,并且设置优先级。可以随时切换网络优先级 :

https://blog.csdn.net/wenzhi20102321/article/details/128211377

Android13 以后的代码,Score的逻辑更复杂的,并且是隐蔽的。目前无法设置。

相关推荐
robotx8 分钟前
安卓线程相关
android
消失的旧时光-194328 分钟前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
dalancon1 小时前
VSYNC 信号流程分析 (Android 14)
android
dalancon2 小时前
VSYNC 信号完整流程2
android
dalancon2 小时前
SurfaceFlinger 上帧后 releaseBuffer 完整流程分析
android
用户69371750013843 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能
程序员Android3 小时前
Android 刷新一帧流程trace拆解
android
墨狂之逸才4 小时前
解决 Android/Gradle 编译报错:Comparison method violates its general contract!
android
阿明的小蝴蝶4 小时前
记一次Gradle环境的编译问题与解决
android·前端·gradle
汪海游龙5 小时前
开源项目 Trending AI 招募 Google Play 内测人员(12 名)
android·github