Android13 实现有线网络和wifi共存

news2024/11/15 13:38:07

Android13 实现有线网络和wifi共存

文章目录

  • Android13 实现有线网络和wifi共存
    • 一、前言
    • 二、修改代码:
      • 1、ConnectivityService.java
      • 2、NetworkFactoryImpl.java
      • 3、Android11 和Android13 修改代码目录对比:
      • 4、如果只修改部分代码的后果
          • 只修改 ConnectivityService.java,不修改 NetworkFactoryImpl.java 的情况
          • 只修改 NetworkFactoryImpl.java,不修改 ConnectivityService.java 的情况
    • 三、网络共存验证
      • 1、窗口命令查看
        • (1)ifconfig
        • (2)ping -I 节点名称 ip/url
        • (3)dumpsys connectivity
      • 2、代码查看

一、前言

Android一些的定制设备,比如商显大屏或者Android盒子,一般是wifi或者有线网络。
Android 系统Framework进行一定适配后,可以实现wifi和有线网络端口都打开的,
进而在App端即可实现通过代码控制选择使用wifi或者有线网络进行网络请求。

Android11 上Wifi和有线网共存,已经有介绍:
https://blog.csdn.net/wenzhi20102321/article/details/133913924

Android13 上代码有较大差别,这里也进行记录和介绍。

二、修改代码:

Android13下面两个代码都要修改,不然会有点bug!

1、ConnectivityService.java

packages\modules\Connectivity\service\src\com\android\server\ConnectivityService.java

    private void teardownUnneededNetwork(NetworkAgentInfo nai) {
        if (nai.numRequestNetworkRequests() != 0) {
            for (int i = 0; i < nai.numNetworkRequests(); i++) {
                NetworkRequest nr = nai.requestAt(i);
                // Ignore listening and track default requests.
                if (!nr.isRequest()) continue;
                loge("Dead network still had at least " + nr);
                break;
            }
        }
        loge("no to disconnect! ");//mychange
        //nai.disconnect();
    }

ConnectivityService.java 里面还有一个地方,有调用 nai.disconnect(),最后也注释掉。

2、NetworkFactoryImpl.java

frameworks\libs\net\common\device\android\net\NetworkFactoryImpl.java

    private void handleRemoveRequest(NetworkRequest request) {
        NetworkRequestInfo n = mNetworkRequests.get(request);
        mParent.log("  handleRemoveRequest  no do !"); //mychange
        if (n != null) {
            //mNetworkRequests.remove(request);
            //if (n.requested) mParent.releaseNetworkFor(n.request);
        }
    }

最好是添加一个prop属性,记忆是否释放网络,方便手动修改和调试,类似下面的代码:

import android.os.SystemProperties;

	boolean isReleaseNetwork = SystemProperties.getBoolean("persist.demo.release_network", false);
	Log.e(TAG, "disconnect isReleaseNetwork = " + isReleaseNetwork);
	if (!isReleaseNetwork) {
	    return;
	}

两个地方都加上属性判断

3、Android11 和Android13 修改代码目录对比:

文件修改目录:

//Android11
frameworks\base\services\core\java\com\android\server\ConnectivityService.java
frameworks\libs\net\common\src_servicescommon\android\net\NetworkFactory.java

//Android13
packages\modules\Connectivity\service\src\com\android\server\ConnectivityService.java
frameworks\libs\net\common\device\android\net\NetworkFactoryImpl.java

可以看到里面的代码目录完全不一样的;
并且里面的代码实现也是有非常大的差异!有兴趣的可以自己研究看看。

4、如果只修改部分代码的后果

这里只说Android13 是上的,Android11 的比较久没动了,记不清了!

只修改 ConnectivityService.java,不修改 NetworkFactoryImpl.java 的情况

刚开始是可以同时连接上的,但是你发现断开后,无法再连接上wifi!
因为相关请求已经被移除了,低优先级的网络无法再重新连接!
具体为啥无法再连接,没有进一步具体分析,有兴趣的可以去看看。

只修改 NetworkFactoryImpl.java,不修改 ConnectivityService.java 的情况

Wifi和有线网是可以同时连接的,但是Wifi会每过几秒就会断开重连!

从日志看有 ConnectivityService 和 NetworkAgent 的相关日志

10-18 15:18:49.999   636   802 D ConnectivityService: handleLingerComplete for [143 WIFI]
10-18 15:18:50.000   636   794 D WifiNetworkAgent: NetworkAgent: NetworkAgent channel lost //网络断开的关键
10-18 15:18:50.000   636   802 D ConnectivityService: [143 WIFI] disconnected, was satisfying 10

