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

Windows + vmware + ubuntu+docker + docker-android实现Android模拟器构建和启动

文章目录

          • 引言
          • 编译启动过程
          • 玩下adb
          • 最后

引言

Windows + vmware + ubuntu+docker+docker-android实现Android模拟器启动
在这里插入图片描述

编译启动过程
#下载docker-android
git clone https://github.com/budtmo/docker-android.gitmaqi@ubuntu:~/docker-android$ git remote -v
origin	https://github.com/budtmo/docker-android.git (fetch)
origin	https://github.com/budtmo/docker-android.git (push)#进入
cd  docker-android#构建示例下面为你针对 base, emulator, genymotion, pro-emulator, pro-emulator_headless 这几个项目类型,分别给出构建示例。
1. 构建 base 项目base 项目不涉及 Android 版本,只需指定任务、项目和发布版本。bash
./app.sh build base v1.0
build 是任务,表示进行构建操作。
base 是项目类型。
v1.0.0 是发布版本。
2. 构建 emulator 项目
emulator 项目需要指定 Android 版本。bash
./app.sh build emulator v1.0 10.0
build 是任务。
emulator 是项目类型。
v1.0.0 是发布版本。
10.0 是 Android 版本。
3. 构建 genymotion 项目
genymotion 项目不涉及 Android 版本,只需指定任务、项目和发布版本。bash
./app.sh build genymotion v1.0
build 是任务。
genymotion 是项目类型。
v1.0.0 是发布版本。
4. 构建 pro-emulator 项目
pro-emulator 项目需要指定 Android 版本。bash
./app.sh build pro-emulator v1.0 11.0
build 是任务。
pro-emulator 是项目类型。
v1.0.0 是发布版本。
11.0 是 Android 版本。
5. 构建 pro-emulator_headless 项目
pro-emulator_headless 项目需要指定 Android 版本。bash
./app.sh build pro-emulator_headless v1.0 12.0build 是任务。
pro-emulator_headless 是项目类型。
v1.0.0 是发布版本。
12.0 是 Android 版本。./app.sh build base v1.0
budtmo/docker-android:base_v1.0 or budtmo/docker-android:base 
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.Install the buildx component to build images with BuildKit:https://docs.docker.com/go/buildx/Sending build context to Docker daemon  27.42MB
Step 1/8 : FROM appium/appium:v2.16.2-p0
v2.16.2-p0: Pulling from appium/appium
Digest: sha256:6e027f51040c5656eef82ba5a0670bf4f8d758160fefabec3bed3b044986fb43
Status: Downloaded newer image for appium/appium:v2.16.2-p0---> cbd9e2a65aa8
Step 2/8 : LABEL maintainer "Budi Utomo <budtmo.os@gmail.com>"---> Running in 27bf326d3e72---> Removed intermediate container 27bf326d3e72---> 0583bdaf2399
Step 3/8 : USER root---> Running in 4ec6c4bcb706---> Removed intermediate container 4ec6c4bcb706---> 0ac4819be397
Step 4/8 : RUN apt-get -qqy update && apt-get -qqy install --no-install-recommends     socat     supervisor  && apt autoremove -y  && apt clean all  && rm -rf /var/lib/apt/lists/*---> Running in 207a65e0a692
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package python3-pkg-resources.
(Reading database ... 18485 files and directories currently installed.)
Preparing to unpack .../python3-pkg-resources_45.2.0-1ubuntu0.2_all.deb ...
Unpacking python3-pkg-resources (45.2.0-1ubuntu0.2) ...
Selecting previously unselected package supervisor.
Preparing to unpack .../supervisor_4.1.0-1ubuntu1_all.deb ...
Unpacking supervisor (4.1.0-1ubuntu1) ...
Selecting previously unselected package socat.
Preparing to unpack .../socat_1.7.3.3-2_amd64.deb ...
Unpacking socat (1.7.3.3-2) ...
Setting up python3-pkg-resources (45.2.0-1ubuntu0.2) ...
Setting up supervisor (4.1.0-1ubuntu1) ...
invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.
Setting up socat (1.7.3.3-2) ...WARNING: apt does not have a stable CLI interface. Use with caution in scripts.Reading package lists...
Building dependency tree...
Reading state information...
0 upgraded, 0 newly installed, 0 to remove and 28 not upgraded.WARNING: apt does not have a stable CLI interface. Use with caution in scripts.---> Removed intermediate container 207a65e0a692---> 88e7bb12bd16
Step 5/8 : RUN apt-get -qqy update &&     apt-get -qqy --no-install-recommends install     python3-pip   && apt-get clean   && rm -rf /var/lib/apt/lists/*   && update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1---> Running in 591b85d4cd5b
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package python-pip-whl.
(Reading database ... 18687 files and directories currently installed.)
Preparing to unpack .../0-python-pip-whl_20.0.2-5ubuntu1.11_all.deb ...
Unpacking python-pip-whl (20.0.2-5ubuntu1.11) ...
Selecting previously unselected package python3-lib2to3.
Preparing to unpack .../1-python3-lib2to3_3.8.10-0ubuntu1~20.04_all.deb ...
Unpacking python3-lib2to3 (3.8.10-0ubuntu1~20.04) ...
Selecting previously unselected package python3-distutils.
Preparing to unpack .../2-python3-distutils_3.8.10-0ubuntu1~20.04_all.deb ...
Unpacking python3-distutils (3.8.10-0ubuntu1~20.04) ...
Selecting previously unselected package python3-setuptools.
Preparing to unpack .../3-python3-setuptools_45.2.0-1ubuntu0.2_all.deb ...
Unpacking python3-setuptools (45.2.0-1ubuntu0.2) ...
Selecting previously unselected package python3-wheel.
Preparing to unpack .../4-python3-wheel_0.34.2-1ubuntu0.1_all.deb ...
Unpacking python3-wheel (0.34.2-1ubuntu0.1) ...
Selecting previously unselected package python3-pip.
Preparing to unpack .../5-python3-pip_20.0.2-5ubuntu1.11_all.deb ...
Unpacking python3-pip (20.0.2-5ubuntu1.11) ...
Setting up python3-wheel (0.34.2-1ubuntu0.1) ...
Setting up python-pip-whl (20.0.2-5ubuntu1.11) ...
Setting up python3-lib2to3 (3.8.10-0ubuntu1~20.04) ...
Setting up python3-distutils (3.8.10-0ubuntu1~20.04) ...
Setting up python3-setuptools (45.2.0-1ubuntu0.2) ...
Setting up python3-pip (20.0.2-5ubuntu1.11) ...
update-alternatives: using /usr/bin/pip3 to provide /usr/bin/pip (pip) in auto mode
update-alternatives: warning: not replacing /usr/bin/pip with a link---> Removed intermediate container 591b85d4cd5b---> 7158387b34a4
Step 6/8 : ARG DOCKER_ANDROID_VERSION=test-version---> Running in 893a0a103a3b---> Removed intermediate container 893a0a103a3b---> cfe4f73892fc
Step 7/8 : ENV DOCKER_ANDROID_VERSION=${DOCKER_ANDROID_VERSION}---> Running in f8f65114fbeb---> Removed intermediate container f8f65114fbeb---> 078754b22380
Step 8/8 : EXPOSE 4723 5554 5555---> Running in c1af0c39436e---> Removed intermediate container c1af0c39436e---> 193db025ab13
Successfully built 193db025ab13
Successfully tagged budtmo/docker-android:base_v1.0	
#基础镜像构建成功#开始自定义镜像
maqi@ubuntu:~/docker-android$ ./app.sh build emulator 
Release Version (v2.0.0-p0|v2.0.0-p1|etc) : v1.0
Android Version (9.0|10.0|11.0|12.0|13.0|14.0) : 11.0#构建成功
Step 27/29 : STOPSIGNAL SIGTERM---> Running in e957f32ce917---> Removed intermediate container e957f32ce917---> 41cb968da678
Step 28/29 : ENV DEVICE_TYPE=emulator---> Running in 5014ab25ed79---> Removed intermediate container 5014ab25ed79---> c4041a0a6967
Step 29/29 : ENTRYPOINT ["/home/androidusr/docker-android/mixins/scripts/run.sh"]---> Running in c8cee0549c59---> Removed intermediate container c8cee0549c59---> 4321fb8d1d72
Successfully built 4321fb8d1d72
Successfully tagged budtmo/docker-android:emulator_11.0_v1.0#查找镜像
docker images
budtmo/docker-android                                                   emulator_11.0        4321fb8d1d72   About a minute ago   7.37GB
budtmo/docker-android                                                   emulator_11.0_v1.0   4321fb8d1d72   About a minute ago   7.37GB#镜像说明:
在 Docker 中,标签是用来标识镜像的不同版本或用途的。budtmo/docker-android:emulator_11.0_v1.0 表示这是 Android 11.0 版本的第 v1.0 次发布,而 budtmo/docker-android:emulator_11.0 则通常表示这个 Android 11.0 版本的最新镜像。通过这种方式,用户可以选择使用特定版本的镜像,也可以使用最新版本的镜像。# 测试镜像
./app.sh test emulatormaqi@ubuntu:~/docker-android$ ./app.sh test emulator
Release Version (v2.0.0-p0|v2.0.0-p1|etc) : ^C
maqi@ubuntu:~/docker-android$ ./app.sh test emulator
Release Version (v2.0.0-p0|v2.0.0-p1|etc) : v1.0
Android Version (9.0|10.0|11.0|12.0|13.0|14.0) : 11.0
budtmo/docker-android:emulator_11.0_v1.0 or budtmo/docker-android:emulator_11.0 
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.BuildKit is currently disabled; enable it by removing the DOCKER_BUILDKIT=0environment-variable.Sending build context to Docker daemon  27.42MB
Step 1/29 : ARG DOCKER_ANDROID_VERSION
Step 2/29 : FROM budtmo/docker-android:base_${DOCKER_ANDROID_VERSION}---> 193db025ab13
Step 3/29 : ARG EMULATOR_ANDROID_VERSION---> Using cache---> a78f0a51dd7a
Step 4/29 : ARG EMULATOR_API_LEVEL---> Using cache---> cd3f832ebb38
Step 5/29 : ENV EMULATOR_ANDROID_VERSION=${EMULATOR_ANDROID_VERSION}     EMULATOR_API_LEVEL=${EMULATOR_API_LEVEL}     EMULATOR_SYS_IMG=x86_64     EMULATOR_IMG_TYPE=google_apis     EMULATOR_BROWSER=chrome---> Using cache---> 383b46a5735d
Step 6/29 : ENV PATH ${PATH}:${ANDROID_HOME}/build-tools---> Using cache---> 92c8cb8d5ece
Step 7/29 : RUN yes | sdkmanager --licenses  && sdkmanager "platforms;android-${EMULATOR_API_LEVEL}"  "system-images;android-${EMULATOR_API_LEVEL};${EMULATOR_IMG_TYPE};${EMULATOR_SYS_IMG}" "emulator"  && ln -s ${ANDROID_HOME}/emulator/emulator /usr/bin/---> Using cache---> 908ef403a384
Step 8/29 : RUN apt-get -qqy update && apt-get -qqy install --no-install-recommends     ffmpeg     feh     libxcomposite-dev     menu     openbox     x11vnc     xterm  && apt autoremove -y  && apt clean all  && rm -rf /var/lib/apt/lists/*---> Using cache---> ef64d5b391bc
Step 9/29 : ENV NOVNC_VERSION="1.4.0"     WEBSOCKIFY_VERSION="0.11.0"     OPT_PATH="/opt"---> Using cache---> 5e526f84a0ab
Step 10/29 : RUN  wget -nv -O noVNC.zip "https://github.com/novnc/noVNC/archive/refs/tags/v${NOVNC_VERSION}.zip"  && unzip -x noVNC.zip  && rm noVNC.zip   && mv noVNC-${NOVNC_VERSION} ${OPT_PATH}/noVNC  && wget -nv -O websockify.zip "https://github.com/novnc/websockify/archive/refs/tags/v${WEBSOCKIFY_VERSION}.zip"  && unzip -x websockify.zip  && mv websockify-${WEBSOCKIFY_VERSION} ${OPT_PATH}/noVNC/utils/websockify  && rm websockify.zip  && ln ${OPT_PATH}/noVNC/vnc.html ${OPT_PATH}/noVNC/index.html---> Using cache---> 9b21318a92e6
Step 11/29 : ENV DISPLAY=:0     SCREEN_NUMBER=0     SCREEN_WIDTH=1600     SCREEN_HEIGHT=900     SCREEN_DEPTH=24+32     VNC_PORT=5900     WEB_VNC_PORT=6080---> Using cache---> b9737d729c07
Step 12/29 : EXPOSE 5900 6080---> Using cache---> 891c996f15f5
Step 13/29 : RUN rm -rf ${SCRIPT_PATH}---> Using cache---> 495412a21358
Step 14/29 : ENV SCRIPT_PATH="docker-android"---> Using cache---> 1d100718d943
Step 15/29 : ENV WORK_PATH="/home/androidusr"---> Using cache---> 5733c22096a4
Step 16/29 : ENV APP_PATH=${WORK_PATH}/${SCRIPT_PATH}---> Using cache---> 510bec1a654b
Step 17/29 : RUN mkdir -p ${APP_PATH}---> Using cache---> fa953bad2143
Step 18/29 : COPY mixins ${APP_PATH}/mixins---> Using cache---> a52257e25158
Step 19/29 : COPY cli ${APP_PATH}/cli---> Using cache---> a7ea9beed873
Step 20/29 : RUN chown -R 1300:1301 ${APP_PATH}  && pip install --quiet -e ${APP_PATH}/cli---> Using cache---> f6eae1a3eafa
Step 21/29 : RUN echo ${APP_PATH}/mixins/configs/display/.fehbg >> /etc/xdg/openbox/autostart---> Using cache---> 98772b2eee10
Step 22/29 : USER 1300:1301---> Using cache---> 9574c1d6c7c5
Step 23/29 : ENV LOG_PATH=${WORK_PATH}/logs     WEB_LOG_PORT=9000---> Using cache---> e9984bb40d56
Step 24/29 : EXPOSE 9000---> Using cache---> 4c7a521d7a17
Step 25/29 : RUN mkdir -p ${LOG_PATH}---> Using cache---> 46b19bdf90d0
Step 26/29 : RUN mkdir -p "${WORK_PATH}/.config/Android Open Source Project"  && echo "[General]\nshowNestedWarning=false\n" > "${WORK_PATH}/.config/Android Open Source Project/Emulator.conf"---> Using cache---> 2b1da6ef9ba1
Step 27/29 : STOPSIGNAL SIGTERM---> Using cache---> 41cb968da678
Step 28/29 : ENV DEVICE_TYPE=emulator---> Using cache---> c4041a0a6967
Step 29/29 : ENTRYPOINT ["/home/androidusr/docker-android/mixins/scripts/run.sh"]---> Using cache---> 4321fb8d1d72
Successfully built 4321fb8d1d72
Successfully tagged budtmo/docker-android:emulator_11.0_v1.0
test_create_device (src.tests.device.test_device.TestDevice) ... ok
test_adb_name (src.tests.device.test_emulator.TestEmulator) ... ok
test_check_adb_command (src.tests.device.test_emulator.TestEmulator) ... ok
test_check_adb_command_out_of_attempts (src.tests.device.test_emulator.TestEmulator) ... ok
test_create_device_exists (src.tests.device.test_emulator.TestEmulator) ... ok
test_create_device_not_exist (src.tests.device.test_emulator.TestEmulator) ... ok
test_initialisation_config_not_exist (src.tests.device.test_emulator.TestEmulator) ... ok
test_initialisation_device_exists (src.tests.device.test_emulator.TestEmulator) ... ok
test_initialisation_device_not_exist (src.tests.device.test_emulator.TestEmulator) ... ok
test_invalid_android_version (src.tests.device.test_emulator.TestEmulator) ... ok
test_invalid_device (src.tests.device.test_emulator.TestEmulator) ... ok
test_boolean_converter_with_empty (src.tests.helper.test_helper.TestHelperMethods) ... ok
test_boolean_converter_with_invalid_format (src.tests.helper.test_helper.TestHelperMethods) ... ok
test_boolean_converter_with_invalid_str (src.tests.helper.test_helper.TestHelperMethods) ... ok
test_boolean_converter_with_valid_str (src.tests.helper.test_helper.TestHelperMethods) ... ok
test_get_env_value_from_invalid_key (src.tests.helper.test_helper.TestHelperMethods) ... ok
test_get_env_value_from_valid_key (src.tests.helper.test_helper.TestHelperMethods) ... ok
test_get_env_value_with_empty_string (src.tests.helper.test_helper.TestHelperMethods) ... ok
test_get_env_value_with_invalid_format (src.tests.helper.test_helper.TestHelperMethods) ... ok
test_symlink (src.tests.helper.test_helper.TestHelperMethods) ... ok
test_symlink_already_exist (src.tests.helper.test_helper.TestHelperMethods) ... ok
test_symlink_file_not_exists (src.tests.helper.test_helper.TestHelperMethods) ... ok----------------------------------------------------------------------
XML: /home/androidusr/docker-android/cli/test-results/xunit.xml
Name                          Stmts   Miss  Cover
-------------------------------------------------
src/__init__.py                   0      0   100%
src/application/__init__.py      26     11    58%
src/constants/DEVICE.py           5      0   100%
src/constants/ENV.py             34      0   100%
src/constants/__init__.py         1      0   100%
src/device/__init__.py          117     56    52%
src/device/emulator.py          146     50    66%
src/helper/__init__.py           28      1    96%
src/logger/__init__.py            2      0   100%
-------------------------------------------------
TOTAL                           359    118    67%
----------------------------------------------------------------------
Ran 22 tests in 0.392sOK# 推送镜像
# 如果你有推送权限,且镜像仓库等配置正确,可执行此步骤
./app.sh push emulator # 启动镜像
docker run --rm -d -p 6080:6080 -p 5900:5900 -p 5555:5555 \
-e EMULATOR_DEVICE="Nexus 7" \
-e WEB_VNC=true \
--device /dev/kvm \
-e EMULATOR_ADDITIONAL_ARGS="-cores 4 -memory 8192" \
-e EMULATOR_DATA_PARTITION=9000m  \
--name android-container budtmo/docker-android:emulator_11.0_v1.0# 检查进度
docker exec -it android-container cat device_status
玩下adb
adb shell
generic_x86_64_arm64:/ $ unmae -r
/system/bin/sh: unmae: inaccessible or not found
127|generic_x86_64_arm64:/ $ uname -r
5.4.249-android11-2-00004-g212a7aaded26-ab10688362
generic_x86_64_arm64:/ $ ls
acct      apex  bugreports  config  data         debug_ramdisk  dev  init             linkerconfig  metadata  odm  proc     res     storage  system      vendor
adb_keys  bin   cache       d       data_mirror  default.prop   etc  init.environ.rc  lost+found    mnt       oem  product  sdcard  sys      system_ext
最后

1.使用WSL+kernel内核kvm加速体验可能会更好。这种嵌套虚拟化的方式非常消耗性能不建议使用。
2.可以结合Gmsaas远程模拟器使用,实现更多模拟器自由
3.最终效果见顶部截图,访问localhost:6080或者vnc访问5900端口,

相关文章:

Windows + vmware + ubuntu+docker + docker-android实现Android模拟器构建和启动

文章目录 引言编译启动过程玩下adb最后 引言 Windows vmware ubuntudockerdocker-android实现Android模拟器启动 编译启动过程 #下载docker-android git clone https://github.com/budtmo/docker-android.gitmaqiubuntu:~/docker-android$ git remote -v origin https://…...

远程团队协作效率低,如何优化

在远程工作的环境中&#xff0c;团队协作效率低下成为许多企业面临的一大挑战。随着全球化和技术进步&#xff0c;远程团队的出现成为企业的常态&#xff0c;但由于沟通不畅、任务管理不明确、缺乏团队凝聚力等问题&#xff0c;往往会影响团队的整体效率。为了优化远程团队的协…...

Oracle 19C 通过 ODBC 连接 SQL Server 数据库指南 (Red Hat 7)

前言 本指南详细说明如何在 Red Hat Enterprise Linux 7 系统上配置 Oracle 19C 通过 ODBC 连接 SQL Server 数据库。这种异构数据库连接方式称为 Oracle Heterogeneous Services,允许 Oracle 数据库直接访问非 Oracle 数据源。 系统要求 操作系统:Red Hat Enterprise Linu…...

【MYSQL从入门到精通】数据类型及建表

一些基础操作语句 1.使用客户端工具连接数据库服务器&#xff1a;mysql -uroot -p 2.查看所有数据库&#xff1a;show databases; 3.创建属于自己的数据库&#xff1a; create database 数据库名;create database if not exists 数据库名; 强烈建议大家在建立数据库时指定编…...

鸿蒙开发中的并发与多线程

文章目录 前言异步并发 (Promise和async/await)多线程并发并发能力选择耗时任务并发执行场景常见业务场景 常驻任务并发执行场景常见业务场景 传统共享内存并发业务长时任务并发执行场景常见业务场景 并发任务管理线程间通信同语言线程间通信&#xff08;ArkTS内&#xff09;线…...

ruby self

在 Ruby 中&#xff0c;self 是一个指向当前对象的特殊变量&#xff0c;它的值根据代码的上下文动态变化。理解 self 的指向是掌握 Ruby 面向对象编程的关键。以下是详细解析&#xff1a; 一、self 的核心规则 self 始终指向当前方法的执行者&#xff08;即调用方法的对象&…...

Kotlin 学习-集合

/*** kotlin 集合* List:是一个有序列表&#xff0c;可通过索引&#xff08;下标&#xff09;访问元素。元素可以在list中出现多次、元素可重复* Set:是元素唯一的集合。一般来说 set中的元素顺序并不重要、无序集合* Map:&#xff08;字典&#xff09;是一组键值对。键是唯一的…...

封装方法的辨析

equals //字符串 str1.equals(str2); //list的两个实现类 list1.equals(list2); //map的两个实现类 //比较所有的键值对是否相同 map1.equals(map2); //数组&#xff08;包括string类型&#xff09; //比较内容是否相同 Arrays.equals(array1, array2); contains 基本都有…...

解决 IntelliJ IDEA 中 Maven 项目左侧项目视图未显示顶层目录问题的详细步骤说明

以下是解决 IntelliJ IDEA 中 Maven 项目左侧项目视图未显示顶层目录问题的详细步骤说明&#xff1a; 1. 切换项目视图模式 默认情况下&#xff0c;IDEA 的项目视图可能处于 Packages 模式&#xff0c;仅显示代码包结构&#xff0c;而非物理目录。 操作步骤&#xff1a; 点击…...

CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析

当前的CMIP6计划相较于前代模型&#xff0c;在空间分辨率、物理过程表达和地球系统组件耦合等方面均有显著提升。 一&#xff1a;气候变化研究的AI新视角 1、气候模型基础与全球气候模型&#xff08;GCM&#xff09; 全球气候&#xff08;环流&#xff09;模型的基本原理、发…...

如何精准控制大模型的推理深度

论文标题 ThinkEdit: Interpretable Weight Editing to Mitigate Overly Short Thinking in Reasoning Models 论文地址 https://arxiv.org/pdf/2503.22048 代码地址 https://github.com/Trustworthy-ML-Lab/ThinkEdit 作者背景 加州大学圣迭戈分校 动机 链式推理能显…...

1. Git 下载和安装

文章目录 Git 下载Git 安装&#xff08;以windows为例&#xff09;Git 使用&#xff08;以windows为例&#xff09; Git 下载 1.进 Git 官网 https://git-scm.com/downloads 2.选择对应的操作系统 3.选择对应的操作系统位数 Git 安装&#xff08;以windows为例&#xff09;…...

git回滚指定版本并操作

你可以通过以下步骤切换到第三个版本。根据你的需求&#xff0c;有两种主要方法&#xff1a; 方法 1&#xff1a;临时查看第三个版本&#xff08;不修改当前分支&#xff09; 适用于仅查看或测试旧版本&#xff0c;不保留后续修改&#xff1a; 找到第三个版本的提交哈希&#…...

FastAdmin和thinkPHP学习文档

介绍 - FastAdmin框架文档 - FastAdmin开发文档https://doc.fastadmin.net/doc目录结构 ThinkPHP5.0完全开发手册 看云ThinkPHP V5.0是一个为API开发而设计的高性能框架——是一个颠覆和重构版本&#xff0c;采用全新的架构思想&#xff0c;引入了很多的PHP新特性&#xff0c…...

通过HTTP协议实现Git免密操作的解决方案

工作中会遇到这样的问题的。 通过HTTP协议实现Git免密操作的解决方案 方法一&#xff1a;启用全局凭据存储&#xff08;推荐&#xff09; 配置凭证存储‌ 执行以下命令&#xff0c;让Git永久保存账号密码&#xff08;首次操作后生效&#xff09;&#xff1a; git config --g…...

git 查看某一文件夹下所有文件 修改记录

git: 如何查询某个文件或者某个目录的更新历史_git 查看指定文件夹的记录-CSDN博客 git log --follow path/to/your/file git log -p --follow path/to/your/file git log --stat --follow path/to/your/file这是最常用的方法&#xff0c;可以显示指定文件的所有提交历史…...

测试(一)

软件的生命周期&#xff1a; 需求分析——计划——设计——编码——测试——运行维护 常见的开发模型&#xff1a; 瀑布模型&#xff1a; 最基本的开发模型&#xff0c;绝大多数开发模型的基本框架。 特点&#xff1a;线性的开发流程 使用场景&#xff1a;需求固定&#xff…...

解决华硕主板Z890m下载ubuntu20.04后没有以太网问题

问题描述&#xff1a; 华硕主板Z890m下载双系统ubuntu20.04后&#xff0c;发现ubuntu不能打开以太网。 问题原因&#xff1a; 华硕主板的网卡驱动是r8125,而ubuntu20.04的驱动版本是r8169&#xff0c;所以是网卡驱动不匹配造成 解决方案 开机界面按下F2进入BOIS模式&#…...

从零推导飞机小扰动运动线性方程——0. 学习目录

第0期文章——学习目录 如图&#xff0c;本专栏将连载以下学习内容&#xff0c;带你从零开始学习飞机小扰动方程&#xff01;...

Agentic AI 干货!DeepSeek + OpenAI SDK 构建 Agent 实战

引言&#xff1a; DeepSeek-R1、OpenAI-o1 等具备内化的假设、反思、验证等优秀推理能力的 LLM 大型推理模型将 AI 发展推进到智能体 AI 时代&#xff0c;将使 AI Agent 迸发出远超上一代由外化的手搓式简单推理 Agent 不可比拟的发展势能。 在 GTC2025 大会上&#xff0c;英伟…...

【语法】C++的list

目录 为什么会有list&#xff1f; 迭代器失效&#xff1a; list和vector的迭代器不同的地方&#xff1a; list的大部分用法和vector都很像&#xff0c;例如push_back&#xff0c;构造&#xff0c;析构&#xff0c;赋值重载这些就不再废话了&#xff0c;本篇主要讲的是和vecto…...

Java接口性能优化面试问题集锦:高频考点与深度解析

1. 如何定位接口性能瓶颈&#xff1f;常用哪些工具&#xff1f; 考察点&#xff1a;性能分析工具的使用与问题定位能力。 核心答案&#xff1a; 工具&#xff1a;Arthas&#xff08;在线诊断&#xff09;、JProfiler&#xff08;内存与CPU分析&#xff09;、VisualVM、Prometh…...

基于STM32与应变片的协作机械臂力反馈控制系统设计与实现---5.2 工业机械臂系统性能测试全方案(专业工程级)

5.2 工业机械臂系统性能测试全方案(专业工程级) 一、测试体系架构设计 1.1 三级测试体系 #mermaid-svg-A55VxjZ7ENKNWAli {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-A55VxjZ7ENKNWAli .error-icon{fill:#55…...

VM——相机拍照失败

1、问题&#xff1a;相机频闪触发&#xff0c;在MVS中正常出图&#xff0c;在VM中出现拍照失败 2、解决&#xff1a; 1、首先排查网络设置&#xff08;巨帧是否设置&#xff09; 2、电脑的所有防火墙是否关闭 3、在MVS中恢复相机的设置参数为默认参数&#xff0c;删除VM中的全…...

图解力扣回溯及剪枝问题的模板应用

文章目录 选哪个的问题17. 电话号码的字母组合题目描述解题代码图解复杂度 选不选的问题78. 子集题目描述解题代码图解复杂度 两相转化77. 组合题目描述解题代码法一&#xff1a;按选哪个的思路法二&#xff1a;按选不选的思路 图解选哪个&#xff1a;选不选 复杂度 选哪个的问…...

Trae + LangGPT 生成结构化 Prompt

Trae LangGPT 生成结构化 Prompt 0. 引言1. 安装 Trae2. 克隆 LangGPT3. Trae 和 LangGPT 联动4. 集成到 Dify 中 0. 引言 Github 上 LangGPT 这个项目&#xff0c;主要向我们介绍了写结构化Prompt的一些方法和示例&#xff0c;我们怎么直接使用这个项目&#xff0c;辅助我们…...

模糊测试究竟在干什么

目录 1.软件漏洞和缺陷 2.模糊测试与传统测试 3.汽车领域中的模糊测试 4.常见工具总结 1.软件漏洞和缺陷 提单、上票、拒收&#xff0c;这是开发和测试的日常博弈。大多数时候&#xff0c;我们是根据自己对需求的理解来进行开发和测试&#xff0c;这基本是属于功能层级。 …...

【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制

【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制 一&#xff0c;文档简介二&#xff0c;PWMTRGMUXPDBADC 2ch 软件配置与实现2.1 软硬件版本平台2.2 MCAL工程以及模块配置2.2.1 Dio 模块配置2.2.2 Adc模块配置2.2.3 Mcu模块配置2.2.4 Platform模块配置2.2.5 Port模块配置2.2.6…...

03--Deepseek服务器部署与cjson解析

一、ollama部署deepseek模型 1、Ollama 是一个开源的本地大语言模型运行框架&#xff0c;专为在本地机器上便捷部署和运行大型语言模型&#xff08;LLM&#xff09;而设计。 Ollama 教程&#xff1a;从 0 到 1 全面指南 教程【全文两万字保姆级详细讲解】 -CSDN博客 1.下载o…...

实现抗隐私泄漏的AI人工智能推理

目录 什么是私人AI? 什么是可信执行环境? TEE 如何在 AI 推理期间保护数据? 使用 TEE 是否存在风险? 有哪些风险? Atoma 如何应对这些风险 为什么去中心化网络是解决方案 人工智能推理过程中还有其他保护隐私的方法吗? 私人人工智能可以实现什么? 隐私驱动的应…...

Kotlin 学习--数组

一、关于数组的基础知识和常用方式 /*** kotlin 数组* 使用arrayOf创建数组&#xff0c;必须指定数组的元素&#xff0c;可以是任意类型* */val arrayNumber arrayOf(1, 2, 3, 4)/*** 集合中的元素可以是任意类型* kotlin 中的Any 等价于 java 中的Object 对象的意思* */val a…...

