SDL2:Android APP编译使用 -- SDL2多媒体库使用音频实例
SDL2:Android APP编译使用
- 3. SDL2:Android APP编译使用
- 3.1 Android Studio环境准备:
- 3.2 构建Android APP
- (1)方式一:快速构建APK工程
- (2)方式二:自定义APK工程
- (3)方式三:CMake构建APK工程
- 3.3 android-project 项目文件说明
SDL2(Simple DirectMedia Layer 2)是一个开源的跨平台多媒体开发库,它提供了一套简洁高效的API,用于处理图形渲染、音频播放、输入设备管理等功能,帮助开发者轻松创建出能在多种操作系统上运行的多媒体应用程序。
3. SDL2:Android APP编译使用
参考:https://github.com/mayzelf/SDL2/blob/release-2.28.4/docs/README-android.md
3.1 Android Studio环境准备:
(1)安装JDK、Android Studio
(2)安装Android SDK、Android NDK
export AS_DIR=$MY_ENV_HOME/App/Android_Studio/android-studio-2022.1.1.19
export ANDROID_HOME=$MY_ENV_HOME/App/Android_Studio/Android-2022.1.1.19
export ANDROID_NDK_HOME=$ANDROID_HOME/Sdk/ndk/28.0.12674087
export PATH=$PATH:$AS_DIR
3.2 构建Android APP
先下载SDL2源代码,SDL2官方网站下载或以下方式:
wget https://www.libsdl.org/release/SDL2-2.28.4.tar.gz
tar -zxvf SDL2-2.28.4.tar.gz
mv SDL2-2.28.4 /home/SDL
有以下方式,构建不同程度需求的APK:
(1)方式一:快速构建APK工程
cd /home/SDL
cd build-scripts
./androidbuild.sh org.libsdl.testgles ../test/testgles.c
# 或
# ./androidbuild.sh org.libsdl.audio ../test/*audio*# 输出
To build and install to a device for testing, run the following:
cd /home/SDL/build/org.libsdl.testgles
./gradlew installDebug
(2)方式二:自定义APK工程
1.将 SDL/android-project
目录复制并重命名,如YOURPROJECT
。
2.将 SDL
目录移动或符号链接到 YOURPROJECT/app/jni
目录。
3.编辑YOURPROJECT/app/jni/src/Android.mk
以包含您的源文件:
- 它们应该在
LOCAL_SRC_FILES :=
声明后用空格分隔
4a.如想用 Android Studio,只需打开您的YOURPROJECT
目录并开始构建。
4b. 如要手动构建,在项目目录运行 ./gradlew installDebug
。
- 它将在任何连接的 Android 设备上构建和安装您的 .apk
实际操作如下:
# 构建工程目录
cp -rf SDL/android-project/ YOURPROJECT
cp -rf SDL YOURPROJECT/app/jni/SDL# APK工程相应修改# (1) 替换源和gradle版本:# 打开YOURPROJECT/gradle/wrapper/gradle-wrapper.properties#distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zipdistributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.5-bin.zip# 打开YOURPROJECT/build.gradle// classpath 'com.android.tools.build:gradle:8.1.1'classpath 'com.android.tools.build:gradle:7.4.0'# (2) 添加音频权限声明: 在AndroidManifest.xml中添加<uses-permission android:name="android.permission.RECORD_AUDIO"/># (3) 生成源文件:YOURPROJECT/app/jni/src/*.cpp(例如testSDL2.cpp, 代码详情附在下面)# 在YOURPROJECT/app/jni/src/Android.mk中,“LOCAL_SRC_FILES := ” 声明*.cpp后用空格分隔# 编译运行apk# 方式一:用 Android Studio构建# 方式二:运行 ./gradlew installDebug
#include "SDL.h"#include <stdlib.h>
#include <stdio.h>static SDL_AudioSpec spec;
static SDL_AudioDeviceID devid_in = 0;
static SDL_AudioDeviceID devid_out = 0;static void
audio_callback(void *userdata, Uint8 *stream, int len)
{// 这里可以添加音频处理逻辑SDL_Log("标志:音频回调函数被调用,数据长度 = %d\n", len);
}int main(int argc, char **argv)
{SDL_AudioSpec wanted;int devcount;int i;/* 启用标准应用程序日志 */SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);/* 加载SDL库 */if (SDL_Init(SDL_INIT_AUDIO) < 0) {SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "标志:无法初始化SDL: %s\n", SDL_GetError());return 1;}SDL_Log("标志:使用的音频驱动: %s\n", SDL_GetCurrentAudioDriver());devcount = SDL_GetNumAudioDevices(SDL_TRUE);for (i = 0; i < devcount; i++) {SDL_Log("标志:捕获设备 #%d: '%s'\n", i, SDL_GetAudioDeviceName(i, SDL_TRUE));}SDL_zero(wanted);wanted.freq = 44100; // 采样率wanted.format = AUDIO_S16SYS; // 格式wanted.channels = 1; // 通道数wanted.samples = 1024; // 样本数wanted.callback = audio_callback;SDL_zero(spec);/* 打开默认播放设备 */SDL_Log("标志:打开默认播放设备...\n");devid_out = SDL_OpenAudioDevice(NULL, SDL_FALSE, &wanted, &spec, SDL_AUDIO_ALLOW_ANY_CHANGE);if (!devid_out) {SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "标志:无法打开音频播放设备: %s!\n", SDL_GetError());SDL_Quit();exit(1);}/* 打开默认捕获设备 */SDL_Log("标志:打开默认捕获设备...\n");// devid_in = SDL_OpenAudioDevice(NULL, SDL_TRUE, &spec, &spec, 0);devid_in = SDL_OpenAudioDevice(SDL_GetAudioDeviceName(0, SDL_TRUE), SDL_TRUE, &spec, &spec, 0);if (!devid_in) {SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "标志:无法打开音频捕获设备: %s!\n", SDL_GetError());SDL_Quit();exit(1);}SDL_Log("标志:音频设备成功打开!\n");/* 启动音频播放和捕获 */SDL_PauseAudioDevice(devid_out, 0);SDL_PauseAudioDevice(devid_in, 0);SDL_Log("标志:音频播放和捕获已启动。按回车键停止。\n");/* 等待用户输入停止 */getchar();/* 停止音频播放和捕获 */SDL_PauseAudioDevice(devid_out, 1);SDL_PauseAudioDevice(devid_in, 1);SDL_Log("标志:关闭音频设备。\n");/* 关闭音频设备 */SDL_CloseAudioDevice(devid_out);SDL_CloseAudioDevice(devid_in);/* 退出SDL库 */SDL_Quit();return 0;
}
(3)方式三:CMake构建APK工程
1.将 SDL/android-project
目录复制并重命名,如YOURPROJECT
。
2.将 SDL
目录移动或符号链接到 YOURPROJECT/app/jni
目录。
3.编辑YOURPROJECT/app/build.gradle
:注掉 ndk-build 的部分,取消注释 cmake 部分。向CMake调用添加参数。
4.编辑YOURPROJECT/app/jni/CMakeLists.txt
以包含您的项目(默认添加src
子目录):
-
请注意,您的项目中将
SDL2、SDL2main 和 SDL2-static
作为目标,因此您的 CMakeLists.txt 文件中应该有target_link_libraries(yourgame SDL2 SDL2main)
。 -
另请注意,对包含
main
函数的目标,应使用add_library()
而不是add_executable()
。
5a. 如想用 Android Studio,只需打开您的YOURPROJECT
目录并开始构建。
6b. 如要手动构建,在项目目录运行 ./gradlew installDebug
。
- 它将在任何连接的 Android 设备上构建和安装您的 .apk
3.3 android-project 项目文件说明
android-project/appbuild.gradle - 构建信息,包括应用程序版本和SDKsrc/main/AndroidManifest.xml - 包清单。其中包含主Activity的类名和应用程序的包名等信息。jni/ - 存放原生代码的目录jni/Application.mk - 应用程序JNI设置,包括目标平台和STL库jni/Android.mk - 可递归调用所有子目录中Android.mk文件的Android makefilejni/CMakeLists.txt - 顶级CMake项目,将SDL作为子项目添加jni/SDL/ - (指向)存放SDL库文件的目录jni/SDL/Android.mk - 创建SDL共享库的Android makefilejni/src/ - 存放C/C++源代码的目录jni/src/Android.mk - 你应该定制的Android makefile,用于包含源代码和任何库引用jni/src/CMakeLists.txt - 你可以定制的CMake文件,用于包含源代码和任何库引用src/main/assets/ - 存放应用程序资产文件的目录src/main/res/ - 存放应用程序资源的目录src/main/res/mipmap-* - 存放不同手机硬件图标文件的目录src/main/res/values/strings.xml - 应用程序中使用的字符串,包括应用程序名称src/main/java/org/libsdl/app/SDLActivity.java - 处理SDL初始化和绑定的Java类。要非常小心地修改这个类,因为SDL库依赖于这个实现。你应该为你的应用程序继承这个类。
.
声明:资源可能存在第三方来源,若有侵权请联系删除!
相关文章:
SDL2:Android APP编译使用 -- SDL2多媒体库使用音频实例
SDL2:Android APP编译使用 3. SDL2:Android APP编译使用3.1 Android Studio环境准备:3.2 构建Android APP(1)方式一:快速构建APK工程(2)方式二:自定义APK工程(…...
gitignore忽略已经提交过的
已经在.gitignore文件中添加了过滤规则来忽略bin和obj等文件夹,但这些文件夹仍然出现在提交中,可能是因为这些文件夹在添加.gitignore规则之前已经被提交到Git仓库中了。要解决这个问题,您需要从Git的索引中移除这些文件夹,并确保…...
Visual Studio2019调试DLL
1、编写好DLL代码之后,对DLL项目的属性进行设置,选择待注入的DLL,如下图所示 2、生成DLL文件 3、将DLL设置为启动项目之后,按F5启动调试。弹出选择注入的exe的界面之后,使用代码注入器注入步骤2中生成的dllÿ…...
电力场景红外测温图像绝缘套管分割数据集labelme格式2436张1类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):2436 标注数量(json文件个数):2436 标注类别数:1 标注类别名称:["arrester"] 每个类别标注的框数&am…...
RV1126+FFMPEG推流项目(7)AI音频模块编码流程
一、AI 模块和外设麦克风的关系 AI 模块是 RV1126 芯片的一个重要组成部分。它的主要功能是将外部接入的麦克风采集到的模拟信号通过内置的驱动程序转换为数字信号。这意味着麦克风作为外设,提供音频输入信号,AI 模块通过其硬件和软件的结合,…...
从零开始启动一个Vue项目
目录 一、首先下载Node.js 二、安装vue脚手架vue-cli 三、使用vue-ui创建一个vue项目 四、vue项目目录结构 五、启动vue项目 方法一:cmd窗口启动 方法二:软件中启动 一、首先下载Node.js 可以去看我的上一篇博客: NodeJs的安装及环境…...
存储过程和触发器
目录 1、存储过程 1.1 存储过程的概述 1.2 存储过程的类型 1. 系统存储过程 2. 本地存储过程 3. 临时存储过程 4. 扩展存储过程 1.3 T-SQL创建存储过程 1.4 T-SQL执行存储过程 1.5 T-SQL查看存储过程 1.6 T-SQL修改存储过程 1.7 T-SQL删除存储过程 2、触发器 2.1 …...
改进果蝇优化算法之一:自适应缩小步长的果蝇优化算法(ASFOA)
自适应缩小步长的果蝇优化算法(ASFOA)是对传统果蝇优化算法的一种重要改进,旨在克服其后期种群多样性不足、容易过早收敛和陷入局部最优等问题。有关果蝇优化算法的详情可以看我的文章:路径规划之启发式算法之二十七:果蝇优化算法(Fruit Fly Optimization Algorithm,FOA…...
道旅科技借助云消息队列 Kafka 版加速旅游大数据创新发展
作者:寒空、横槊、娜米、公仪 道旅科技:科技驱动,引领全球旅游分销服务 道旅科技 (https://www.didatravel.com/home) 成立于 2012 年,总部位于中国深圳,是一家以科技驱动的全球酒店资源批发商…...
LLM - 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数(PLM) 教程(2)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145188660 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scalin…...
游戏引擎学习第80天
Blackboard:增强碰撞循环,循环遍历两种类型的 t 值 计划对现有的碰撞检测循环进行修改,以便实现一些新的功能。具体来说,是希望处理在游戏中定义可行走区域和地面的一些实体。尽管这是一个2D游戏,目标是构建一些更丰富…...
CSS布局与响应式
学习链接 Grid网格布局 前端五大主流网页布局 flex布局看这一篇就够了 grid布局看这一篇就够了 用六个案例学会响应式布局 伸缩盒响应式页面布局实战 实现响应式布局的五种方式 - csdn 如何完成响应式布局,有几种方法?看这个就够了 响应式布局总…...
PyBroker:利用 Python 和机器学习助力算法交易
PyBroker:利用 Python 和机器学习助力算法交易 你是否希望借助 Python 和机器学习的力量来优化你的交易策略?那么你需要了解一下 PyBroker!这个 Python 框架专为开发算法交易策略而设计,尤其关注使用机器学习的策略。借助 PyBrok…...
深入了解卷积神经网络(CNN):图像处理与深度学习的革命性技术
深入了解卷积神经网络(CNN):图像处理与深度学习的革命性技术 导语 卷积神经网络(CNN)是现代深度学习领域中最重要的模型之一,特别在计算机视觉(CV)领域具有革命性的影响。无论是图…...
彩色图像面积计算一般方法及MATLAB实现
一、引言 在数字图像处理中,经常需要获取感兴趣区域的面积属性,下面给出图像处理的一般步骤。 1.读入的彩色图像 2.将彩色图像转化为灰度图像 3.灰度图像转化为二值图像 4.区域标记 5.对每个区域的面积进行计算和显示 二、程序代码 %面积计算 cle…...
[Qt] Box Model | 控件样式 | 实现log_in界面
目录 1、样式属性 (1)盒模型(Box Model) 2、控件样式示例 (1)按钮 (2)复选框 (3)单选框 (4)输入框 (5)…...
内存与缓存:保姆级图文详解
文章目录 前言1、计算机存储设备1.1、硬盘、内存、缓存1.2、金字塔结构1.3、数据流通过程 2、数据结构内存效率3、数据结构缓存效率 前言 亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的…...
IM聊天学习资源
文章目录 参考链接使用前端界面简单效果消息窗口平滑滚动至底部vue使用watch监听vuex中的变量变化 websocket握手认证ChatKeyCheckHandlerNettyChatServerNettyChatInitializer 参考链接 zzhua/netty-chat-web - 包括前后端 vue.js实现带表情评论功能前后端实现(仿…...
Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)
目录 前言1. 基本知识2. Java代码 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 单纯学习Redis可以看我前言的Java基本知识路线!! 对于Java的基本知识推荐阅读: java框架…...
SpringMvc解决跨域问题的源码汇总。
看本文章前,需了解跨域的缘由。 其次,了解RequestMapping的基础原理 最后我们来解析SpringMvc是如何处理跨域问题的。 跨域信息配置 SpringMvc分为全局级别和局部级别两种,全局级别就是任何跨域请求都起作用。 全局级别 全局级别就是在配…...
25.1.17学习内容
B - 迷宫 Description 给定一个 NM 方格的迷宫,迷宫里有 T 处障碍,障碍处不可通过。 在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。 给定起点坐标和终点坐标,每个方格最多经过一次…...
【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)
本文项目编号 T 141 ,文末自助获取源码 \color{red}{T141,文末自助获取源码} T141,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
Qt之文件系统操作和读写
Qt creator 6.80 MinGw 64bit 文本文件是指以纯文本格式存储的文件,如cpp和hpp文件。XML文件和JSON文件也是文本文件,只是使用了特定的标记符号定义文本的含义,读取这种文本文件需要先对内容解析再显示。 qt提供了两种读写文本文件的方法。…...
合合信息名片全能王上架原生鸿蒙应用市场,成为首批数字名片类应用
长期以来,名片都是企业商务沟通的重要工具。随着企业数字化转型,相较于传统的纸质名片,数字名片对于企业成员拓展业务、获取商机、提升企业形象等方面发挥着重要作用。近期,合合信息旗下名片全能王正式上线原生鸿蒙应用市场&#…...
万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用
文章目录 一、引言二、ARINC 653背景三、整体系统架构四、应用/执行(APEX)接口五、ARINC 653 RTOS内部机制六、健康监测功能七、软件应用八、ARINC 653现状九、总结 一、引言 在现代航空领域,综合模块化航空电子设备(IMA…...
jenkins-node节点配置
一.简述: Jenkins有一个很强大的功能: 即:支持分布式构建(jenkins配置中叫节点(node),也被称为slave)。分布式构建通常是用来吸收额外的负载。通过动态添加额外的机器应对构建作业中的高峰期,或在特定操作系统或环境运行特定的构建…...
【Flink系列】5. DataStream API
5. DataStream API DataStream API是Flink的核心层API。一个Flink程序,其实就是对DataStream的各种转换。具体来说,代码基本上都由以下几部分构成: 5.1 执行环境(Execution Environment) Flink程序可以在各种上下文…...
【tailscale 和 ssh】当服务器建立好节点,但通过客户端无法通过 ssh 连接
背景 当服务器建立好节点,一切显示正常但通过客户端无法通过 vs code 中的 ssh 连接到服务器 问题解决 因为服务器是重装过的,所以忘记在服务器上下载 ssh 了。。。安装完成并启动 SSH 服务后便可正常连接! sudo apt update sudo apt in…...
TDengine 做 Apache SuperSet 数据源
Apache Superset 是一个现代的企业级商业智能(BI)Web 应用程序,主要用于数据探索和可视化。它由 Apache 软件基金会支持,是一个开源项目,它拥有活跃的社区和丰富的生态系统。Apache Superset 提供了直观的用户界面…...
PCL 新增自定义点类型【2025最新版】
目录 一、自定义点类型1、前言2、定义方法3、代码示例二、合并现有类型三、点云按时间渲染1、CloudCompare渲染2、PCL渲染博客长期更新,本文最近更新时间为:2025年1月18日。 一、自定义点类型 1、前言 PCL库自身定义了很多点云类型,但是在使用的时候时如果要使用自己定义的…...
【记录52】el-table-column 添加fixed属性 滚动条无法滑动
问题: el-table-column 添加fixed属性 滚动条无法滑动 使用element UI组件,用到el-table的el-table-column的fixed属性时,当滚动条长度小于固定列时,滚动条无法通过鼠标去点击滑动操作 原因 fixed是用来固定列的属性,其…...
华为OD机试E卷 ---最大值
一、题目描述 给定一组整数(非负),重排顺序后输出一个最大的整数。 二、示例1 用例1 输入 10 9输出 910说明:输出结果可能非常大,所以你需要返回一个 字符串只而不是整数。 三、输入描述 数字组合 四、输出描述 最大的整数 五、解题思路 字符…...
服务器迁移MySQL
由于公司原有的服务器不再使用,需要将老的服务器上的MySQL迁移到新的服务器上,因此需要对数据进行备份迁移,前提是两台服务器已安装相同版本的MySQL,这里就不再讲解MySQL的安装步骤了,可以安装包、可以在线下载、可以容…...
.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...
【Linux系统】分区挂载
我们能够根据一个 inode 号在指定分区寻找目标文件的 struct inode,也能根据目录文件的内容,通过映射关系,找指定的 inode,可是,现在有个问题: 问题:inode 是不能跨分区使用的!Linu…...
进阶——十六届蓝桥杯嵌入式熟练度练习(按键+LCD)
高亮(一) 声明 char buf[21];unsigned char upled0x04;uint8_t key_val;uint8_t key_down,key_up,key_old;uint32_t key_time;uint8_t key_temp,key_flag;uint8_t line_flag; 按键代码 void key_proc(void) { key_valkey_scan();key_downkey_val&…...
简单介绍JSONStream的使用
地址 作用 这个模块是根据需要筛选出json数据中自己所需要的数据 使用 var JSONStream require("JSONStream"); var parse require("fast-json-parse"); var fs require("fs");fs.createReadStream("./time.json").pipe(JSONSt…...
LTX-Video 高效视频生成模型,一键处理图片文字
LTX-Video 是由 Lightricks 在 2024 年开发的一种视频生成模型,这种模型采用了 transformer 和 Video-VAE 技术,能够高效生成高分辨率视频。此外,LTX-Video 支持多种视频生成方式,包括从文本到视频和从图像到视频。 教程链接&…...
AUTOSAR从入门到精通专栏总目录
AUTOSAR通过分层、模块化和封装的特性,革命性地改变了汽车电子软件开发。它简化了软硬件接口,提高了软件复用性,降低了开发成本和周期。随着 AUTOSAR 在汽车电子系统开发领域的广泛应用,对其深入理解和熟练掌握已成为汽车电子软件…...
Windows环境本地配置pyspark环境详细教程
目录 一、背景简记二、本地单机spark环境配置详细步骤第一步:python环境安装第二步:安装jdk及配置环境变量安装包下载安装环境变量配置 第三步:安装Spark安装包下载安装配置环境变量 第四步:安装hadoop安装包下载安装配置环境变量…...
第8篇:从入门到精通:掌握Python异常处理
第8篇:异常处理 内容简介 本篇文章将深入探讨Python中的异常处理机制。您将学习异常的基本概念与类型,掌握使用try-except块处理异常的方法,了解finally语句的作用,以及如何抛出和定义自定义异常。通过丰富的代码示例࿰…...
聚铭网络6款产品入选CCIA《网络安全专用产品指南》
近日,中国网络安全产业联盟CCIA正式发布《网络安全专用产品指南》(第二版)(以下简称《指南》)。聚铭网络凭借突出技术优势、创新能力以及市场积累,旗下安全产品成功入选防火墙、网络安全审计、日志分析、网…...
高等数学学习笔记 ☞ 不定积分的积分方法
1. 第一换元积分法 1. 基础概念:形如的过程,称为第一换元积分法。 2. 核心思想:通过对被积函数的观察(把被积函数的形式与积分表的积分公式进行比较),把外部的部分项拿到的内部(求原函数), 然后进行拼凑,…...
08、如何预防SQL注入
目录 1、分析及其存在哪些危险 2、预防SQL注入 1、分析及其存在哪些危险 原理: SQL 注入是一种常见的网络攻击手段,攻击者通过在用户输入中插入恶意的 SQL 语句,利用程序对用户输入处理不当的漏洞,使恶意 SQL 语句被数据库服务器执行。 通常发生在应用程序将用户输入直接拼…...
如何发布自己的第一个Chrome扩展程序
如何发布自己的Chrome扩展程序 只需要六步即可完成Chrome扩展程序的发布 (1)首先打开google chrome 应用商城注册开发者账号的页面 (2)现在进行一个绑卡支付5美元的一次性注册费用即可。【不知道如何绑卡的支付的,文…...
ubuntu开机自启,其他方式
在 Ubuntu 22.04 中,如果不使用 .service 文件,仍然有其他方法可以让某个 .sh 文件随着系统启动而自动运行。以下是几种替代方法: 方法一:使用 crontab 的 reboot 选项 crontab 是 Linux 中用于设置周期性被执行的任务的工具。通…...
容器渗透横向
本质上要获得 1.获得容器IP段 2.获得主机IP段 3.获得本机IP 4.通过CNI或Docker0等扫描本机端口 Flannel 容器信息 rootubuntu-linux-22-04-desktop:/home/parallels/Desktop# k get po -A -o wide NAMESPACE NAME …...
软件测试—接口测试面试题及jmeter面试题
一,接口面试题 1.接口的作用 实现前后端的交互,实现数据的传输 2.什么是接口测试 接口测试就是对系统或组件之间的接口进行测试,主要是校验数据的交换、传递和控制管理过程,以及相互逻辑关系 3.接口测试必要性 1.可以发现很…...
ansible之playbook剧本
Playbook 1.playbook的组成部分 开头 用 --- 表示,表示是一个yaml文件,但是可以忽略不写 Tasks(任务) 包含了在目标主机上执行的操作,操作还是由模板来执行。每一个任务都是一个ansible的模块,调用系统命…...
基于 Python 的财经数据接口库:AKShare
AKShare 是基于 Python 的财经数据接口库,目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具,主要用于学术研究目的。 安装 安装手册见…...