每几秒重复一次上面的日志

如果你在 ConnectivityService.teardownUnneededNetwork 方法添加日志,发现会执行到 nai.disconnect();

所以循环断开是系统流程里面导致的。具体哪里开始的,可以基于日志分析,这里不展开介绍。

三、网络共存验证

1、窗口命令查看

(1)ifconfig

图片:
在这里插入图片描述

内容:

console:/ # 
console:/ # ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0 
          inet6 addr: ::1/128 Scope: Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:33 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:33 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:2898 TX bytes:2898 

eth0      Link encap:Ethernet  HWaddr 42:6b:39:d7:49:75  Driver rk_gmac-dwmac
          inet addr:192.168.31.174  Bcast:192.168.31.255  Mask:255.255.255.0 
          inet6 addr: fe80::42ff:4f65:13fe:20fa/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:558 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:135 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:40961 TX bytes:20403 
          Interrupt:78 

wlan0     Link encap:Ethernet  HWaddr 0c:cf:89:a6:44:2a  Driver usb
          inet addr:192.5.1.34  Bcast:192.5.1.255  Mask:255.255.255.0 
          inet6 addr: fe80::2e43:706c:c30b:f9c8/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:812 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:95 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:3000 
          RX bytes:142061 TX bytes:17362 

console:/ # 

可以看到 wlan0 和 eth0 都是存在ip地址的。

(2)ping -I 节点名称 ip/url

测试通过节点对应的网络访问某个ip

130|console:/ # 
130|console:/ # ping wwwbaidu.com
PING wwwbaidu.com (45.194.224.35) 56(84) bytes of data.
64 bytes from 45.194.224.35: icmp_seq=1 ttl=43 time=13.6 ms
64 bytes from 45.194.224.35: icmp_seq=2 ttl=43 time=13.4 ms
64 bytes from 45.194.224.35: icmp_seq=3 ttl=43 time=38.7 ms
64 bytes from 45.194.224.35: icmp_seq=4 ttl=43 time=13.5 ms
^C
--- wwwbaidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 13.452/19.851/38.744/10.908 ms
console:/ # 
console:/ # 
console:/ # ping -I eth0 www.baidu.com
PING www.a.shifen.com (157.148.69.80) from 192.168.31.174 eth0: 56(84) bytes of data.
64 bytes from 157.148.69.80: icmp_seq=1 ttl=46 time=15.0 ms
64 bytes from 157.148.69.80: icmp_seq=2 ttl=46 time=14.5 ms
64 bytes from 157.148.69.80: icmp_seq=3 ttl=46 time=15.2 ms
64 bytes from 157.148.69.80: icmp_seq=4 ttl=46 time=14.6 ms
^C
--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 14.580/14.877/15.257/0.294 ms
console:/ # 
console:/ # ping -I wlan0 www.baidu.com
PING www.a.shifen.com (157.148.69.80) from 192.5.1.34 wlan0: 56(84) bytes of data.
64 bytes from 157.148.69.80: icmp_seq=1 ttl=41 time=478 ms
64 bytes from 157.148.69.80: icmp_seq=2 ttl=41 time=99.9 ms
64 bytes from 157.148.69.80: icmp_seq=3 ttl=41 time=89.0 ms
64 bytes from 157.148.69.80: icmp_seq=4 ttl=41 time=96.1 ms
^C
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 4 received, 20% packet loss, time 4005ms
rtt min/avg/max/mdev = 89.084/191.015/478.886/166.248 ms
console:/ # 

这里可以看到有线网和wifi都是对外正常进行通讯的。

(3)dumpsys connectivity

这里会有比较多的连接信息,主要信息如下:

console:/ # 
console:/ # 
console:/ # dumpsys connectivity

