当前位置: 首页 > news >正文

Android13 网络 Adb 默认开启

Android 13 网络 Adb 默认开启

文章目录

  • Android 13 网络 Adb 默认开启
    • 一、前言
    • 二、默认adb 代码实现
      • 1、修改的目录:
      • 2、具体修改:
        • (1)在XXX_device.mk 添加属性
        • (2)设置固定端口号
        • (3)去除判断网络后,设置 ADB_WIFI_ENABLED 为 0 的代码
    • 三、日志查看
    • 四、其他
      • 1、adb 相关属性
        • (1) prop属性:persist.adb.tls_server.enable
        • (2)prop属性:service.adb.tls.port
        • (3)Settings属性:Settings.Global.ADB_WIFI_ENABLED "adb_wifi_enabled"
      • 2、AdbService.java、AdbDebuggingManager.java、adb_wifi.cpp 的关系
        • (1) adb_wifi 是底层init/cpp 启动的服务
        • (2)AdbService启动时机
        • (3)ramework\base\core\java\android\debug\IAdbManager.aidl

一、前言

通过代码分析发现Android13 上对 网络adb 进行了限制!
Android13原生代码要求:必现连接上某个wifi,才能进行adb ,并且切换wifi或者关闭wifi都是会停止adb。

如果要做成Android11 或者之前一样,设备连接WiFi/有线网络后电脑可以直接进行adb连接,就要对系统代码进行适配修改。


关键:
1、mk 设置系统属性:persist.adb.tls_server.enable=1
2、写死端口号 5555
3、注释若干判断Wifi情况停止adb的代码

之前以为设置端口号和persist.adb.tls_server.enable 属性就ok了,但是还是有些小bug,还是要完全研究一遍具体流程。

二、默认adb 代码实现

1、修改的目录:

packages\modules\adb\daemon\adb_wifi.cpp
framework\base\services\core\java\com\android\server\adb\AdbDebuggingManager.java//修改前面两个文件就可以实现adb了,后面的文件试辅助分析的。//虽然 SettingsProvider 也有加载 Settings属性 Settings.Global.ADB_WIFI_ENABLED ,
//但是 prop那个属性更优先,所以可以不用考虑这里默认情况
framework\base\packages\SettingsProvider\src\com\android\providers\settings\SettingsProvider.java//增加分析定位文件,系统服务启动后会判断 属性persist.adb.tls_server.enable 进行相关操作
//如果属性设置不生效,可以在这里添加打印日志查看过程
framework\base\services\core\java\com\android\server\adb\AdbService.java

2、具体修改:

(1)在XXX_device.mk 添加属性

persist.adb.tls_server.enable = 1

手动添加,也是会记忆的!

(2)设置固定端口号

