一、背景
1、预研环境
(1)Android系统:Android11,Api30
(2)面板机设备:RK3568,E8设备
2、项目背景
E8产品预研
RK3568 E8产品预研:网络连接部分预研、
3、预研网络类型
(1)有线网络:以太网
(2)WLAN网络:无线局域网
二、问题表现及原因
1、以太网连接
(1)无法连接以太网:涉及反射部分功能不可用:获取有线网配置的所有功能,包括有线网络管理类、获取IP配置、获取IP地址、获取子网掩码、获取网关、获取域名、设置静态IP置等;
(2)有线网网络监听不可用:room层三码信息获取不到,设备涉及网络监听部分Activity没有初始化。
2、WLAN网络连接(Wifi网络)
(1)无法连接Wifi网络:代码涉及WIfiManager等部分API弃用;
(2)无法设置Wifi静态IP:涉及反射不可用。
(3)设备仅支持连接2.4GHz频带WLAN网络。
3、系统有线网和Wifi网络不能共存
(1)连接Wifi网络后,插入有线网后,Wifi网络会断开。
(2)连接有线网络情况下,无法连接Wifi网络。
三、主要问题及尝试解决方案
1、以太网连接 — 反射限制问题:
(1)使用三方库屏蔽反射限制
三方库依赖:RestrictionBypass、FreeReflection、hiddenapibypass(https://github.com/LSPosed/AndroidHiddenApiBypass)
结果:目前屏蔽反射限制无效果
(2)导入frameworks.jar包,直接调用隐藏类和隐藏方法
新增类名:EthernetHelperFit11.java
导入目录:项目lib_common\src\main\res\libs\framework.jar
下载地址:https://gitee.com/xiayiye5/framework-jar-demo/tree/master/app/libs
lib_common模块build.gradle下配置依赖调用优先级:提高framework.jar包依赖调用优先级高于AndroidSDK
实现效果:编译通过,实现有线网网络的有效连通且可用。
存在风险:由于framework.jar包与AndroidSDK版本不同的问题,存在一定的类调用风险。
2、WLAN网络连接(Wifi网络)
(1)Wifi连接网络不可用问题(WifiManager弃用)
在 Android 10 (API 级别 29) 或更高版本 设备上,使用官方推荐API实现Wifi网络的连接。(适用于对等连接的 WLAN 网络请求 API | Android 开发者 | Android Developers (google.cn))
实现效果:可连接2.4GHz频带Wifi网络且可用(目前设备仅支持连接2.4GHz频带网络)
(2)设置Wifi静态IP部分—反射限制问题
解决办法同上述有线网反射限制问题解决办法一样:直接调用隐藏类配置静态Ip相关办法。
四、目前可考虑执行方案
1、Room层支持,单独封装有线网络相关API调用jar包,依照上述导入framework.jar包依赖,与AndroidSDK共存的方式直接进行对隐藏API的调用。
2、Room层支持,集成有线网相关隐藏类和方法到Room层,可供应用层继续使用反射调用。
3、将下方绕过非SDK接口调用限制命令集成到Room层,可解除对隐藏API和方法的调用限制。
官方对于非SDK接口的限制:针对非 SDK 接口的限制 | Google Play | Android Developers