Current Networks:
//wifi 相关信息
  NetworkAgentInfo{network{100}  handle{432902426637}  ni{WIFI CONNECTED extra: } Score(60 ; KeepConnected : 0 ; Policies : TRANSPORT_PRIMARY&EVER_VALIDATED_NOT_AVOIDED_WHEN_BAD&IS_UNMETERED&IS_VALIDATED)  created everValidated lastValidated  lp{{InterfaceName: wlan0 LinkAddresses: [ fe80::2e43:706c:c30b:f9c8/64,192.5.1.34/24 ] DnsAddresses: [ /192.5.1.1 ] Domains: null MTU: 0 ServerAddress: /192.5.1.1 TcpBufferSizes: 524288,1048576,2097152,262144,524288,1048576 Routes: [ fe80::/64 -> :: wlan0 mtu 0,192.5.1.0/24 -> 0.0.0.0 wlan0 mtu 0,0.0.0.0/0 -> 192.5.1.1 wlan0 mtu 0 ]}}  nc{[ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=12000Kbps LinkDnBandwidth>=30000Kbps Specifier: <WifiNetworkAgentSpecifier [WifiConfiguration=, SSID="VPN", BSSID=34:f7:16:92:87:6c, band=1, mMatchLocalOnlySpecifiers=false]> TransportInfo: <SSID: "VPN", BSSID: 34:f7:16:92:87:6c, MAC: 0c:cf:89:a6:44:2a, IP: /192.5.1.34, Security type: 2, Supplicant state: COMPLETED, Wi-Fi standard: 4, RSSI: -51, Link speed: 270Mbps, Tx Link speed: 270Mbps, Max Supported Tx Link speed: 300Mbps, Rx Link speed: -1Mbps, Max Supported Rx Link speed: 300Mbps, Frequency: 2442MHz, Net ID: 0, Metered hint: false, score: 60, isUsable: true, CarrierMerged: false, SubscriptionId: -1, IsPrimary: 1, Trusted: true, Restricted: false, Ephemeral: false, OEM paid: false, OEM private: false, OSU AP: false, FQDN: <none>, Provider friendly name: <none>, Requesting package name: <none>"VPN"wpa2-pskMLO Information: , AP MLD Address: <none>, AP MLO Link Id: <none>, AP MLO Affiliated links: <none>> SignalStrength: -51 OwnerUid: 1000 AdminUids: [1000] SSID: "VPN" UnderlyingNetworks: Null]}  factorySerialNumber=6}
    Requests: REQUEST:0 LISTEN:9 BACKGROUND_REQUEST:0 total:9
      NetworkRequest [ LISTEN id=5, [ Capabilities: FOREGROUND RequestorUid: 1000 RequestorPkg: android UnderlyingNetworks: Null] ]
    Inactivity Timers:
    Nat464Xlat:
      <not start>
//有线网相关信息
  NetworkAgentInfo{network{101}  handle{437197393933}  ni{Ethernet CONNECTED extra: 42:6b:39:d7:49:75} Score(-2147483648 ; KeepConnected : 0 ; Policies : EVER_VALIDATED_NOT_AVOIDED_WHEN_BAD&IS_UNMETERED&IS_VALIDATED)  created everValidated lastValidated  lp{{InterfaceName: eth0 LinkAddresses: [ fe80::42ff:4f65:13fe:20fa/64,192.168.31.174/24 ] DnsAddresses: [ /192.168.31.1 ] Domains: null MTU: 0 ServerAddress: /192.168.31.1 TcpBufferSizes: 524288,1048576,3145728,524288,1048576,2097152 Routes: [ fe80::/64 -> :: eth0 mtu 0,192.168.31.0/24 -> 0.0.0.0 eth0 mtu 0,0.0.0.0/0 -> 192.168.31.1 eth0 mtu 0 ]}}  nc{[ Transports: ETHERNET Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=100000Kbps LinkDnBandwidth>=100000Kbps Specifier: <EthernetNetworkSpecifier (eth0)> UnderlyingNetworks: Null]}  factorySerialNumber=1}
    Requests: REQUEST:10 LISTEN:7 BACKGROUND_REQUEST:0 total:17
      NetworkRequest [ REQUEST id=1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&NOT_VCN_MANAGED RequestorUid: 1000 RequestorPkg: android UnderlyingNetworks: Null] ]
      NetworkRequest [ LISTEN id=5, [ Capabilities: FOREGROUND RequestorUid: 1000 RequestorPkg: android UnderlyingNetworks: Null] ]
    Inactivity Timers:
    Nat464Xlat:
      <not start>

这里可以看到 Wifi 和有线网都要相关信息和不同的ip;
这里和Android11 有个非常不同的是:Android 有线网没有 Score 值?
这里值显示的是int 的最小值。但是还是有线网优先的!
Android11 上是可以看到 Score 的值为 70,代码上明显定义的,Android13 上未定义;
所以如果Android13 上要设置优先级估计就比较麻烦了。
如果确实要做优先级,可以看 NetworkAgentInfo 对象里面的Score 值的定义线索进行分析。

2、代码查看