Spring Boot 启动后自动执行 Service 方法终极指南

**导语​​&#xff1a;**在 Spring Boot 开发中&#xff0c;我们经常需要在应用启动后立即执行初始化任务&#xff08;如加载配置、预热缓存、启动定时任务&#xff09;。本文将深度解析 ​​5 种主流实现方案​​&#xff0c;包含完整代码示例、执行顺序控制技巧和避坑指南&a…...

STM32 HAL库之GPIO示例代码

LED灯不断闪烁 GPIO初始化&#xff0c;main文件中的 MX_GPIO_Init(); 也就是在 gpio.c文件中 void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOE_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOA_C…...

中间件-消息队列

SpringAMQP 任何语言只要遵循AMAP协议&#xff0c;都可以与RabbitMQ交互 生产者、队列、交换机、消费者 生产者Publisher&#xff1a;生产消息&#xff0c;发给交换机 交换机Exchange&#xff1a;接收生产者发送的消息。知道如何处理消息&#xff0c;例如递交给某个特别队列、…...

go游戏后端开发32:自摸杠处理逻辑

当我们在自摸杠时&#xff0c;实际上在杠完之后&#xff0c;我们还需要进行一个删除操作。因此&#xff0c;我们需要在上面拷贝一个删除操作。由于这是自摸杠&#xff0c;所以这个地方需要删除四次。在这里&#xff0c;我们需要注意的是&#xff0c;自摸杠时&#xff0c;传过来…...

