适用于 Windows 10/11 的开发环境快速部署工具,通过 Windows 包管理器 (winget) 自动安装主流开发工具。
共 17 个工具(GUI 勾选项),菜单已按以下分组展示;除"一键安装全部"外,每个方向还有"全家桶"批量安装项。
| 工具 | winget Package ID | 备注 |
|---|---|---|
| Git | Git.Git |
版本控制,最新稳定版 |
| 7-Zip | 7zip.7zip |
解压工具 |
| Windows Terminal | Microsoft.WindowsTerminal |
现代终端 |
| PowerToys | Microsoft.PowerToys |
Windows 效率工具集 |
| Visual Studio Code | Microsoft.VisualStudioCode |
通用编辑器 |
| 工具 | winget Package ID | 备注 |
|---|---|---|
| Java JDK 21 LTS | EclipseAdoptium.Temurin.21.JDK |
自动配置 JAVA_HOME |
| Apache Maven | 官方源 dlcdn.apache.org |
自动配置 MAVEN_HOME(winget 无 Maven 包) |
| MySQL Community | Oracle.MySQL |
支持非 PATH 检测 (Program Files 回退) |
| Redis | Redis.Redis |
本地缓存(Redis on Windows 官方) |
| DBeaver Community | DBeaver.DBeaver.Community |
数据库图形化管理 |
| 工具 | winget Package ID | 备注 |
|---|---|---|
| Node.js LTS | OpenJS.NodeJS.LTS |
自动安装 npm |
| 工具 | winget Package ID | 备注 |
|---|---|---|
| Python 3.12 | Python.Python.3.12 |
自动安装 pip |
| Miniconda3 | Anaconda.Miniconda3 |
数据科学/环境管理 |
| 工具 | winget Package ID | 备注 |
|---|---|---|
| C/C++ (GCC/G++) | MSYS2.MSYS2 |
MSYS2 + pacman 装 MinGW-w64 编译链(winget 无 niXman.mingw-w64 包) |
| CMake | Kitware.CMake |
构建工具(随 C/C++ 一起装) |
| 工具 | winget Package ID | 备注 |
|---|---|---|
| Android Studio + SDK 34+ | Google.AndroidStudio |
国内镜像下载 SDK 组件 |
| 工具 | winget Package ID | 备注 |
|---|---|---|
| Docker Desktop | Docker.DockerDesktop |
需要系统重启 |
| kubectl | Kubernetes.kubectl |
Kubernetes CLI |
| 目标 | 一键选择 |
|---|---|
| 新机基础环境 | 菜单 1 一键全部(或基础必备组) |
| Java 后端开发 | 菜单 12 ☕ Java 后端全家桶 |
| 前端 / Web 开发 | 菜单 14 🖥️ 前端全家桶 |
| Python / 数据科学 | 菜单 17 🐍 Python 全家桶 |
| C/C++ / 底层开发 | 菜单 18 |
| Android 开发 | 菜单 19 |
| 容器 / Kubernetes | 菜单 22 🐳 容器/运维全家桶 |
| 只查环境状态 | 菜单 23 📋 环境摘要 |
- 🚀 一键安装全部 — 菜单选项
[1],17 个工具全自动部署 (国内网络下 Android SDK 走腾讯云镜像) - 🎯 选择性安装 — 菜单选项
[2]~[22],单独安装某个工具或按方向全家桶 - 🧩 按方向全家桶 — 菜单选项
[12]/[14]/[17]/[22],按开发方向批量安装(Java 后端/前端/Python/容器运维) - 🔄 智能版本检测 — 已安装工具显示当前版本,Y=升级覆盖 / N=跳过保留
- 📋 环境摘要 — 菜单选项
[23],检测 23 项组件安装状态 - 🔀 版本切换 — 菜单
[24]切换 Java 版本 (JAVA_HOME)、[25]切换 Python 版本 (PATH) - 📍 安装位置 / 目录设置 — 菜单
[26]查看已装工具安装位置、[27]设置 Maven/Android SDK 安装目录 - 🗑️ 卸载 — 菜单
[28]卸载已安装工具
- 零命令注入 — 全脚本使用 ScriptBlock
{}+&调用操作符,无Invoke-Expression - 零参数注入 — 所有
winget install --id的 PackageId 为硬编码常量,不接受外部输入 - 零路径遍历 — 日志路径由
Get-Date格式化生成,用户输入不参与路径拼接 - 安全重启 —
Invoke-Reboot移除-Force并增加二次确认提示,防止数据丢失 - 输入校验 — 所有 Read-Host 输入仅做布尔匹配
-match '^[Yy]$'或精确menu.Contains()匹配 - 死代码清理 — 移除未使用的
Test-InternetConnection函数
- JAVA_HOME 通配检测 — 移除硬编码补丁版本号
jdk-21.0.0.35-hotspot,统一使用jdk-21*通配 - MAVEN_HOME 回退推导 — 若安装目录扫描失败,自动从
Get-Command mvn的路径反推MAVEN_HOME - winget 下载完整性校验 — 验证下载文件存在且 > 1MB,防止损坏文件通过
Add-AppxPackage安装 - 网络超时防护 — GitHub API 请求和文件下载均设置合理超时 (15s / 120s)
- 一键安装容错 — 任意工具失败不中断后续安装,
foreach+try/catch独立执行 - MySQL 多路径检测 — 除 PATH 外支持
Program Files\MySQL\MySQL Server *\bin回退探测 - MSYS2 编译器自举 — MSYS2 安装后自动调用
pacman -S mingw-w64-ucrt64-gcc安装编译链 - 日志自动清理 —
Save-Log前自动清除旧日志,仅保留最近 10 个logs/install_log_*.txt completedSteps语义注释 — 明确该变量计数"已就绪项"非"新安装数"- 退出菜单 emoji 修正 —
❌ 退出→👋 退出
- switch 冗余消除 — 11 个重复分支改为
$menu字典 +Invoke-Installer统一入口 - 按任意键重复消除 — 重复代码提取为
Wait-Key函数 (1 行调用) - Show-Summary 循环驱动 — 14 次重复检测改为
foreach遍历$tools数组 - Update-Path 集中管理 — PATH 刷新统一在
Invoke-Installer内部调用 - 总行数: 677 → ~603 (减约 11%)
- 🎨 彩色终端输出,每步带时间戳
- 🔧 自动刷新
PATH环境变量 - 📄 安装日志自动保存 (
logs/install_log_YYYYMMDD_HHmmss.txt) - 🔌 管理员权限智能检测 (可非管理员运行,但会给出警告)
- 🌐 网络故障自动诊断 (区分 winget 源不可达 / 包未找到 / 安装失败)
- ⚙️ winget 自动安装 — 检测到缺失时自动从 GitHub Release 下载安装,失败则回退打开下载页
- 从 v1.x(命令行)升级为 v2.0(图形界面为主):新增 WinForms GUI(
启动图形界面.bat双击即开),控制台版保留 - v2.1 演进:安装/卸载改后台 job 执行(窗口不卡死,日志实时刷新,完成后弹结果框);修复卸载失效(Invoke-GuiAction 嵌套导致内层空跑);移除无用进度条
- 打包分发:
build.ps1打包单文件 exe(ps2exe + 自签名 + SHA256),防拦截策略见打包章节 - 修复 bat 启动器编码问题(改为 ASCII 提示,避免 UTF-8 无 BOM 被 cmd 按 GBK 解析产生乱码)
- 入口选择:
启动图形界面.bat(GUI) /启动配置工具.bat(控制台)
启动图形界面.bat双击即开 GUI(或powershell -File devkit_gui.ps1)- 左侧:17 个工具按开发方向分组勾选(含 ☑️ 全选/全不选);右侧:实时日志框 + 底部按钮区
- 按钮:⬇ 安装所选(批量安装)、📍 查看安装位置、🗑️ 卸载所选(勾选→确认→
winget uninstall,Maven 特例清环境变量)、🔀 切换 JDK / 切换 Python(InputBox 选版本,复用环境管理函数)、☑️ 全选/全不选 - 安装/卸载在后台 job(独立 powershell 子进程)执行,窗口全程不卡:日志由覆盖版
Write-Host写入文件、Timer 每 500ms 刷新日志框;完成后弹结果提示框并恢复按钮 - GUI 自动模式:已装工具不重复安装;版本选择弹 ComboBox 对话框(Java/Python/Node 安装时可选,取消用推荐版)
- 可打包成单文件 exe:
.\build.ps1(ps2exe + 自签名)→DevEnvKit.exe
- 菜单 [26] 查看已装工具安装位置:探测并列出全部工具的安装路径(
Get-Command来源 + 已知路径回退 + 环境变量),纯只读 - 菜单 [27] 安装目录设置:可自定义 Maven 安装目录(存
devkit.conf配置文件);winget 安装的工具(JDK/Python/Node 等)位置由安装器决定,不可自定义——如实说明
- 菜单 [28] 卸载:列出 16 个可卸载工具 → 选择 → 确认(Y/N)→
winget uninstall卸载 - Maven / Android 特例:卸载后清理环境变量(MAVEN_HOME / ANDROID_HOME / PATH 残留条目)
- 卸载前必须二次确认,避免误删
- 工具根目录生成
devkit.conf(key=value),启动时自动加载(Load-Config),Maven 目录等自定义项持久化
- 新增菜单项 [24] 切换 Java 版本 (JAVA_HOME):列出已装 Temurin JDK → 选择 → 一键切换默认
- 新增菜单项 [25] 切换 Python 版本 (PATH):列出已装 Python(用户级/系统级)→ 选择 → 更新 PATH(pyenv 思路)
Set-JavaEnv:PATH 用%JAVA_HOME%\bin变量引用(切换只改 JAVA_HOME 一处),并自动清理 PATH 中旧 JDK 的绝对路径(避免老版本抢先生效)JAVA_HOME不再"只在未设置时写"——安装/切换都会更新- Node.js 说明:winget 装 Node 到同一目录是覆盖安装(无法共存),多版本请用
fnm或nvm-windows——脚本不内置 Node 切换
Add-ToPath统一 PATH 追加:去重(幂等)+ 2047 字符长度保护(超限不追加并提示,避免截断导致系统命令失灵)Remove-FromPath按正则清理旧条目(旧 JDK 路径)- 全部 PATH 写入收敛到统一入口(MinGW / Maven / Android platform-tools)
- 双作用域处理:
-AllScopes同时清理 Machine + User PATH——实测发现 winget 用户级工具(如 Python 装到AppData\Local\Programs\Python)在 User PATH,单清 Machine 会切换失败,Java/Python 切换均已双 scope
Download-WithProgress支持 SHA256/SHA512 Checksum 校验(传-ExpectedHash即校验,不匹配自动重试)- Maven 下载接入官方 .sha512 校验(拿不到则跳过,不阻塞)
- 脚本开头显示系统架构(arm64/x64/x86)并提示杀毒软件拦截风险(360/Defender)
- 安装 JDK 后清理
HKLM\SOFTWARE\JavaSoft旧残留(Eclipse 等 IDE 读注册表,保证"干净安装")
- 安装 JDK 时可选择 JDK 8 / 11 / 17 / 21 (LTS),Python 可选 3.11 / 3.12 / 3.13,Node.js 可选 20 / 22 (LTS)
- 命令行版:安装前弹出交互版本菜单,直接回车用推荐版本(第 1 项)
- 动态探测:菜单末尾的「其他版本」会实时调用
winget search列出该产品线当前全部可用版本——未来新版本(JDK 24/25、Python 3.14 等)发布后零改动自动支持,老版本(如 JDK 8 之前的更老版本不在 winget 内)也都能选 - GUI 版:勾选 Java/Python/Node 点击安装时,弹出版本选择框(ComboBox),选完再装;点「跳过此工具」则不安装
JAVA_HOME自动指向最新已装 JDK- 版本边界:支持 JDK 8+(Adoptium/Temurin 产品线下限就是 JDK 8);JDK 5-7 需 Oracle 归档(需 Oracle 账号 + 许可),脚本不提供
- 所有 winget PackageId 已用
winget show实测确认存在(修正了 Redis/DBeaver/MinGW 的错误 id) - 安装失败时按退出码给出可行动提示:已安装 / 需提权 / 源不可达 / 包不存在等
- 失败后提示重试命令
winget install --id <PackageId>或官网手动下载
- 自定义流式下载:实时进度显示 已下载 / 共 XX MB (xx%) 与 下载速度
- 大小自动换单位(B → KB → MB → GB),不刷屏(PowerShell 原生进度条)
- 已应用到:Android SDK 镜像下载、Maven 官方源下载、winget 自动安装
- 停滞检测:下载 15 秒无数据判定卡死,自动中断(避免无限挂起)
- 自动重试:下载失败自动重试 2 次(间隔 3 秒)
- 断点续传:失败保留半成品,下次运行自动从断点继续(HTTP Range;服务器支持 206 续写、不支持自动退化全量重下——腾讯云/阿里云/Apache 官方源均已实测支持)
- 代理感知:自动读取
HTTPS_PROXY/HTTP_PROXY/ALL_PROXY环境变量走代理(未设置则用 Windows 系统代理) - 多镜像回退:
- Android SDK:腾讯云镜像
mirrors.cloud.tencent.com(国内直连) - Maven:Apache 官方源
dlcdn.apache.org→ 阿里云镜像mirrors.aliyun.com自动回退 - winget 安装包:GitHub Release 失败时打开下载页面人工处理
- Android SDK:腾讯云镜像
- 慢速网络下总超时放宽到 10 分钟,靠停滞检测而非固定超时兜底
- 用 AST 从脚本提取函数(不跑主流程)在 PowerShell 5.1 下实测下载,发现并修复 3 个静态审查发现不了的运行时 bug:
System.Net.Http程序集 5.1 不自动加载 →Add-Type显式加载RangeHeaderValue.From是 .NET Core API,5.1 的 .NET Framework 没有 → 改用构造器- PowerShell 方法返回值默认输出到管道,
EnsureSuccessStatusCode()污染函数返回 →$null =
- 实测确认:完整下载 ✅、断点续传(4MB 半成品 → 续传后完整文件 9395475 字节分毫不差)✅、代理感知 ✅
- 教训:bat 启动器默认 powershell.exe (PS 5.1),与 pwsh 7 行为不同,跨版本 API 必须实测
- 打包:
.\build.ps1(需 ps2exe 模块;加-InstallPs2Exe自动安装)→ 生成DevEnvKit.exe(含自签名签名 + SHA256 校验输出) - 为什么会被拦:ps2exe 打包的 exe 无有效代码签名 + 新文件流行度低 → Defender SmartScreen / 360 等会提示
- 处理方法:
- Defender:点「更多信息」→「仍要运行」
- 误报申诉:微软 WDSI(https://www.microsoft.com/en-us/wdsi/filesubmission)、360 安全卫士误报申诉、火绒安全中心
- 攒信誉:发布到 GitHub Releases,下载量上升后 SmartScreen 自动放行
- 零拦截方案:直接用
devkit_gui.ps1(源码运行,无需 exe)——简历项目本来就要展示源码
- 注意:故意不加壳 / 不加密(ps2exe 的
-encrypt、UPX 等混淆反而增加启发式误报) - 已知坑(已修复):ps2exe 打包后
$PSScriptRoot为空字符串,会报Path 参数为空——devkit_gui.ps1已用Get-ScriptDir(ps1 用$PSScriptRoot,exe 用GetCommandLineArgs()[0])兼容两种运行方式 - 已知坑(已修复):ps2exe
-noConsole下Write-Host没有控制台可写,会逐条弹 MessageBox——已覆盖Write-Host为"写入日志文件"版本(日志框由 Timer 读取刷新),不再用 Start-Transcript - 已知坑(已修复):bat 自动提权(
net session检测 +Start-Process -Verb RunAs)会导致黑窗一闪即退——回退为普通启动 + 提示"右键以管理员身份运行";GUI 内卸载/切换前检测管理员并弹友好提示 - 已知坑(已修复):
.gitignore曾为 UTF-16 编码(Add-Content -Encoding Unicode写入),git 只认 UTF-8/ASCII → ignore 规则从未生效;已转 UTF-8
- 新增 7 个工具:7-Zip / Windows Terminal / PowerToys / Redis / Miniconda / kubectl / DBeaver
- 菜单按 7 个开发方向分组展示(基础必备 / Java 后端 / 前端 / Python / C-C++ / 移动 / 容器运维),见顶部工具表
- 新增 4 个"全家桶"一键安装:Java 后端(12)、前端(14)、Python(17)、容器运维(22)——复用现有 Install-* 函数,
$funcs.Count动态计数
- 通过 winget
Google.AndroidStudio安装 Android Studio - 国内网络适配:
- SDK 组件直接从
mirrors.cloud.tencent.com腾讯云镜像下载 - 无需 VPN / 梯子即可自动获取 platform-tools、build-tools 34.0.0、platform android-34
- 自动配置
ANDROID_HOME/ANDROID_SDK_ROOT环境变量 - 自动追加
platform-tools(含 adb)到系统 PATH
- SDK 组件直接从
- 安装方式: 从
repository2-1.xml实时解析最新组件版本号,按序下载 - Android Studio 自动安装失败时提供 3 种手动方案(中国站 / 热点 / 其他电脑拷贝)
- Install-CPP
completedSteps双倍计数修复: 一键安装时 C/C++ 项只计 1 次 chcp命令缺失修复: 批处理 stderr 屏蔽,chcp不可用时不再显示错误
- 从 Apache 官方源
dlcdn.apache.org自动获取最新 3.x 版本并下载 zip(winget 无 Maven 包,已实测) - 自动检测
mvn命令并显示版本 - 自动搜索安装目录并配置
MAVEN_HOME环境变量
- 脚本启动时自动检测
winget命令是否可用 - 如未检测到,自动调用 GitHub API 获取最新
microsoft/winget-cliRelease - 下载
.msixbundle安装包并通过Add-AppxPackage安装 - 安装后刷新 PATH 并验证可用性
- 若 GitHub API 超时或网络不可达,回退打开
https://aka.ms/getwinget下载页面
- 通过
Oracle.MySQLwinget 包安装 - 支持多路径检测: PATH →
Program Files\MySQL→Program Files (x86)\MySQL - 安装后提供首次使用初始化指引:
- 打开 MySQL Installer 或命令行
- 运行
mysqld --initialize --console生成随机 root 密码 - 运行
mysql_secure_installation修改密码 + 安全加固
- P0-1: 菜单
ContainsKey()→Contains()(PSCustomObject 方法名修正) - P0-2: Maven 无 winget 包 → 改为 Apache 官方源
dlcdn.apache.org下载 - P0-3: MinGW PackageId
niXman.mingw-w64(winget 实测不存在)→ 统一用MSYS2.MSYS2+ pacman - P0-4: MSYS2 安装后追加
pacman -S mingw-w64-ucrt64-gcc编译链 - P0-5: MySQL 检测从仅 PATH 扩展为多路径回退
- P1: 摘要显示
已处理 n/9 项(含分母) + MySQL 版本正则提取 + 菜单列对齐 - P2: 网络超时 (15s/120s) + 一键安装 foreach try/catch 容错
dev_env_setup/
├── 启动配置工具.bat # 主启动器 (双击即可, 推荐)
├── setup_dev_env.ps1 # PowerShell 主脚本 (v2.1, ~1660 行)
├── validate.ps1 # 静态审查脚本 (81 项检查)
├── logs/ # 安装日志存放目录 (每次运行自动生成 *.txt)
├── LICENSE # MIT 许可证
└── README.md # 本说明文件
- 双击
启动配置工具.bat(建议右键 → 以管理员身份运行) - 在菜单界面选择操作:
── 🧩 基础必备 ──
[1] 🚀 一键安装全部 (推荐)
[2] 🔧 Git [3] 🗜️ 7-Zip
[4] 🪟 Windows Terminal [5] ⚡ PowerToys
[6] 📝 VS Code
── ☕ Java 后端 ──
[7] ☕ Java (JDK) [8] 🏗️ Maven
[9] 🗄️ MySQL [10] 🔴 Redis
[11] 🗄️ DBeaver [12] ☕ Java 后端全家桶
[24] 🔀 切换 Java 版本 (JAVA_HOME)
── 🖥️ 前端 / Web ──
[13] 🟢 Node.js [14] 🖥️ 前端全家桶
── 🐍 Python ──
[15] 🐍 Python [16] 🐍 Miniconda
[17] 🐍 Python 全家桶
[25] 🔀 切换 Python 版本 (PATH)
── ⚙️ C/C++ ──
[18] ⚙️ C/C++ (MinGW + CMake)
── 🤖 移动开发 ──
[19] 🤖 Android Studio + SDK 34+
── 🐳 容器 / 运维 ──
[20] 🐳 Docker [21] ☸️ kubectl
[22] 🐳 容器/运维全家桶
── 📋 系统 ──
[23] 📋 查看当前环境摘要
[26] 📍 查看已装工具安装位置
[27] 📍 安装目录设置 (Maven/Android SDK)
[28] 🗑️ 卸载已安装工具
[0] 👋 退出
# 以管理员身份打开 PowerShell,cd 到脚本目录后执行:
Set-ExecutionPolicy Bypass -Scope Process -Force
.\setup_dev_env.ps1[1] 一键安装全部 的完整流程:
1. Git → 检测 → 确认 → winget 安装
2. 7-Zip → 检测 → 确认 → winget 安装
3. Python → 版本选择(3.11/3.12/3.13) → 检测 → 确认 → 安装 → 验证 pip
4. Java JDK → 版本选择(8/11/17/21) → 检测 → 确认 → 安装 → 配置 JAVA_HOME
5. C/C++ 工具 → 检测编译器(GCC/Clang/MSVC) → 确认 → MSYS2 + pacman 装 MinGW → 装 CMake
6. Node.js → 版本选择(20/22 LTS) → 检测 → 确认 → 安装 → 验证 npm
7. Maven → 检测 → 确认 → Apache 官方源下载(阿里云镜像回退) → 配置 MAVEN_HOME
8. MySQL → 检测 → 确认 → winget 安装 → 初始化指引
9. Redis → 检测 → 确认 → winget 安装
10. DBeaver → 检测 → 确认 → winget 安装
11. Docker → 检测 → 确认 → winget 安装
12. kubectl → 检测 → 确认 → winget 安装
13. Miniconda → 检测 → 确认 → winget 安装
14. VS Code → 检测 → 确认 → winget 安装
15. Windows Terminal→ 检测 → 确认 → winget 安装
16. PowerToys → 检测 → 确认 → winget 安装
17. Android → 检测 → 确认 → 装 Android Studio → 腾讯云镜像下载 SDK 组件 → 配置 ANDROID_HOME + PATH
每个步骤都会:
- 检查该工具是否已安装
- 如已安装则展示当前版本,询问是否重新安装/升级 (Y/N)
- 如未安装则安装——winget 安装 / Maven 官方源 / Android 腾讯云镜像(下载全程带进度条 + 停滞检测 + 自动重试 + 断点续传 + 代理感知)
- Java / Python / Node.js 安装前先选择版本(回车用推荐)
- 安装后统一刷新
PATH(Update-Path),并同步实时日志
安装完成后:
- 展示 23 项环境检测摘要 (Git/Python/pip/Java/javac/Maven/GCC/G++/Node.js/npm/Docker/MySQL/CMake/VS Code/Android Studio/Android SDK/7-Zip/WinTerminal/PowerToys/Redis/Miniconda/kubectl/DBeaver)
- 询问是否立即重启 (Docker Desktop 需要重启生效,会先提示保存工作)
脚本按以下优先级检测已有编译器:
| 优先级 | 检测方式 | 说明 |
|---|---|---|
| 1 | gcc --version + g++ --version |
检测 MinGW/GCC |
| 2 | clang --version |
检测 Clang/LLVM |
| 3 | vswhere.exe + 安装目录扫描 |
检测 Visual Studio MSVC (cl.exe 不在系统 PATH 中) |
若三种编译器均已存在,脚本会提示跳过。若均不存在,则自动安装 MinGW-w64(MSYS2.MSYS2 + pacman 安装 mingw-w64-ucrt64-gcc 编译链)。
| 错误类型 | 现象 | 原因 |
|---|---|---|
| 网络不可达 | InternetOpenUrl() failed. 0x80072efd |
机器无法访问外网,winget 无法下载 |
| 包未找到 | No package found matching input criteria |
winget 源中不存在该包 ID |
| Android 组件下载失败 | 远程服务器返回错误: (404) |
镜像站命令字不匹配,脚本会自动从 XML 解析最新文件名 |
为解决国内网络环境无法访问 Google 服务器的问题,Android SDK 组件采用直接从腾讯云镜像下载的方式:
① 从 mirrors.cloud.tencent.com/AndroidSDK/repository2-1.xml 实时解析最新文件名
↓
② platform-tools_rXX-win.zip → extract → %LOCALAPPDATA%\Android\Sdk\platform-tools\
③ build-tools_r34-windows.zip → extract → %LOCALAPPDATA%\Android\Sdk\build-tools\34.0.0\
④ platform-34-extXX_r01.zip → extract → %LOCALAPPDATA%\Android\Sdk\platforms\android-34\
↓
⑤ ANDROID_HOME / ANDROID_SDK_ROOT / PATH 自动配置
此方案无需 cmdline-tools 和 sdkmanager,无需 VPN 或梯子。
Android Studio 本身(Google 专有软件)无法通过镜像自动安装,脚本会打印清晰的手动指引。
| 要求 | 说明 |
|---|---|
| 操作系统 | Windows 10 1809+ 或 Windows 11 |
| winget | 系统自带 (Win10 1809+). 若缺失,脚本会自动从 GitHub Release 下载安装 |
| 权限 | 推荐以管理员权限运行 |
| 网络 | 需要网络连接 (用于 winget 下载安装包) |
- Docker Desktop 安装后需要重启系统才能完全生效
- MySQL 安装后需手动执行
mysqld --initialize和mysql_secure_installation完成初始化 - Android Studio 在国内网络下可能无法自动下载,脚本会自动安装 SDK 组件并给出手动下载方案
- 部分工具 (如 MinGW-w64、Maven) 安装后,在新终端中才会加载最新的 PATH
- 非管理员权限运行时,部分安装可能因 UAC 失败
- 安装日志默认保存在
logs/子目录下 (logs/install_log_YYYYMMDD_HHmmss.txt) - 如遇 winget 源问题,可先执行
winget source update更新源 - 脚本启动时会自动检测 winget 是否可用,不可用时从 GitHub Release 自动下载安装
v1.3 起持续用 validate.ps1 做静态审查(当前 81 项检查:结构 5 + 关键模式 35 + 安全 5 + 工具覆盖 23 + 冗余 13),审计维度:
| 攻击面 | 检查点 | 结果 |
|---|---|---|
| 命令注入 | 16 处 & ScriptBlock 调用 |
✅ 安全 |
| 参数注入 | 11 处 winget install --id |
✅ 全部硬编码 |
| 路径遍历 | 日志/文件路径操作 | ✅ 不可控 |
| 代码注入 | 全脚本 | ✅ 零 Invoke-Expression |
| 死代码 | 全脚本 | ✅ 零死代码 (v1.3) |
| 用户输入 | 13 处 Read-Host | ✅ 正则 + menu.Contains() |
| 网络超时 | GitHub API + 下载 | ✅ 15s / 120s |
| 安装容错 | Install-All foreach | ✅ try/catch 不中断 |
结论: 0 个高危漏洞,0 个中危漏洞,可安全使用.
本项目基于 MIT License