可以通过代码查看Wifi 和有线网的 Ip地址


    //getIpAddress,第二个参数是决定是获取的wifi的ip地址还是有线网的ip地址
    public static String getIpAddress(Context context, boolean isGetWifiIp) {
        Network network = null;
        if (isGetWifiIp) {
            network = getWlanNet(context);
        } else {
            network = getFirstEthernet(context);
        }
        if (network == null) {
            return "";
        }
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final LinkProperties linkProperties = mConnectivityManager.getLinkProperties(network);
        if (linkProperties != null) {
            for (LinkAddress linkAddress : linkProperties.getLinkAddresses()) {
                InetAddress inetAddress = linkAddress.getAddress();
                if (inetAddress instanceof Inet4Address) {
                    return inetAddress.getHostAddress();
                }
            }
        }
        return "";
    }

    //getFirstEthernet
    private static Network getFirstEthernet(Context context) {
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final Network[] networks = mConnectivityManager.getAllNetworks();
        for (final Network network : networks) {
            NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network);
            if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_ETHERNET) {
                return network;
            }
        }
        return null;
    }

    //getFirstWlan
    private static Network getWlanNet(Context context) {
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final Network[] networks = mConnectivityManager.getAllNetworks();
        for (final Network network : networks) {
            NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network);
            if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                return network;
            }
        }
        return null;
    }


通过上面的代码 getIpAddress 方法,是可以分别获取到Wifi 和有线网的 Ip的!

另外,Java代码情况网络是可以指定特定网络通讯的,这里不展开介绍。

有兴趣的可以看看:
https://blog.csdn.net/wenzhi20102321/article/details/133950336

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1116614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

短视频矩阵系统源码---开发