AI创业风向标:构建下一代「AI叙事创作平台」

随着技术的进步和市场需求的爆发,AI故事叙述平台正成为投资者和创业者关注的焦点。本文将探讨为何这一赛道值得关注,并提供一些关于如何构建成功的AI叙事创作平台的战略建议。 一、为什么这是2025年值得关注的赛道? 1. 底层需求的爆发 人类永恒的故事需求:全球每月有超过…...

拜特科技签约惠生工程,携手打造高效资金管理系统

近日&#xff0c;拜特科技成功签约惠生工程(中国)有限公司&#xff08;以下简称“惠生工程”&#xff09;资金管理系统项目。此次双方携手打造一套先进的资金管理系统&#xff0c;为惠生工程的战略发展注入强劲新动力&#xff0c;推动其资金管理迈向更高水平。 惠生工程作为行…...

快瞳宠物肢体关键点检测:让宠物设备更懂“猫言狗语”

在宠物经济高速发展的今天&#xff0c;智能设备已渗透到养宠生活的方方面面。然而&#xff0c;如何让设备真正理解宠物的行为意图&#xff1f;快瞳科技推出的宠物肢体关键点检测技术&#xff0c;通过精准捕捉宠物肢体动作&#xff0c;为智能喂食、健康监测、行为训练等场景提供…...