+++ b/release/packages/modules/adb/daemon/adb_wifi.cpp
@@ -160,7 +160,8 @@ static void enable_wifi_debugging() {if (sTlsServer != nullptr) {delete sTlsServer;}
-    sTlsServer = new TlsServer(0);
+    // default port 0 means random,change to 5555 ,by liwenzhi
+    sTlsServer = new TlsServer(5555);if (!sTlsServer->Start()) {LOG(ERROR) << "Failed to start TlsServer";delete sTlsServer;

(3)去除判断网络后,设置 ADB_WIFI_ENABLED 为 0 的代码

一个是初始化的时候判断,另外一个是监听网络变化的时候判断,都去掉就行。

+++ b/release/frameworks/base/services/core/java/com/android/server/adb/AdbDebuggingManager.java
public class AdbDebuggingManager {case MSG_ADBDWIFI_ENABLE: {if (mAdbWifiEnabled) {break;}//not to check network state ,change by  liwenzhi //(1)去除下面一大段判断网络和监听网络的代码/** AdbConnectionInfo currentInfo = getCurrentWifiApInfo();if (currentInfo == null) {Settings.Global.putInt(mContentResolver,Settings.Global.ADB_WIFI_ENABLED, 0); //关闭 adb wifibreak;}if (!verifyWifiNetwork(currentInfo.getBSSID(),currentInfo.getSSID())) {// This means that the network is not in the list of trusted networks.// We'll give user a prompt on whether to allow wireless debugging on// the current wifi network.Settings.Global.putInt(mContentResolver,Settings.Global.ADB_WIFI_ENABLED, 0);break;}setAdbConnectionInfo(currentInfo); **///no listener network change for disable adb_wifi,by  liwenzhi/** IntentFilter intentFilter =new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);mContext.registerReceiver(mBroadcastReceiver, intentFilter); **/SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1");case MSG_ADBDWIFI_DISABLE:if (!mAdbWifiEnabled) {break;}mAdbWifiEnabled = false;setAdbConnectionInfo(null);//no need unregisterReceiver, because no listener network,chenge by liwenzhi,//(2)监听已经注释,不需要再注销监听//mContext.unregisterReceiver(mBroadcastReceiver);case MSG_ADBWIFI_ALLOW:if (mAdbWifiEnabled) {break;}String bssid = (String) msg.obj;boolean alwaysAllow = msg.arg1 == 1;if (alwaysAllow) {mAdbKeyStore.addTrustedNetwork(bssid);}// Let's check again to make sure we didn't switch networks while verifying// the wifi bssid.//no to check network ,change by  liwenzhi //(3)不需要判断网络/** AdbConnectionInfo newInfo = getCurrentWifiApInfo();if (newInfo == null || !bssid.equals(newInfo.getBSSID())) {break;}setAdbConnectionInfo(newInfo); **/Settings.Global.putInt(mContentResolver,Settings.Global.ADB_WIFI_ENABLED, 1);//no listener network change for disable adb_wifi,by  liwenzhi //(4)不需要要监听网络变化/** IntentFilter intentFilter =new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);mContext.registerReceiver(mBroadcastReceiver, intentFilter); **/SystemProperties.set(WIFI_PERSISTENT_CONFIG_PROPERTY, "1");

三、日志查看

日志查看主要是:AdbService.java、AdbDebuggingManager.java、adb_wifi.cpp
AdbService 的日志默认是关闭模式的,需要设置成true,并且如果要看里面数据具体值,相关属性的日志需要自己添加打印出来。
AdbDebuggingManager 是有相关异常过程日志的
adb_wifi 该文件的打印,TAG 是adbd, 不管有没有打开adb,整个系统是一直有这个 adbd 的相关打印的,每秒大概有十几行日志!

这里查看打印相关日志多个关键字的信息命令:


logcat | grep -E "lwz|AdbService|changed to|adb wifi|AdbDebuggingManager"

lwz 是我自己加的关键字。

通过日志查看,正常开启的情况大概日志过程是:


01-01 08:00:22.756   496   511 I adbd    : Waiting for persist.adb.tls_server.enable=1
08-16 15:13:50.123   762   762 D SystemServerTiming: StartAdbService
08-16 15:13:51.528   762   762 D AdbService: systemReady //修改 DEBUG = true 才看到的日志
08-16 15:13:51.528   762   762 D AdbService: lwz systemReady= persist.adb.tls_server.enable = 1 //自己加的日志打印
08-16 15:13:51.528   762   762 D AdbService: lwz systemReady mIsAdbWifiEnabled= true //自己加的日志打印,确认查看服务启动是否打开 adb
08-16 15:13:58.993   762   799 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=0
08-16 15:13:58.994   762   762 D AdbService: lwz onChange shouldEnable = true
08-16 15:13:58.995   762   799 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=1
08-16 15:13:59.015   762   802 D ActivityManagerTiming: OnBootPhase_1000_com.android.server.adb.AdbService$Lifecycle
08-16 15:13:59.016   762   802 V ActivityManagerTiming: OnBootPhase_1000_com.android.server.adb.AdbService$Lifecycle took to complete: 1ms
08-16 15:13:59.016   762   799 D AdbService: boot completed
08-16 15:13:59.033   496   511 I adbd    : persist.adb.tls_server.enable changed to 1 //正常开启adb的日志
08-16 15:13:59.056   496   511 I adbd    : adb wifi started on port 5555
08-16 15:13:59.058   496   511 I adbd    : Waiting for persist.adb.tls_server.enable=0

如果未屏蔽网络判断,添加打印日志查看过程:

08-18 16:51:20.104   762   762 D SystemServerTiming: OnBootPhase_550_com.android.server.adb.AdbService$Lifecycle
08-18 16:51:20.104   762   762 D AdbService: systemReady
08-18 16:51:20.105   762   762 D AdbService: lwz systemReady mIsAdbWifiEnabled= true //这里说明,prop 属性已经设置了
08-18 16:51:26.248   762   798 I AdbDebuggingManager: Not connected to any wireless network. Not enabling adbwifi. //这里提示没网络,会执行关闭adb
08-18 16:51:26.586   762   762 D AdbService: lwz onChange shouldEnable = false
08-18 16:51:27.411   762   762 D AdbService: lwz onChange shouldEnable = false
08-18 16:51:27.971   762   798 D AdbService: setAdbEnabled(true), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=0
08-18 16:51:27.972   762   798 D AdbService: setAdbEnabled(false), mIsAdbUsbEnabled=true, mIsAdbWifiEnabled=true, transportType=1 //关闭adb
08-18 16:51:27.973   510   517 I adbd    : persist.adb.tls_server.enable changed to 0  //到这里 persist.adb.tls_server.enable 属性又变成了 0
08-18 16:51:27.973   510   517 I adbd    : adb wifi stopped
08-18 16:51:27.981   762   798 D AdbService: Broadcasting enable = false, type = 1

这个也是为啥配置了那个 persist.adb.tls_server.enable =1 属性后,系统启动发现获取属性还是0 ,并且wifi adb未打开。

四、其他

1、adb 相关属性

(1) prop属性:persist.adb.tls_server.enable

系统启动后,AdbService 会判断该属性决定后续是否执行开启adb。

(2)prop属性:service.adb.tls.port

该属性是 adb_wifi.cpp 使能adb的时候设置的. 后续让你知道它的端口号。
所以设置这个属性值是没有意义的。
在 adb_wifi.cpp,初始化 TlsServer 设置固定端口 5555,那么这个属性一直就是 5555.

(3)Settings属性:Settings.Global.ADB_WIFI_ENABLED “adb_wifi_enabled”

同时在 AdbService 是有监听 这个Global 属性的变化,关联上 AdbDebuggingManager ,设置 adb 使能。

查询和设置命令:


//查询属性;
setttings get global adb_wifi_enabled
//设置属性 0/1:
setttings put global adb_wifi_enabled 1

该属性是系统上层设置的一个值,原本主要用来记录adb wifi 的开关状态。
因为Android13 会判断当前wifi是否是信任的,切换wifi后设置这个属性是无效的。

但是如果修改了上面去除网络限制对策后,直接设置Global属性,是会正常开关adb的。

如果未去除网络限制对策,你会发现 adb_wifi_enabled 无法设置成1,
因为 AdbDebuggingManager 在开启的是会还会判断网络情况,如果没有网络会设置为 0 .

2、AdbService.java、AdbDebuggingManager.java、adb_wifi.cpp 的关系

(1) adb_wifi 是底层init/cpp 启动的服务

具体哪里启动的暂不去研究
里面的日志是跑在比较前面的,比SystemServer 更早。
同时也是具体能够使能 网络adb 的关键;
也是为啥设置了 persist.adb.tls_server.enable=1 能够直接使能网络adb的原因。
正常开启和关闭adb 是有相关日志的。

(2)AdbService启动时机

AdbService 是SystemServer 执行 startOtherServices 里面启动的服务。

AdbService extends IAdbManager.Stub //具体暴露接口可以看 IAdbManager

AdbDebuggingManager 是一个管理adbDebug的类,在 AdbService 里面实例化,其实就是分化了一下具体执行的代码。

很多无法进入adb wifi 的情况都是在AdbDebuggingManager 拒绝的,并且重新设置了 Global属性 和 Prop 属性为0

(3)ramework\base\core\java\android\debug\IAdbManager.aidl

package android.debug;import android.debug.FingerprintAndPairDevice;
import android.debug.IAdbCallback;/*** Interface to communicate remotely with the {@code AdbService} in the system server.** @hide //隐藏的!*/
interface IAdbManager {/*** Allow ADB debugging from the attached host. If {@code alwaysAllow} is* {@code true}, add {@code publicKey} to list of host keys that the* user has approved.** @param alwaysAllow if true, add permanently to list of allowed keys* @param publicKey RSA key in mincrypt format and Base64-encoded*/void allowDebugging(boolean alwaysAllow, String publicKey);/*** Deny ADB debugging from the attached host.*/void denyDebugging();/*** Deny ADB wireless debugging on the connected network.*/void denyWirelessDebugging();/*** Returns true if device supports secure Adb over Wi-Fi.*/boolean isAdbWifiSupported();}

上面接口估计对开发者没啥用!

适配了去除网络限制上面代码后,就应用而言,使用 Settings.Global.ADB_WIFI_ENABLED 控制和或者当前 网络adb状态最合适的。
虽然使用prop 属性也能生效,但是系统应用Settings判断的是Settings.Global.ADB_WIFI_ENABLED的值是否为1,会出现状态显示不同步的情况。

相关文章:

Android13 网络 Adb 默认开启

Android 13 网络 Adb 默认开启 文章目录 Android 13 网络 Adb 默认开启一、前言二、默认adb 代码实现1、修改的目录&#xff1a;2、具体修改&#xff1a;&#xff08;1&#xff09;在XXX_device.mk 添加属性&#xff08;2&#xff09;设置固定端口号&#xff08;3&#xff09;去…...

Git分享-规范/建议/技巧

1. Git多人协作开发流程图 1.1 processOn默认的模板 1.2 改造之后 https://www.processon.com/view/link/64ccaf56a433c931b2f9428a 访问密码&#xff1a;512I ① 总流程图 ② feat分支&#xff08;功能/需求 分支&#xff09;流程 ③ bugfix分支&#xff08;紧急补丁分支&…...

vue3文件下载功能

定义方法&#xff1a; utils.js /**** param url 目标下载接口* param query 查询参数* param fileName 文件名称* returns {*}*/ export function downBlobFile(url: any, query: any, fileName: string) {return request({//url: url,method: get,responseType: blob,param…...

Python调用文心一言的API

最近申请了文心一言的key&#xff0c;然后尝试调用了一下文心一言&#xff0c;这里使用一个简单的方式来调用文心一言&#xff1a; pip install paddle-pipelinesfrom pipelines.nodes import ErnieBotapi_key "your apply key" secret_key "your apply secr…...

【计算机网络八股】计算机网络(一)

目录 计算机网络的各层协议及作用&#xff1f;TCP和UDP的区别&#xff1f;UDP 和 TCP 对应的应用场景是什么&#xff1f;详细介绍一下 TCP 的三次握手机制&#xff1f;为什么需要三次握手&#xff0c;而不是两次&#xff1f;为什么要三次握手&#xff0c;而不是四次&#xff1f…...

记录一次arcgis engine开发版本引入问题

之前基于arcigs 10.1vs2013开发的程序&#xff0c;现在拿出来要改&#xff0c;但是目前版本是arcgis10.7vs2017/vs2019,打开后无论如何替换引用版本&#xff0c;都报错 &#xff08;具体版本对应可以看这&#xff1a;ArcGIS Engine 与 Visual Studio 版本对照表_vs2019对应啥版…...

2023年Java毕业设计怎样选题,有哪些注意事项,300道Java毕业设计题目

文章目录 一、确定个人兴趣和技能二、考虑实际应用价值三、注重创新和独特性四、合理规划时间和资源五、注重实践和测试Java 毕业设计题目参考第一部分第二部分 小结 随着计算机技术的不断发展&#xff0c;Java编程语言已经成为了众多大学计算机专业学生必修的一门课程。而Java…...

算法-滑动窗口-串联所有单词的子串

算法-滑动窗口-串联所有单词的子串 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/substring-with-concatenation-of-all-words/ 1.2 题目描述 2 滑动窗口Hash表 2.1 解题思路 构建一个大小为串联子串的总长的滑动窗口为每个words中的子串创建一个hash表, <子…...

2023年7月京东美妆护肤品小样行业数据分析(京东数据挖掘)

如今&#xff0c;消费者更加谨慎&#xff0c;消费决策也更加理性。在这一消费环境下&#xff0c;美妆护肤市场中&#xff0c;面对动辄几百上千的化妆品&#xff0c;小样或体验装无疑能够降低消费者的试错成本。由此&#xff0c;这门生意也一直备受关注。 并且&#xff0c;小样…...

记录Taro巨坑,找不到sass类型定义文件

问题 taronutuisassts项目里tsconfig.json一直报红报错。 找不到“sass”的类型定义文件。 程序包含该文件是因为: 隐式类型库 “sass” 的入口点 其实正常人想的肯定是装上 types/sass试试。开始我试过了&#xff0c;没用。删了依赖重装也没用。后面在issue中找到答案了 解决…...

CS1988|C#无法在异步方法中使用ref,in,out类型的参数的问题

CS1988|C#无法在异步方法中使用ref,in,out类型的参数 &#x1f300;|场景&#xff1a; BlazorServer的场景中推荐使用异步方法&#xff0c;使用ref,out,in为参数前缀则报错CS1988 原因如下: ref parameters are not supported in async methods because the method may not h…...

ubuntu开机失败——ACPI Error

开机循环进入GNU GRUB 或者 黑屏 1.acpioff 解决办法 1&#xff09;先用下面方法进入系统 2&#xff09;更改grub ref 开机循环进入GNU GRUB 或者 黑屏 有提示ACPI Error错误如图&#xff1a; 解决办法 1&#xff09;先用下面方法进入系统 在GUN GRUB界面&#xff0c;选择ubun…...

搭建开发环境-操作系统篇(一键搭建开发环境)

概述 所谓工欲善其事必先利其器&#xff0c;搭环境往往是开发过程中卡出很多初学者的拦路虎。 对于很多老鸟来说&#xff0c;很多东西都已经习惯成自然&#xff0c;也就没有刻意和初学者说。但对于很多初学者&#xff0c;却是受益良多。 这个系列&#xff0c;先从操作系统开始…...

人工智能AI绘画接入使用文档

人工智能AI绘画接入使用 一、人工智能AI绘画二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 AI绘画优秀描述例子四、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 五、重要说明六、AI绘画成果展示 一、人工智能AI绘画 AI作画,用户可以在平台上…...

如何使用PyQt进行文件操作

PyQt是一个非常强大的Python GUI库&#xff0c;它可以帮助我们创建漂亮的跨平台应用程序。不过&#xff0c;在你开始使用PyQt进行文件操作之前&#xff0c;我想提醒你&#xff0c;这并不是在操作文件系统&#xff0c;而是在操作文件和文件夹。 首先&#xff0c;我们要导入PyQt…...

阿里云CDN加速器基本概念与购买开通

文章目录 1.CDN加速器的基本概念1.1.CDN加速器基本介绍1.2.网站引入CDN加速器的架构图1.3.CDN加速器的工作原理1.4.引入CDN后域名解析变成了CNAME&#xff1f; 2.开通阿里云CDN加速服务 1.CDN加速器的基本概念 CDN加速器官方文档&#xff1a;https://help.aliyun.com/product/…...

2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C

2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-F 爱睡大觉的小C https://ac.nowcoder.com/acm/contest/63602/F 文章目录 2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-F 爱睡大觉的小C题意解题思路 题意 新学期的概…...

[C++ 网络协议编程] 域名及网络地址

1. DNS服务器 DNS&#xff08;Domain Name System&#xff09;&#xff1a;是对IP地址和域名&#xff08;如:www.baidu.com等&#xff09;进行相互转换的系统&#xff0c;其核心是DNS服务器。 我们输入的www.baidu.com是域名&#xff0c;是一种虚拟地址&#xff0c;而非实际地…...

Java【HTTP】什么是 Cookie 和 Session? 如何理解这两种机制的区别和作用?

文章目录 前言一、Cookie1, 什么是 Cookie2, Cookie 从哪里来3, Cookie 到哪里去4, Cookie 有什么用 二、Session1, 什么是 Session2, 理解 Session 三、Cookie 和 Session 的区别总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; …...

使用U盘重装Windows10系统详细步骤及配图【官方纯净版】

文章目录 1.制作启动盘1.1准备U盘及一台电脑1.2下载win10安装包 2.安装操作系统2.1插入系统安装盘2.2设置启动盘为第一启动项2.3开始安装操作系统 3.安装成功后进入图形界面3.1启动问题3.2驱动问题3.3调出"控制面板"3.4给磁盘分区 4.win10激活 前天下午不知道怎么想的…...

数据结构之——(手撕)顺序表

本章会介绍的知识点如下图&#xff1a; 1&#xff1a; 顺序表的概念&#xff1a;顺序表是用一段物理地址连续的存储单元依次存储数据的线性结构&#xff0c;通常我们使用数组来表示&#xff0c;对数组进行增删查改。 顺序表的结构&#xff1a;逻辑结构与物理结构都是内存中一块…...

冠达管理:非银金融是什么?

非银金融&#xff08;Non-banking Financial Institutions&#xff0c;简称非银&#xff09;是指除了传统的银行以外的其他金融机构。与银行不同的是&#xff0c;非银金融机构没有颁发钱银的权利&#xff0c;但在金融市场中发挥着重要的效果。在全球范围内&#xff0c;非银金融…...

go 结构体

定义结构体 package mainimport "fmt"type Person struct {age, id intname, email string }func main() {var p Personfmt.Printf("p: %v\n", p)p.age 100p.name "jaja"fmt.Printf("p.name: %v\n", p.name)// 匿名结构体var P…...

C++学习笔记---- 引用

1、作用 给变量起别名 基本语法&#xff1a;数据类型 &别名 原名 示例&#xff1a; #include <iostream> using namespace std;int main() {int a 1;int &b a;cout << "a " << a << endl;cout << "b " <…...

2023国赛数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…...

Cesium加载Supermap的wmts服务

最近使用cesium 加载supermap的wmts 服务&#xff0c;多次遇到加载异常与白页面问题&#xff0c;纠结好久最后才搞定[特此记录] 1、首先找到方法加载wmts 的api 文档 官方提示使用WebMapTileServiceImageryProvider加载wmts 2、然后编辑加载代码 //1.新建ImageryProviderlet…...

C/C++:C/C++在大数据时代的应用,以及C/C++程序员未来的发展路线

目录 1.C/C在大数据时代的应用 1.1&#xff1a;C/C数据处理 1.2&#xff1a;C/C数据库 1.3&#xff1a;C/C图像处理和计算机视觉 1.3.1&#xff1a;导读 2.C/C程序员未来的发展路线 2.1&#xff1a;图导 1.C/C在大数据时代的应用 C/C在大数据时代中仍然是一种被广泛应用的编…...

linux RabbitMQ-3.8.5 安装

软件版本操作系统CentOS Linux release 7.9.2009erlangerlang-23.0.2-1.el7.x86_64rabbitMQrabbitmq-server-3.8.5-1.el7 RabbitMQ的安装首先需要安装Erlang,因为它是基于Erlang的VM运行的。 RabbitMQ安装需要依赖:socat和logrotate&#xff0c;logrotate操作系统已经存在了&…...

单链表Single-LinkList

0、节点结构体定义 typedef struct LNode{int data;struct LNode *next;} Lnode, *LinkList; 1、初始化 bool InitList(LinkList &L) //初始化 {L new LNode;if(!L){return false;}L->next NULL;return true; } 2、创建 &#xff08;1&#xff09;头插法 void Cr…...

AI嵌入式全景:各厂商、系列和开发工具的综合概览

要看几个方面 1 算力&#xff1a; 2 支持何种模型&#xff1a; 3 是否支持可视化的窗口系统&#xff1a; 一般而言各个平台均采用linux操作系统&#xff0c;官方提供对应SDK&#xff0c;安装好后可使用硬件加速资源。 而且如果要使用其硬件加速&#xff0c;一般都要完成模型转…...

mysql Left Join on条件 where条件的用法区别

数据准备 SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id; 执行结果 SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id and t2.localbeijing; SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id where t2.localbeijing…...

Redis中的淘汰策略

前言 本文主要说明在Redis面临key过期和内存不足的情况时&#xff0c;可以采用什么策略进行解决问题。 Redis中是如何应对过期数据的 正如我们知道的Redis是基于内存的、单线程的一个中间件&#xff0c;在面对过期数据的时候&#xff0c;Redis并不会去直接把它从内存中进行剔…...

MyBatis进阶:掌握MyBatis动态SQL与模糊查询、结果映射,让你在面试中脱颖而出!!

目录 一、引言 二、MyBatis动态SQL 2.1.if元素使用 2.2.foreach元素使用 三、MyBatis模糊查询 ①使用#{字段名} ②使用${字段名} ③使用concat{%,#{字段名},%} 总结 四、MyBatis结果映射 4.1.案例演示 4.1.1.resultType进行结果映射 4.1.2.resultMap进行结果映射 …...

C++ 写入txt文件内容并追加内容

咨询通义千问的“C 写入txt文件内容并追加内容”&#xff1a; 可以使用ofstream类来写入txt文件内容。若想追加内容&#xff0c;可以使用ios::app标志来创建输出流对象&#xff0c;然后在写入时将其设置为ios::app。以下是一个示例代码&#xff1a; #include <iostream>…...

Leetcode---359周赛

题目列表 2828. 判别首字母缩略词 2829. k-avoiding 数组的最小总和 2830. 销售利润最大化 2831. 找出最长等值子数组 一、判断首字母缩略词 纯模拟&#xff0c;代码如下 class Solution { public:bool isAcronym(vector<string>& words, string s) {string tmp…...

Keras三种主流模型构建方式:序列模型、函数模型、子类模型开发实践,以真实烟雾识别场景数据为例

Keras和PyTorch是两个常用的深度学习框架&#xff0c;它们都提供了用于构建和训练神经网络的高级API。 Keras: Keras是一个高级神经网络API&#xff0c;可以在多个底层深度学习框架上运行&#xff0c;如TensorFlow和CNTK。以下是Keras的特点和优点&#xff1a; 优点&#xf…...

objective-v 获取iPhone系统当前时间字符串适配12小时制和24小时制

我们最开始获取系统当前时间&#xff0c;如下&#xff0c;这种方式存在一个问题&#xff0c;当iPhone关闭了24小时制时&#xff0c;获取的时间格式是&#xff1a;iPhone11上&#xff1a;20230822下午210568760&#xff1b;iPhone7 plus上&#xff1a;2023082240043851 PM&#…...

并查集及其简单应用

文章目录 一.并查集二.并查集的实现三.并查集的基本应用 一.并查集 并查集的逻辑结构:由多颗不相连通的多叉树构成的森林(一个这样的多叉树就是森林的一个连通分量) 并查集的元素(树节点)用0~9的整数表示,并查集可以表示如下: 并查集的物理存储结构:并查集一般采用顺序结构实…...

基于web的服装商城系统java网上购物商店jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于web的服装商城系统 系统有1权限&#xff1a;前台…...

.NET Core发布到IIS

项目介绍 1、开发工具Visual Studio 2017&#xff0c;语言C#&#xff0c;SQL SERVER&#xff0c;WIN10 2、本地IIS&#xff0c;手机上或其他用户在和本地在同一个局域网内访问,同时要把防火墙关掉 3、IIS全名Internet Information Services&#xff0c;用来发布网站 先决条件 安…...

Spring的基本概念

前言 Spring 究竟是什么&#xff1f;其实Spring简单来说就是一个包含众多工具方法的IOC容器。 那么什么是IOC呢&#xff1f; IoC Inversion of Control 翻译成中⽂是“控制反转”的意思. 既然Spring 是⼀个IoC&#xff08;控制反转&#xff09;容器&#xff0c;重点还在“容…...

设计模式之原型模式

文章目录 一、介绍二、实现步骤三、案例四、应用五、细胞分裂六、改造细胞分裂逻辑七、总结 一、介绍 原型模式属于创建型设计模式&#xff0c;用于创建重复的对象&#xff0c;且同时又保证了性能。 该设计模式的好处是将对象的创建与调用方分离。 其目的就是**根据一个对象…...

正则表达式在网页处理中的应用四则

正则表达式在网页处理中的应用四则 正则表达式(Regular Expression)为字符串模式匹配提供了一种高效、方便的方法。几乎所有高级语言都提供了对正则表达式的支持,或者提供了现成的代码库供调用。本文以ASP环境中常见的处理任务为例,介绍正则表达式的应用技巧。 一、检验密…...

ping使用方法

文章目录 1、Ping的基础知识2、Ping命令详解3、怎样使用Ping这命令来测试网络连通&#xff1f;4、如何用Ping命令来判断一条链路好坏&#xff1f;5、对Ping后返回信息的分析1.Request timed out2.Destination host Unreachable 1、Ping的基础知识 ping命令相信大家已经再熟悉不…...

“心理健康人工智能产学研创新联盟”揭牌成立|深兰科技

8月14日上午&#xff0c;“2023树洞救援年会”在上海举行&#xff0c;会上举行了“心理健康人工智能产学研创新联盟”的签约和揭牌仪式。“树洞行动救援团”创始人深兰科技科学院智能科学首席科学家、荷兰阿姆斯特丹自由大学人工智能系终身教授黄智生&#xff0c;深兰科技集团创…...

FastDFS+Nginx - 本地搭建文件服务器同时实现在外远程访问「端口映射」

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…...

Mybatis-动态sql和分页

目录 一.什么是Mybatis动态分页 二.mybatis中的动态SQL 在BookMaaper.xml中写sql BookMapper BookBiz接口类 BookBizImpl实现接口类 demo测试类 ​编辑 测试结果 三.mybatis中的模糊查询 mybatis中的#与$有是什么区别 在BookMapper.xml里面建立三个模糊查询 ​编辑 …...

基于YOLOV8模型的西红柿目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOV8模型的西红柿目标检测系统可用于日常生活中检测与定位西红柿目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数…...

数学建模及数据分析 || 4. 深度学习应用案例分享

PyTorch 深度学习全连接网络分类 文章目录 PyTorch 深度学习全连接网络分类1. 非线性二分类2. 泰坦尼克号数据分类2.1 数据的准备工作2.2 全连接网络的搭建2.3 结果的可视化 1. 非线性二分类 import sklearn.datasets #数据集 import numpy as np import matplotlib.pyplot as…...

数据分析15——office中的Excel基础技术汇总

0、前言&#xff1a; 这部分总结就是总结每个基础技术的定义&#xff0c;在了解基础技术名称和定义后&#xff0c;方便对相关技术进行检索学习。笔记不会详细到所有操作都说明&#xff0c;但会把基础操作的名称及作用说明&#xff0c;可自行检索。本文对于大部分读者有以下作用…...