Android adb shell svc 知识详解
adb shell svc 详解
文章目录
- adb shell svc 详解
- 一、svc 常用命令:
- 二、svc 命令和使用示例:
- 查看系统是否安装了svc
- 1、svc
- 2、svc help
- 3、svc power
- `svc wifi` has been migrated to WifiShellCommand,
- simply perform translation to `cmd wifi set-wifi-enabled` here.
- `svc bluetooth` has been migrated to BluetoothShellCommand,
- simply perform translation to `cmd bluetooth set-bluetooth-enabled` here.
这个命令可以用来控制电源管理,wifi开关,数据开关(就是上网流量),注意需要root权限。
有兴趣的可以一起学习一下。
一、svc 常用命令:
1、屏幕相关adb shell svc power stayon [true|false|usb|ac]设置屏幕的常亮,true保持常亮,false不保持,usb当插入usb时常亮,ac当插入电源时常亮2、移动数据(sim卡网络)adb shell svc data enable/打开移动数据adb shell svc data disable/关闭移动数据adb shell svc data prefer/设置移动数据优先3、wifi相关adb shell svc wifi enable/打开wifiadb shell svc wifi disable/关闭wifiadb shell svc wifi prefer/设置wifi优先4、蓝牙相关adb shell svc bluetooth enable/打开wifiadb shell svc bluetooth disable/关闭wifi
此命令可以用作4G/wifi稳定性测试
其实还有其他svc 命令,如果想深入了解可以往后看看。
二、svc 命令和使用示例:
查看系统是否安装了svc
路径 /system/bin/svc
1|console:/ # ls -l /system/bin/svc
-rwxr-xr-x 1 root shell 1697 2023-09-08 09:06 /system/bin/svc
console:/ #
如果存在这个 svc 文件,那就就可以执行 svc 命令了。
其实可以cat看到 svc 文件的代码,具体是哪里生成和怎么编辑修改,这里不做具体分析。
1、svc
在串口或者adb shell 命令行,输入svc 就可以看到相关功能,
也可能看不全,可能跟系统或者svc文件相关。
console:/ # svc
Available commands:help Show information about the subcommandspower Control the power managerusb Control Usb statenfc Control NFC functionssystem-server System server process related command
console:/ #
console:/ #
在串口输入 svc 就能看到相关指令功能。但是不一定显示全。
2、svc help
console:/ # svc help
Available commands:help Show information about the subcommandspower Control the power managerusb Control Usb statenfc Control NFC functionssystem-server System server process related command
console:/ #
输入 svc help ,查看其实没啥用,和 svc 一样的显示功能列表。
3、svc power
···
console:/ # svc power
Control the power manager
usage: svc power stayon [true|false|usb|ac|wireless]
Set the ‘keep awake while plugged in’ setting.
svc power reboot [reason]
Perform a runtime shutdown and reboot device with specified reason.
svc power shutdown
Perform a runtime shutdown and power off the device.
svc power forcesuspend [t]
Force the system into suspend, ignoring all wakelocks.
t - Number of milliseconds to wait before issuing force-suspend.
Helps with devices that can’t suspend while plugged in.
Defaults to 0.
When using a delay, you must use the nohup shell modifier:
‘adb shell nohup svc power forcesuspend [time]’
Use caution; this is dangerous. It puts the device to sleep
immediately without giving apps or the system an opportunity to
save their state.
console:/ #
这里能看到 avc power 包含下面几个功能:
svc power stayon [true|false|usb|ac|wireless] //对应的意义:[长亮|长暗|usb接入长亮|充电长亮|连接wifi长亮]
svc power reboot [reason] //[reason] 可以随便写或者不写,底层估计是会记录
svc power shutdown //关机
svc power forcesuspend [time]// 定时关机,其实也是关机,time 是多久后关机,单位是毫秒。未设置time,就是马上关机。
### 3、svc usb
console:/ #
console:/ # svc usb
Control Usb state
usage: svc usb setFunctions [function]
Set the current usb function. If function is blank, sets to charging.
svc usb setScreenUnlockedFunctions [function]
Sets the functions which, if the device was charging,
become current on screen unlock.
If function is blank, turn off this feature.
svc usb getFunctions
Gets the list of currently enabled functions
possible values of [function] are any of ‘mtp’, ‘ptp’, ‘rndis’,
‘midi’, ‘ncm (if supporting gadget hal v1.2)’
svc usb resetUsbGadget
Reset usb gadget
svc usb getUsbSpeed
Gets current USB speed
possible values of USB speed are any of ‘low speed’, ‘full speed’,
‘high speed’, ‘super speed’, ‘super speed (10G)’,
‘super speed (20G)’, or higher (future extension)
svc usb getGadgetHalVersion
Gets current Gadget Hal Version
possible values of Hal version are any of ‘unknown’, ‘V1_0’, ‘V1_1’,
‘V1_2’
svc usb getUsbHalVersion
Gets current USB Hal Version
possible values of Hal version are any of ‘unknown’, ‘V1_0’, ‘V1_1’,
‘V1_2’, ‘V1_3’
svc usb resetUsbPort [port number]
Reset the specified connected usb port
default: the first connected usb port
console:/ #
console:/ #
这上面看 svc usb 看起来太复杂了吧!梳理下,主要包含下面几个功能:
svc usb setFunctions [function] //设置充电,还是文件等模式
svc usb setScreenUnlockedFunctions [function]
svc usb resetUsbGadget
svc usb getUsbSpeed
svc usb getGadgetHalVersion
svc usb getUsbHalVersion
svc usb resetUsbPort [port number]
其实上面svc usb执行后,都在UsbCommand 里面被接收,部分方法调用是 UsbDeviceManager 里面执行。
framework\base\cmds\svc\src\com\android\commands\svc\UsbCommand.java
framework\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java
想要仔细研究的可以自己看看。### 4、svc nfc
console:/ # svc nfc
Got a null NfcAdapter, is the system running?
console:/ #
这里看到,设备没有安装ngc,所以未查询到任何信息。### 5、svc wifi
127|console:/ # svc wifi
Control the Wi-Fi manager
usage: svc wifi [enable|disable]
Turn Wi-Fi on or off.
1|console:/ #
这里看到, avc wifi 可以通过 enable/disable 控制wifi开关。这里没看到 svc wifi prefer/设置wifi优先!
我这是tv平台,不会插sim卡,可能去除了相关设置,入需要具体研究可以看svc文件和 wifi 命令相关文件。
packages\modules\Wifi\service\java\com\android\server\wifi\WifiShellCommand.java
### 6、svc bluetooth
1|console:/ # svc bluetooth
Control the Bluetooth manager
usage: svc bluetooth [enable|disable]
Turn Bluetooth on or off.
1|console:/ #
这里看到, avc bluetooth 可以通过 enable/disable 控制 蓝牙 开关。### 7、svc system-server
console:/ # svc system-server
System server process related command
usage: system-server wait-for-crash
Wait until the system server process crashes.
console:/ #
这里显示等下系统崩溃,估计系统崩溃过情况才有日志打印。### 8、svc data
1|console:/ # svc data
Enable/Disable Mobile Data Connectivity
usage: svc data [enable|disable]
1|console:/ #
可以通过svc data enable或svc data disable来打开或关闭移动数据连接。这个命令可以用来控制手机的数据连接状态。这里没有查询命令,只能通过实际测试看看,是否有没有生效。### 9、svc volume 网上查看svc 还可以控制变量:
adb shell svc volume music +10 // 将音乐音量增加10个单位
但是实际测试,并不能识别 volume 命令,估计和Android 系统代码相关
console:/ # svc volume music +10
Available commands:
help Show information about the subcommands
power Control the power manager
usb Control Usb state
nfc Control NFC functions
system-server System server process related command
console:/ # svc volume music
Available commands:
help Show information about the subcommands
power Control the power manager
usb Control Usb state
nfc Control NFC functions
system-server System server process related command
console:/ # svc volume
Available commands:
help Show information about the subcommands
power Control the power manager
usb Control Usb state
nfc Control NFC functions
system-server System server process related command
console:/ #
console:/ #
这里看到是识别不到 svc volume命令的,其实就是系统代码未配置,想要了解可以继续往下看。## 二、svc 命令相关源码分析### 1、cat svc文件
console:/ #
console:/ # cat /system/bin/svc
#!/system/bin/sh
svc wifi
has been migrated to WifiShellCommand,
simply perform translation to cmd wifi set-wifi-enabled
here.
if [ “x$1” == “xwifi” ]; then
# cmd wifi
by convention uses enabled/disabled
# instead of enable/disable
if [ “x$2” == “xenable” ]; then
exec cmd wifi set-wifi-enabled enabled
elif [ “x$2” == “xdisable” ]; then
exec cmd wifi set-wifi-enabled disabled
else
echo “Control the Wi-Fi manager”
echo “”
echo “usage: svc wifi [enable|disable]”
echo " Turn Wi-Fi on or off."
echo “”
fi
exit 1
fi
if [ “x$1” == “xdata” ]; then
if [ “x$2” == “xenable” ]; then
exec cmd phone data enable
elif [ “x$2” == “xdisable” ]; then
exec cmd phone data disable
else
echo “Enable/Disable Mobile Data Connectivity”
echo “”
echo “usage: svc data [enable|disable]”
echo “”
fi
exit 1
fi
svc bluetooth
has been migrated to BluetoothShellCommand,
simply perform translation to cmd bluetooth set-bluetooth-enabled
here.
if [ “x$1” == “xbluetooth” ]; then
# cmd wifi
by convention uses enabled/disabled
# instead of enable/disable
if [ “x$2” == “xenable” ]; then
exec cmd bluetooth_manager enable
elif [ “x$2” == “xdisable” ]; then
exec cmd bluetooth_manager disable
else
echo “Control the Bluetooth manager”
echo “”
echo “usage: svc bluetooth [enable|disable]”
echo " Turn Bluetooth on or off."
echo “”
fi
exit 1
fi
export CLASSPATH=/system/framework/svc.jar
exec app_process /system/bin com.android.commands.svc.Svc “$@”
console:/ #
这里看到了有wifi和bluetooth的简单判断,以及关联了svc.jarAndroid 系统源码里面也是有这个svc文件存在的,文件目录:
framework\base\cmds\svc\svc
svc相关功能的接收处理都在 framework\base\cmds\svc 文件夹下### 2、svc 相关源码文件主要相关文件:
framework\base\cmds\svc\src\com\android\commands\svc\Svc.java
framework\base\cmds\svc\src\com\android\commands\svc\NfcCommand.java
framework\base\cmds\svc\src\com\android\commands\svc\PowerCommand.java
framework\base\cmds\svc\src\com\android\commands\svc\SystemServerCommand.java
framework\base\cmds\svc\src\com\android\commands\svc\UsbCommand.java
packages\modules\Wifi\service\java\com\android\server\wifi\WifiShellCommand.java // Android13
packages\modules\Bluetooth\service\java\com\android\server\bluetooth\BluetoothShellCommand.java //Android13
别人分析的svc相关文件 过程:
https://blog.csdn.net/zhangqi6627/article/details/121496414#### (1)接收所有svc命令的文件 Svc.java
public class Svc {
public static abstract class Command { // 所有command 子类都是会继承这个抽象接口,后面会看到private String mName;public Command(String name) { //设置Command 名称mName = name;}public String name() { //查询Command名称return mName;}public abstract String shortHelp(); // should fit on one short line, //svc help看到的各个Command 的信息public abstract String longHelp(); // take as much space as you need, 75 col max // svc 具体命令后,看到的具体提示信息public abstract void run(String[] args); // run the command //执行接收输入的命令
}// (1)执行入口
public static void main(String[] args) {if (args.length >= 1) {Command c = lookupCommand(args[0]); //(2)根据输入的字符串,返回Command 对象if (c != null) {c.run(args);return;}}COMMAND_HELP.run(args); // (3)如果只输入 avc,显示help 提示的字符串
}// (4)根据字符串查找 Command 对象,其实就是USB、Wifi那些控制对象
private static Command lookupCommand(String name) {final int N = COMMANDS.length;for (int i=0; i<N; i++) { // (5)遍历所有Command对象进行匹配Command c = COMMANDS[i];if (c.name().equals(name)) {return c;}}return null;
}// (5)定义所有的 Command 对象
public static final Command[] COMMANDS = new Command[] {COMMAND_HELP, // (6)help 是自身new PowerCommand(), // (7) power相关命令处理// `svc wifi` has been migrated to WifiShellCommand // (8)wifi 相关命令处理,svc 文件已经说明了,会在 WifiShellCommand 进行处理。new UsbCommand(), // (9) usb相关命令处理new NfcCommand(), // (10)nfc相关命令处理// `svc bluetooth` has been migrated to BluetoothShellCommand // (11)bluetooth相关命令处理new SystemServerCommand(), // (11)system-server 命令处理
};
}
#### (2)接收所有svc power 命令的文件 PowerCommand.java 这里只说明一下 avc power 命令的接收和处理,其他命令的 Command 命令类的分析也是类似的,可以参考。
public class PowerCommand extends Svc.Command { //(1) svc 命令都是要继承 Command抽象类
private static final int FORCE_SUSPEND_DELAY_DEFAULT_MILLIS = 0;
public PowerCommand() {super("power"); // (2)父类的构成方法,设置Command 对象名称,也是svc 后面对应的功能名称
}public String shortHelp() { // (3)svc 显示的 power 功能简单提示return "Control the power manager";
}public String longHelp() { // (4)svc power 显示的 power 功能具体提示,这个也说明文本提示因供参考,真正的实现还是要看代码逻辑return shortHelp() + "\n"+ "\n"+ "usage: svc power stayon [true|false|usb|ac|wireless]\n"+ " Set the 'keep awake while plugged in' setting.\n"+ " svc power reboot [reason]\n"+ " Perform a runtime shutdown and reboot device with specified reason.\n"+ " svc power shutdown\n"+ " Perform a runtime shutdown and power off the device.\n"+ " svc power forcesuspend [t]\n"+ " Force the system into suspend, ignoring all wakelocks.\n"+ " t - Number of milliseconds to wait before issuing force-suspend.\n"+ " Helps with devices that can't suspend while plugged in.\n"+ " Defaults to " + FORCE_SUSPEND_DELAY_DEFAULT_MILLIS + ".\n"+ " When using a delay, you must use the nohup shell modifier:\n"+ " 'adb shell nohup svc power forcesuspend [time]'\n"+ " Use caution; this is dangerous. It puts the device to sleep\n"+ " immediately without giving apps or the system an opportunity to\n"+ " save their state.\n";
}//(5)这个就是 svc power 功能的具体处理代码了,也是最重要的部分
public void run(String[] args) {fail: {if (args.length >= 2) { //(6)命令字符串大于等于2 才有意义, args[0] = power, args[1] = 某个功能,比如 stayon ,args[2] = 某个功能的参数IPowerManager pm = IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE)); //(7)具体实现其实也是调用到了PowerManager对于的Service 服务里面,也就是说avc 里面的实现基本都是调用系统api的操作if ("stayon".equals(args[1]) && args.length == 3) { // (8)avc power stayon 功能的判断int val;if ("true".equals(args[2])) { //(9)avc power stayon true 的判断,长亮val = BatteryManager.BATTERY_PLUGGED_AC |BatteryManager.BATTERY_PLUGGED_USB |BatteryManager.BATTERY_PLUGGED_WIRELESS;}else if ("false".equals(args[2])) { //(10)avc power stayon false 的判断,长暗val = 0;} else if ("usb".equals(args[2])) { //(11)avc power stayon usb 的判断,插入usb长亮val = BatteryManager.BATTERY_PLUGGED_USB;} else if ("ac".equals(args[2])) { //(12)avc power stayon ac 的判断,插入ac电源长亮val = BatteryManager.BATTERY_PLUGGED_AC;} else if ("wireless".equals(args[2])) { //(13)avc power stayon wireless 的判断,连接wifi 长亮val = BatteryManager.BATTERY_PLUGGED_WIRELESS;} else { //(14)avc power 其他参数都是,错误情况,进行提示break fail;}try {if (val != 0) {// if the request is not to set it to false, wake up the screen so that// it can stay on as requestedpm.wakeUp(SystemClock.uptimeMillis(),PowerManager.WAKE_REASON_UNKNOWN, "PowerCommand", null);}pm.setStayOnSetting(val); //(15)根据 avc power 设置的功能,调用相关api,设置相关参数,}catch (RemoteException e) {System.err.println("Faild to set setting: " + e);}return;} else if ("reboot".equals(args[1])) { //(16)后面的流程就不一一分析了,参数长度和具体调用的api不同而已。String mode = null;if (args.length == 3) {mode = args[2];}try {// no confirm, wait till device is rebootedpm.reboot(false, mode, true);} catch (RemoteException e) {maybeLogRemoteException("Failed to reboot.");} catch (Exception e) {System.err.println("Failed to reboot: " + e.getMessage());}return;} else if ("shutdown".equals(args[1])) {try {// no confirm, wait till device is offpm.shutdown(false, null, true);} catch (RemoteException e) {maybeLogRemoteException("Failed to shutdown.");}return;} else if ("forcesuspend".equals(args[1])) {int delayMillis = args.length > 2? Integer.parseInt(args[2]) : FORCE_SUSPEND_DELAY_DEFAULT_MILLIS;try {Thread.sleep(delayMillis);if (!pm.forceSuspend()) {System.err.println("Failed to force suspend.");}} catch (InterruptedException e) {System.err.println("Failed to force suspend: " + e);} catch (RemoteException e) {maybeLogRemoteException("Failed to force-suspend with exception: " + e);}return;}}}System.err.println(longHelp()); // (17)如果参数错误的情况,就显示avc power 的具体命令提示。
}
## 三、系统源码中添加自定义的svc 命令实现### 1、系统源码中加入新的svc 只需要做下面两步即可:
(1)创建一个自己 Command 对象,可以参考同目录下的其他Command对象,比如 PowerCommand 的代码;
(2)在 Svc.java 文件中 COMMANDS列表对象中添加自定义的 Command 对象,svc 遍历的时候就会判断是否包含你的命令
### 2、在 Svc.java 中的修改
public static final Command[] COMMANDS = new Command[] {COMMAND_HELP,new LwzCommand(), //这里添加自定定义的 Command 对象new PowerCommand(),// `svc wifi` has been migrated to WifiShellCommandnew UsbCommand(),new NfcCommand(),// `svc bluetooth` has been migrated to BluetoothShellCommandnew SystemServerCommand(),
};
输入svc 命令的时候,就会去遍历所有的 Command 对象的名称,
哪个符合就返回那个具体的Command对象,具体的处理都在 某个Command对象里面。### 3、创建自定义的 Command 对象
package com.android.commands.svc;
import android.content.Context;
public class LwzCommand extends Svc.Command { //(1)自定义Command对象,需要继承 Svc.Command
private static final int FORCE_SUSPEND_DELAY_DEFAULT_MILLIS = 0;
public LwzCommand() { //(2)自定义对象的命令名称,这个也是cmd 窗口中的功能命令,Java那个对象命名是无所谓的super("lwz");
}public String shortHelp() { //(3)简短的介绍,avc 、avc help 会出现该提示return "lwz Control the test command";
}public String longHelp() { //(4)详细的介绍,avc lwz 或者 avc lwz help ,会打印该提示return shortHelp() + "\n"+ "\n"+ "usage: svc lwz stayon [true|false|usb|ac|wireless]\n"+ " Set the 'keep awake while plugged in' setting.\n"+ " svc lwz reboot [reason]\n"+ " Perform a runtime shutdown and reboot device with specified reason.\n"+ " svc lwz shutdown\n";
}public void run(String[] args) { //(4)avc lwz XXX 的具体处理fail: {if (args.length >= 2) { //(5)avc lwz stayon 的具体处理,这里只是做了一些打印,未调用具体的api实现if ("stayon".equals(args[1]) && args.length == 3) {int val;if ("true".equals(args[2])) {val = 100;}else if ("false".equals(args[2])) {val = 0;} else if ("usb".equals(args[2])) {val = 1;} else if ("ac".equals(args[2])) {val = 2;} else if ("wireless".equals(args[2])) {val = 3;} else {break fail;}System.err.println("test avc lwz command :" + args[2] + ", val = " + val); //添加了自定义打印return;} else if ("reboot".equals(args[1])) { //(6)avc lwz reboot 的具体处理,这里只是做了一些打印,未调用具体的api实现String mode = null;if (args.length == 3) {mode = args[2];}System.err.println("test avc lwz command :" + args[1] + ", mode = " + mode);return;}//(6)avc lwz XXX 其他输入的处理,打印具体介绍字符串System.err.println(longHelp());}}System.err.println(longHelp());
}
}
上面自定义的Command对象,未调用具体的api。
实际应用中是可以调用系统api的,可以打印返回的数据,写线程访问网络都是没有问题的。### 4、添加自定义Command命令后,串口操作的显示下面是添加了自定义LwzCommand.java 文件后,串口的打印日志:
console:/ #
console:/ # svc //(1)输入svc 可以看到添加了 自定义的 lwz 功能命令
Available commands:
help Show information about the subcommands
lwz lwz Control the test command
power Control the power manager
usb Control Usb state
nfc Control NFC functions
system-server System server process related command
console:/ #
console:/ # svc lwz //(2)自定义的功能简介,参考 svc power 的功能编写的
lwz Control the test command //(3)添加的打印
usage: svc lwz stayon [true|false|usb|ac|wireless]
Set the ‘keep awake while plugged in’ setting.
svc lwz reboot [reason]
Perform a runtime shutdown and reboot device with specified reason.
svc lwz shutdown
console:/ #
console:/ #
console:/ # svc lwz shutdown // (4)avc lwz shutdown 实际代码未实现,代码中打印了Help提示
lwz Control the test command
usage: svc lwz stayon [true|false|usb|ac|wireless]
Set the ‘keep awake while plugged in’ setting.
svc lwz reboot [reason]
Perform a runtime shutdown and reboot device with specified reason.
svc lwz shutdown
console:/ #
console:/ #
console:/ # svc lwz reboot // (5)avc lwz reboot 代码中只是添加了打印,未做处理
test avc lwz command :reboot, mode = null
console:/ #
console:/ #
console:/ # svc lwz stayon true // (6)avc lwz stayon true 代码中只是添加了打印,未做其他处理
test avc lwz command :true, val = 100
console:/ #
console:/ #
console:/ # svc lwz stayon false // (7)avc lwz stayon false 代码中只是添加了打印,未做其他处理
test avc lwz command :false, val = 0
console:/ #
这里看效果还是比较ok 的。
即学到了 svc 的相关内容,还学会了自定义扩展知识。## 四、总结### 1、svc 的使用svc 主要命令:
adb shell svc power/wifi/bluetooth/usb/nfc
从上面介绍可以知道,其实只要记住 svc,那么就是提示其他相关命令,然后再输入功能命令,就会显示具体参数介绍。### 2、svc 设计自定义命令其实不难,一个是编写自定义的Command类,还有就是把这个类对象加入到Svc.java中。涉及到的修改:
framework\base\cmds\svc\src\com\android\commands\svc\Svc.java
framework\base\cmds\svc\src\com\android\commands\svc\XXXCommand.java
### 3、其他相关知识#### (1)没有root和remount的情况,svc 是无效的在串口中的打印如下:
1|console:/ # svc
CANNOT LINK EXECUTABLE “app_process”: library “libnativeloader.so” not found: needed by main executable
1|console:/ #
1|console:/ #
我这里的系统是这样提示的,其他的系统不清楚是怎么的提示。#### (2)cmd 其他的命令延伸说明其实系统源码里面除了 svc 还有非常多的串口调试命令。
在系统源码目录 frameworks\base\cmds 可以看到:
Android13-IFP/release$
Android13-IFP/release$ cd frameworks/base/cmds
Android13-IFP/release/frameworks/base/cmds$ ls
abx appops appwidget bmgr bu device_config hid ime incidentd input locksettings requestsync settings svc uiautomator vr
am app_process backup bootanimation content dpm idmap2 incident incident_helper interrupter pm screencap sm telecom uinput wm
Android13-IFP/release/frameworks/base/cmds$
这里看到里面还有30多个 cmd 命令。比如控制应用的 am/pm 命令,控制显示的 wm 命令等等。
这些命令有些是需要 root 权限,有些是不需要的.
但是也不是所有的 cmd 命名都定义在这里,比如 ifconfig 这个命令就不知道是在哪里实现的。到这里,svc 和相关知识已经是了解比如深入了的。
相关文章:
Android adb shell svc 知识详解
adb shell svc 详解 文章目录 adb shell svc 详解一、svc 常用命令: 二、svc 命令和使用示例:查看系统是否安装了svc1、svc2、svc help3、svc power svc wifi has been migrated to WifiShellCommand,simply perform translation to cmd wifi set-wifi-e…...
Debian12系统下LAMP环境中Nubuilder4.5的安装
一、环境搭建 按照官方的说法,Apache2和Nginx都可以的,实际上,你最好直接按照 Mariadb\Apache2\Php8.2 这个顺序,搭建LAMP环境较好。不然各种调试,还不一定能够成功。 相关搭建方法,属于一般操作…...
百度超级链BaaS服务平台调研
目录 一、菜单功能1.1、在线版1.2、服务版 二、其他说明2.1、服务平台的部署方式2.2、混合部署 百度超级链XuperChain管理平台文档地址:https://xuper.baidu.com/n/doc#/c8737c7b/1_0_0/c8737c7b 一、菜单功能 1.1、在线版 在线版功能稍多。 菜单子菜单/功能点子…...
计算机网络之TCP/IP协议第二篇:OSI参考模型详解
文章目录 写给自己的话 一:协议分层与OSI参考模型 二:通过对话理解分层 三:OSI参考模型...
Linux内核分析与应用2-内存寻址
本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好,推荐观看 留此记录,蜻蜓点水,可作抛砖引玉 2.1 内存寻址 数据连续存储和选择读取思想,是目前我们使用的几乎所有机器运行背后的灵魂 计算机体系结构中的核心问题之一,就是如…...
苍穹外卖 day12 Echats 营业台数据可视化整合
苍穹外卖-day12 课程内容 工作台Apache POI导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原型 工作台是系…...
代码随想录算法训练营day45|70. 爬楼梯(进阶版)|322. 零钱兑换|279.完全平方数
70. 爬楼梯(进阶版) 一步一个台阶,两个台阶,三个台阶,…,直到 m个台阶。问有多少种不同的方法可以爬到楼顶呢? 1阶,2阶,… m阶就是物品,楼顶就是背包。 每一阶可以重复使用&#…...
数据结构和算法(3):列表
列表是一种线性数据结构,它允许在其中存储多个元素,并且可以动态地添加或删除元素。 循秩访问 可通过重载下标操作符,实现寻秩访问 template <typename T> // assert: 0 < r < size T List<T>::operator[](Rank r) cons…...
使用playright自动下载vscode已安装插件
import os import re import subprocess import traceback from playwright.sync_api import Playwright, sync_playwright, expect# 执行CMD命令 cmd_command "code --list-extensions" # 获取已安装扩展列表 process subprocess.Popen(cmd_command, stdoutsubpr…...
单片机语言实例:2、点亮数码管的多种方法
一、共阳数码管静态显示 程序实例1: #include<reg52.h> //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义void main (void) {P10xc0; //二进制 为 1100 0000 参考数码管排列,//可以得出0对应的段点…...
C#学习 - 初识类与名称空间
类(class)& 名称空间(namespace) 类是最基础的 C# 类型,是一个数据结构,是构成程序的主体 名称空间以树型结构组织类 using System; //前面的using就是引用名称空间 //相当于C语言的 #include <..…...
Python爬取电影信息:Ajax介绍、爬取案例实战 + MongoDB存储
Ajax介绍 Ajax(Asynchronous JavaScript and XML)是一种用于在Web应用程序中实现异步通信的技术。它允许在不刷新整个网页的情况下,通过在后台与服务器进行数据交换,实时更新网页的一部分。Ajax的主要特点包括: 异步通…...
JavaScript的面向对象
一、认识对象 1.概述 对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型。 什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合…...
MybatisPlus 核心功能 条件构造器 自定义SQL Service接口 静态工具
MybatisPlus 快速入门 常见注解 配置_软工菜鸡的博客-CSDN博客 2.核心功能 刚才的案例中都是以id为条件的简单CRUD,一些复杂条件的SQL语句就要用到一些更高级的功能了。 2.1.条件构造器 除了新增以外,修改、删除、查询的SQL语句都需要指定where条件。因此…...
TSN时间敏感网络
目录 时间敏感网络介绍 子协议介绍 时间同步 IEEE802.1AS 调度和流量整形 IEEE802.1Q IEEE802.1Qbv IEEE802.1cr IEEE802.1Qbu IEEE802.1Qch IEEE802.1Qav IEEE802.1Qcc 纠错机制与安全 IEEE802.1Qci IEEE802.1CB IEEE802.1Qca 参考 时间敏感网络介绍 TSN(Tim…...
【2023年数学建模国赛】C题解题思路
第一问 要求分析分析蔬菜各品类及单品销售量的分布规律及相互关系。该问题可以拆分成三个角度进行剖析。 1)各种类蔬菜的销售量分布、蔬菜种类与销售量之间的关系;2)各种类蔬菜的销售量的月份分布、各种类蔬菜销售量与月份之间的相关关系&a…...
5分钟 将“.py”文件转为“.pyd”文件
代码: from distutils.core import setup from distutils.extension import Extension from Cython.Build import cythonize import osfile_list os.listdir("./") extensions [] for file in file_list:if file.endswith(".py") and file !…...
python 入门到精通(一)
文章目录 1.使用pycharm进行第一个程序的编写2.python基础语法篇2.1 常用的值类型2.2 注释2.3 变量2.4 数据类型2.5 数据类型转换2.6 什么是标识符2.7 运算符2.8 字符串扩展2.8.1 字符串拼接2.8.2 字符串格式化2.8.3 格式化的精度控制2.8.4 字符串格式化 - 快速写法2.8.5 字符串…...
AJAX (Asynchronous JavaScript And XML)异步的JavaScript 和 XML
1、概念 Asynchronous JavaScript And XML 异步的JavaScript 和 XML异步和同步:客户端和服务器端相互通信的基础上 同步:客户端必须等待服务端的响应。在等待的期间客户端不能做其他操作。异步:客户端不需要等待服务器端的响应。在服务器…...
华为云云耀云服务器L实例评测|安装Java8环境 配置环境变量 spring项目部署 【!】存在问题未解决
目录 引出安装JDK8环境查看是否有默认jar上传Linux版本的jar包解压压缩包配置环境变量 上传jar包以及运行问题上传Jar包运行控制台开放端口访问失败—见问题记录关闭Jar的方式1.进程kill -92.ctrl c退出 问题记录:【!】未解决各种方式查看端口情况联系工程师最后排查…...
安卓多渠道打包(五)360加固walle多渠道打包
背景: 1、360加固宝,签名收費了,脚本上传加固也针对特定帐号才可实现。 内容 本文将会分享安卓项目中,使用360加固,再用walle签名,产出多渠道加固包的全流程。 环境 win10 jdk11 as2022 gradle7.5 最…...
Jmeter 实现 mqtt 协议压力测试
1. 下载jmeter,解压 https://jmeter.apache.org/download_jmeter.cgi 以 5.4.3 为例,下载地址: https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.zip linux下解压: unzip apache-jmeter-5.4.3.zip 2. 下载m…...
蓝桥杯官网练习题(凑算式)
类似填空题: ①算式900: https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501 ②九宫幻方③七星填数④幻方填空:https:/…...
机器学习实战-系列教程5:手撕线性回归4之非线性回归(项目实战、原理解读、源码解读)
🌈🌈🌈机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 手撕线性回归1之线性回归类的实现 手撕线性回归2之单特征线性回归 手撕线性回归3之多特征线性回归 手撕线性回归4之非线性回归 1…...
【C语言基础】那些你可能不知道的C语言“潜规则”
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...
android framework之Applicataion启动流程分析(三)
现在再回顾一下Application的启动流程,总的来说,虽然进程的发起是由ATMS服务发起的,但是进程的启动还是由AMS负责,所以需要调用AMS的startProcess()接口完成进程启动流程,AMS要处理的事情很多,它将事务交给…...
使用Scrapy框架集成Selenium实现高效爬虫
引言: 在网络爬虫的开发中,有时候我们需要处理一些JavaScript动态生成的内容或进行一些复杂的操作,这时候传统的基于请求和响应的爬虫框架就显得力不从心了。为了解决这个问题,我们可以使用Scrapy框架集成Selenium来实现高效的爬…...
Maven 和 Gradle 官方文档及相关资料的网址集合
文章目录 官方MavenGradle 笔者MavenGradle 官方 Maven Maven 仓库依赖包官方查询通道:https://mvnrepository.com/ Maven 插件官方文档:https://maven.apache.org/plugins/ 安卓依赖包官方查询通道*:https://maven.google.com/web/ Gra…...
docker概念、安装与卸载
第一章 docker概念 Docker 是一个开源的应用容器引擎。 Docker 诞生于2013年初,基于 Go 语言实现,dotCloud 公司出品,后改名为 Docker Inc。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发…...
elasticsearch访问9200端口 提示需要登陆
项目场景: 提示:这里简述项目相关背景: elasticsearch访问9200端口 提示需要登陆 问题描述 提示:这里描述项目中遇到的问题: 在E:\elasticsearch-8.9.1-windows-x86_64\elasticsearch-8.9.1\bin目录下输入命令 ela…...
html5手机网站/开发外包网站
一、算法实现 冒泡排序的时间复杂度为O(n^2),其实现代码如下: int bubble_sort(int *array, int num) {int i0, j0, idx0, max0;for(idx1; idx<num; idx){array[0] array[1]; /* array[0]为交换空间 */max num-idx1;for(j2…...
网站建设动画代码/推广软文范文800字
https://github.com/keras-team/keras/tree/master/examples Keras examples directory Keras实例目录 (点击跳转) 官网实例详解4.1(addition_rnn.py) 官网实例详解4.2(antirectifier.py) 官网实例详解…...
手机软件制作和做网站相同/搜狗官方网站
核心步骤 阿里云准备 centos_8_0,安全组设置(可以虚拟机代替)linux下jdk maven git 配置添加SSH公钥从gitee克隆源代码liunx下docker安装git拉取项目代码执行项目中sql的数据库脚本修改项目配置并启动 新建目录 #tmp存放临时安装包 mkdir …...
旅游网站的建设的文献综述/嘉兴百度seo
单词种类单词符号种别码单词种类单词符号种别码整型常数digit digit*1运算符*20字符串(标识符ID)letter(letter|digit)*2运算符/21关键字main3运算符22关键字if4运算符>23关键字else5运算符<24关键字do6运算符<25关键字while7运算符26关键字for…...
怎样用ps做网站首页图/安新seo优化排名网站
首先把django的组件的app复制到新的项目的根目录下, 删除migrations的文件,只剩下__init__.py,因为以前生成过新的表,再进来要建立新表 注册app在设置文件中,...
商城网站如何建设/小说百度风云榜
本故事纯属改编 如有共鸣 实属意外-说到“家”,一下想起了小时候学的儿歌:“小毛虫的摇篮是树叶,住在花瓣上的是蝴蝶……我最幸福了,一生下来爸爸妈妈就准备好了家,让我安安稳稳地在家里长大。”从那时起,我…...