【安卓】APP生成器v1.0,生成属于你的专属应用

今天作者给大家分享一个超级好用的手机APP。还在为反复搜索常用网站抓狂&#xff1f;今天安利一款颠覆性神器——它能将你所有心头好的网页变成专属按钮&#xff0c;像搭乐高一样DIY你的「软件」&#xff0c;从此告别收藏夹混乱&#xff01;小说党、资讯控、摸鱼达人集体狂喜&a…...

详细解读react框架中的hooks

React Hooks 是 React 16.8 引入的一项革命性特性&#xff0c;它允许你在函数组件中使用状态(state)和其他 React 特性&#xff0c;而无需编写 class 组件。下面将详细解读 React Hooks 的核心概念、常用 Hooks 及其工作原理。 一、Hooks 的核心概念 1. 什么是 Hooks Hooks …...

机器学习01-支持向量机(SVM)(未完)

参考浙大 胡浩基老师 的课以及以下链接&#xff1a; https://blog.csdn.net/m0_74100344/article/details/139560508 https://blog.csdn.net/2301_78630677/article/details/132657023 https://blog.csdn.net/lsb2002/article/details/131338700 一、一些定义 T是倒置&…...

Java进阶版线程池(超详细 )

线程池 线程池工具类 Executors Executors 是 Java 提供的一个工具类&#xff0c;它包含了多个静态方法&#xff0c;能够方便地创建不同类型的线程池。 newFixedThreadPool 创建一个固定大小的线程池&#xff0c;线程池中的线程数量固定&#xff0c;当有新任务提…...