一、智能剪辑、矩阵分发、无人直播、爆款文案于一体独立应用开发 抖去推----主要针对本地生活的----移动端(小程序软件系统&#xff0c;目前是全国源头独立开发)&#xff0c;开发功能大拆解分享&#xff0c;功能大拆解&#xff1a; 7大模型剪辑法&#xff08;数学阶乘&#x…

图的匹配相关学习笔记

二分图最大匹配 二分图是一种奇妙的图&#xff0c;它满足可以把其内部的节点划分成两个集合&#xff0c;且这每个集合内部的的点没有边相连。 二分图的判定 二分图的判定定理&#xff1a;一张无向图是二分图&#xff0c;当且仅当图中不存在奇环&#xff08;长度为奇数的环&am…

VisualStudio安装VSIX离线包的方法

一、安装的原理 1、使用的window工具&#xff1a;CMD或者powerShell 2、vs中用于安装vsix的exe&#xff1a; 二、安装过程 1、在VSIXInstaller.exe同级目录启动PowerShell &#xff08;1&#xff09;鼠标移到空白处 &#xff08;2&#xff09;Shift 鼠标右键 &#xff08;…

物联网_00_物理网介绍

1.物联网为什么会出现? 一句话-----追求更高品质的生活, 随着科技大爆炸, 人类当然会越来越追求衣来伸手饭来张口的懒惰高品质生活, 最早的物联网设备可以追溯到19世纪末的"在线可乐售卖机"和"特洛伊咖啡壶"(懒惰的技术人员为了能够实时看到物品的情况而设…

BAT032:批量替换当前目录下文件的部分字符

引严&#xff1a;编写批处理程序&#xff0c;实现批量替换当前目录下文件的部分字符。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击【编辑】。…

飞速(FS)MTP®光纤跳线系列——数据中心布线理想选择

数据中心的重要定位要求其使用的光纤跳线具有高性能和高可靠性。飞速&#xff08;FS&#xff09;MTP光纤产品系列能够以简单的安装方式快速部署高密度链路&#xff0c;优化线缆管理&#xff0c;确保充分利用通道空间&#xff0c;显著减少安装时间和成本。 飞速&#xff08;FS&…

线性代数-Python-02:矩阵的基本运算 - 手写Matrix及numpy中的用法

文章目录 一、代码仓库二、矩阵的基本运算2.1 矩阵的加法2.2 矩阵的数量乘法2.3 矩阵和向量的乘法2.4 矩阵和矩阵的乘法2.5 矩阵的转置 三、手写Matrix代码Matrix.pymain_matrix.pymain_numpy_matrix.py 一、代码仓库 https://github.com/Chufeng-Jiang/Python-Linear-Algebra-…

uni-app:实现时钟自走(动态时钟效果)

效果 核心代码 使用钩子函数 mounted()&#xff0c;设置定时器&#xff0c;是指每秒都要去执行时间的获取&#xff0c;以至于实现时间自走的效果 mounted() { this.updateTime(); // 初始化时间 setInterval(this.updateTime, 1000); // 每秒更新时间 }, 自定义方法…

2022年亚太杯APMCM数学建模大赛E题有多少核弹可以摧毁地球求解全过程文档及程序

2022年亚太杯APMCM数学建模大赛 E题 有多少核弹可以摧毁地球 原题再现 1945年8月6日&#xff0c;第二次世界大战即将结束。为了尽快结束战争&#xff0c;美国在日本广岛投下了下一颗名为“小男孩”的原子弹。这样一颗原子弹在广岛炸死了20万人&#xff0c;广岛的所有建筑物都…

BAT033:批量删除文件特定字符及特定字符之后的字符

引言&#xff1a;编写批处理程序&#xff0c;实现批量删除文件特定字符及特定字符之后的字符。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击【…

【计算机网络】OSI参考模型中非端-端层(物理层、数据链路层、网络层)功能介绍

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

表示本机IP地址的方式(三种方式)

1、本机和网络上的其他主机都可以通过IP地址访问到服务器 2、通过 127.0.0.1 或者 localhost 访问 127.0.0.1 和 localhost 它们完全等价 只能 本机 通过 127.0.0.1 或者 localhost 访问&#xff0c;网络上的其他主机无法访问 3、 通过 0.0.0.0 访问服务器 表示所有可…

Element Plus el-form表单自定义插槽如何使用

//正常无插槽表单<el-form :model"form" label-width"120px"><el-form-item label"Activity name"><el-input v-model"form.name" /></el-form-item></el-form>//带插槽表单//适用二次封装的form组件&l…

计算机网络篇之TCP滑动窗口

文章目录 前言概述 前言 在网络数据传输时&#xff0c;若传输的原始数据包比较大&#xff0c;会将数据包分解成多个数据包进行发送。需要对数据包确认后&#xff0c;才能发送下一个数据包。在等待确认包的这个过程浪费了大量的时间&#xff0c;不过还好TCP引入了滑动窗口的概念…

如何开发一个 Safari 插件

本文字数&#xff1a;2493字 预计阅读时间&#xff1a;15分钟 由于常用浏览器是Safari&#xff0c;而Safari浏览器的插件比不上Chrome&#xff0c;所以就有了自己开发常用的Safari插件的想法。 打算开发当前页面生成二维码的Extension&#xff0c;因为网络原因&#xff0c;AirD…

微软正式发布开源应用平台 Radius平台

“ 10 月 18 日&#xff0c;微软 Azure 孵化团队正式发布开源应用平台 Radius&#xff0c;该平台将应用程序置于每个开发阶段的中心&#xff0c;重新定义应用程序的构建、管理与理解方式。” 简单的概括就是&#xff0c;它和Kubernetes不一样&#xff0c;Radius将应用程序放在每…

DevExpress WPF Pivot Grid组件,可轻松实现多维数据分析!(二)

在上文中&#xff08;点击这里回顾>>&#xff09;我们主要为大家介绍了DevExpress WPF Pivot Grid组件的超快速枢轴分析功能、Microsoft分析服务等&#xff0c;本文将继续介绍图表透视数据的处理、MVVM支持等。欢迎持续关注我们&#xff0c;探索更多新功能哦~ P.S&#…

LNMP架构部署Discuz论坛系统

文章目录 LNMP架构&部署Discuz论坛系统部署LNMP架构环境前期准备安装Nginx安装mariadb安装php配置nginx 部署Discuz论坛系统下载Discuz论坛系统代码包部署Discuz论坛系统配置虚拟主机安装Discuz论坛访问站点尝试注册一个账号 LNMP架构&部署Discuz论坛系统 部署LNMP架构…

R语言:主成分分析PCA

文章目录 主成分分析处理步骤数据集code 主成分分析 主成分分析&#xff08;或称主分量分析&#xff0c;principal component analysis&#xff09;由皮尔逊&#xff08;Pearson,1901&#xff09;首先引入&#xff0c;后来被霍特林&#xff08;Hotelling,1933&#xff09;发展…

xtrabackup恢复数据时提示“This target seems to be not preared yet.”

测试MySQL数据库备份文件可用性。 备份文件是腾讯云平台备份的MySQL。文件需要xtrabackup恢复。 执行到xtrabackup --prepare --target-dir./mysql时&#xff0c;没有像往常开始执行命令而是给出了一个简短提示。 “This target seems to be not preared yet.” 为了确认前面…