场外期权只适合上涨行情吗?

场外期权与直接进行期货市场操作相比&#xff0c;场外期权让我们有了更多的选择空间。”目前期权市场有了更多合适的风险管理模式&#xff0c;场外期权衍生品工具与其需求不谋而合&#xff0c;适合做以小博大&#xff0c;做各种对冲大盘下跌风险等等策略&#xff0c;下文为大家…...

echarts图表相关

echarts图表相关 echarts官网折线图实际开发场景一&#xff1a; echarts官网 echarts官网 折线图 实际开发场景一&#xff1a; 只有一条折线&#xff0c;一半实线&#xff0c;一半虚线。 option {tooltip: {trigger: "axis",formatter: (params: any) > {const …...

【操作系统(Linux)】——多线程对共享变量访问的同步与互斥

一、多线程对共享变量的非互斥访问 我们将要做的&#xff1a;构造多线程共享变量竞争的案例&#xff0c;并分析现象发生的原因&#xff0c;进而思考解决方式。 案例源代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <pthread.h> #inc…...

deeplabv3+街景图片语义分割,无需训练模型,看不懂也没有影响,直接使用,cityscapes数据集_16

目录 1、下载链接1.1、CSDN链接&#xff0c;含权重文件直接使用&#xff0c;建议直接下这个&#xff0c;还不限速。1.2 Github链接&#xff1a; 2、下载代码&#xff0c;下载预训练好的权重3、预测代码4、像素提取&#xff0c;或者说类别提取5、文档部分内容截图6、其他数据处理…...

[前端]从人体结构看网页三要素:HTML、CSS 与 JavaScript

目录 一、HTML:网页的 “骨架” 二、CSS:网页的 “血肉” 三、JavaScript:网页的 “神经系统” 四、三者协同构建精彩网页 在互联网的浩瀚海洋中,网页是我们与世界交互的重要窗口。一个精彩的网页背后,离不开 HTML、CSS 和 JavaScript 这三位 “幕后英雄”。有趣的是,…...

【Leetcode】3375. 使数组的值全部为 K 的最少操作次数

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个整数数组 nums 和一个整数 k 。 如果一个数组中所有 严格大于 h 的整数值都 相等 &#xff0c;那么我们称整数 h 是 合法的 。 比方说&#xff0c;如果 nums [10, 8, 10…...

封装uniapp request promise化

uniapp request 封装 一、 封装方法1. 使用 promis 封装 request2. 封装 api 在 api.js3.在要请求的页面 调用 api 一、 封装方法 1. 使用 promis 封装 request const BASE_URL 你的url接口 //比如 http://198.12.3.3/pzexport function request(config {}){let {url,dat…...

架构演进成熟度校验体系构建

架构演进成熟度校验体系构建 ——基于电商价格服务Checklist的图形化实践指南 一、成熟度校验全景视图 #mermaid-svg-tXchQ6nY7QzNUrL1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tXchQ6nY7QzNUrL1 .error-ico…...