### 5.0版本更新优化内容：

1. **动态传入部署路径**：
   - 不再强制将程序部署到固定目录/www/wwwroot/目录了

2. **优化改进MySQL root密码操作**：
   - 不再通过bt命令强制修改密码
   - 采用mysql数据库命令操作
   - 现可以选择跳过此步骤（需要提前创建数据库并导入的情况下)
   
3. **实用工具选项更新内容**：
   - 集成缓存目录清理功能(pk.sh为单独的脚本版)
   - 普通加固用户交互式版(代替了程序后台普通加固功能，支持自定义签名)
   - 超级混淆360加固功能（增加了各种乱码文件，保护重要资源文件不轻易被别人找到）
   - 注入弹窗式注册机功能(为APK增加注册机弹窗限制)
   - APK签名破解工具功能(支持批量处理apk文件)

4. **修复自动配置IP地址操作**：
   - 新增了更稳定的IP地址获取接口
   - 完善了替换逻辑

### 4.0版本更新优化内容：

1. **模块化函数设计**：
   - 将相关功能合并为管理函数，如`manage_database`、`manage_java`、`manage_filesystem`等
   - 每个管理函数通过参数区分具体操作，提高代码复用率

2. **统一的颜色定义**：
   - 在全局定义区集中管理所有颜色变量
   - 使用更具描述性的变量名（如`COLOR_SUCCESS`替代`GREEN`）

3. **路径和配置集中管理**：
   - 所有路径、数据库配置、服务参数都在全局定义区统一管理
   - 方便后续维护和修改

4. **功能合并优化**：
   - 将原脚本中分散的相关功能合并到统一的管理函数中
   - 如数据库密码修改和数据库配置合并到`manage_database`函数

5. **日志记录增强**：
   - 保持原有的日志记录功能
   - 在关键操作步骤增加更多日志记录点

6. **状态检查优化**：
   - 使用`manage_application status`统一检查应用状态
   - 提供更详细的状态信息

7. **保持原有功能**：
   - 完全保留原脚本的所有功能
   - 包括APK工具、清理功能、更新日志等

8. **用户交互改进**：
   - 保持原有的用户提示和交互方式
   - 优化颜色使用，提高可读性

9. **错误处理增强**：
   - 在关键操作步骤增加更多错误检查
   - 提供更友好的错误提示

### 3.0版本更新优化内容：

1. **首次部署检测机制**：
   - 添加了部署标记文件 `/root/.xali_deployed`
   - 实现了 `is_first_deployment()` 函数检测是否首次部署
   - 添加了 `mark_deployment_complete()` 函数标记部署完成

2. **关键步骤强制执行**：
   - **MySQL密码修改**：首次部署时强制要求修改，不可跳过
   - **服务器配置**：首次部署时强制要求配置，不可跳过
   - 添加了明确的提示信息：`首次部署必须修改MySQL root密码，不可跳过`

3. **部署状态显示**：
   - 在主菜单显示当前部署状态（首次部署/已部署）
   - 在部署开始时显示部署状态提示
   - 部署完成后自动标记为已部署状态

4. **用户界面优化**：
   - 添加了更明确的首次部署警告信息
   - 在主菜单中清晰显示当前部署状态
   - 将版本号从 2.9 更新为 3.0
   - 更新了优化日期为 2025.07.10

5. **跳过逻辑优化**：
   - 仅在非首次部署时显示跳过选项
   - 保留原有的跳过功能，但只在非首次部署时可用
   - 重置跳过标志的位置更合理
   
6. **密码修改与数据库配置的联动**
   - 添加了全局变量 `SKIP_DB_SETUP`
   - 当用户跳过密码修改时，设置 `SKIP_DB_SETUP=1`
   - 在数据库配置步骤中，检查该变量，如果为1则跳过数据库配置

7. **服务器配置的跳过选项**
   - 添加了全局变量 `SKIP_SERVER_SETUP`
   - 在服务器配置步骤中，询问用户是否跳过自动配置
   - 如果用户选择跳过，则设置 `SKIP_SERVER_SETUP=1`

8. **相关步骤的智能跳过**
   - 防火墙配置：如果跳过服务器配置，则跳过防火墙配置
   - 访问验证：如果跳过服务器配置，则跳过访问验证
   - 结果显示：如果跳过服务器配置，则显示相应的提示信息

9. **部署流程优化**
   - 在主部署流程开始时重置跳过标志
   - 在数据库配置步骤中添加明确的跳过提示
   - 在结果显示中为跳过配置的情况提供特别提示
   

### 2.9版本主要更新优化内容：

1. **添加了清理目录配置数组**：
   ```bash
   # 需要清理的目录数组
   CLEAN_DIRS=(
       "${TARGET_DIR}/storage/1/apk"          # 清理APK打包目录
       "${TARGET_DIR}/storage/1/ios"          # 清理ios封装目录
       "${TARGET_DIR}/storage/1/mixed"        # 清理网站封装目录
       "${TARGET_DIR}/storage/1/certificate"  # 清理签名文件目录
   )
   ```

2. **实现了清理缓存目录函数**：
   ```bash
   # 清理缓存目录
   clean_directories() {
       # 函数实现...
   }
   ```

3. **在主菜单中添加了清理选项**：
   ```bash
   echo -e "${CYAN}6) 清理缓存目录${NC}"
   echo -e "${PURPLE}7) 退出脚本${NC}"
   
   # ...
   6) clean_directories ;;
   ```

4. **优化了清理功能输出**：
   - 使用颜色编码增强可读性
   - 显示每个目录的清理前后大小对比
   - 显示剩余文件数量
   - 增加安全防护，防止误删根目录
   
5. **版本更新**
   - 将版本号从 2.8 更新为 2.9
   - 更新了优化日期为 2025.07.9

### 清理功能特点：

1. **安全防护**：
   - 检查目录是否为空
   - 防止误删根目录（`/`）

2. **详细输出**：
   - 显示每个目录的清理进度
   - 显示清理前后空间变化
   - 显示剩余文件数量

3. **可配置性**：
   - 保留天数通过 `KEEP_DAYS` 变量设置（默认为3天）
   - 清理目录通过数组配置，便于扩展

4. **与主菜单集成**：
   - 清理完成后自动返回主菜单
   - 使用统一颜色主题，保持界面一致性


### 2.8版本更新修复内容：

1. **步骤顺序优化**：
   - 将修改密码放在第一步（需要用户输入）
   - 数据库配置紧接在密码修改后
   - 文件操作放在服务启动前
   - 服务启动后立即配置防火墙
   
2. 在 `change_mysql_password` 函数中：
   - 添加了跳过选项提示：`是否要跳过修改MySQL root密码？[y/N]`
   - 如果用户输入 Y/y，则跳过密码修改步骤
   - 设置10秒超时等待（避免部署过程卡住）

3. 在 `setup_database` 函数中：
   - 添加了数据库存在性检查：`SHOW DATABASES LIKE 'apkdpb'`
   - 如果检测到数据库已存在，则跳过数据库配置步骤
   - 使用绿色提示：`✅ 检测到数据库 'apkdpb' 已存在，跳过数据库配置`

4. **修复颜色显示问题**：
   - 修改前
    read -sp "${PURPLE}请输入新的MySQL root密码: ${NC}" new_password
   - 修改后
    echo -ne "${PURPLE}请输入新的MySQL root密码: ${NC}"
    read -s new_password
    echo ""
    使用 `echo -ne` 确保颜色代码正确显示

5. **增强MySQL服务检查**：
   - 使用 `127.0.0.1` 代替 `localhost` 避免连接问题
   - 增加等待时间到30秒（15次检查 * 2秒）
   - 添加错误日志查看建议

6. **模拟人工修改密码**：
   
    bt <<EOF
7
$new_password
$new_password
EOF

  

7. **错误处理增强**：
   - 添加更详细的错误诊断信息
   - 在关键步骤增加退出状态检查
   - 提供手动故障排除建议

8. **版本更新**
   - 将版本号从 2.7 更新为 2.8
   - 更新了优化日期为 2025.07.8

### 优化后的部署流程：

1. **步骤1/10**：修改MySQL root密码（用户输入）
2. **步骤2/10**：安装JDK环境
3. **步骤3/10**：配置数据库（创建用户、数据库、导入SQL）
4. **步骤4/10**：设置目录权限
5. **步骤5/10**：验证配置文件
6. **步骤6/10**：复制所需文件目录
7. **步骤7/10**：配置服务器设置（IP和端口）
8. **步骤8/10**：启动应用程序并等待初始化
9. **步骤9/10**：配置防火墙
10. **步骤10/10**：验证网站访问


### 2.7版本更新修复内容：

1. **用户名空格问题**：
   - 修复了宝塔密码修改命令导致的用户名后空格问题
   - 添加了手动权限刷新

2. **服务启动可靠性**：
   - 增加了更长的等待时间（30秒）
   - 添加了更详细的状态检查
   - 添加了手动服务重启

3. **连接参数优化**：
   - 在 PHP 脚本中使用 `127.0.0.1` 避免 socket 连接问题
   - 确保在 shell 脚本中也使用 IP 地址

4. **错误诊断增强**：
   - 添加了详细的 MySQL 错误日志查看指令
   - 提供手动故障排除建议

5. **新增函数：`change_mysql_password`**
   - 使用宝塔命令 `bt` 选项 7 强制修改 MySQL root 密码
   - 要求用户输入新密码并确认
   - 自动更新 PHP 配置文件中的密码

6. **新增函数：`update_php_password`**
   - 使用 `sed` 命令替换 PHP 脚本中的密码定义
   - 检查更新是否成功
   - 更新脚本中的密码变量

7. **更新主菜单**
   - 添加选项 5：强制修改 MySQL root 密码
   - 重新编号选项 6 为退出脚本

8. **初始化变量**
   - 添加 `DB_ROOT_PASS="alidpb"` 作为默认密码
   - 添加 `PHP_SCRIPT="${TARGET_DIR}/xali.php"` 定义

5. **版本更新**
   - 将版本号从 2.6 更新为 2.7
   - 更新了优化日期为 2025.07.7
   
### 特别说明：

1. **修改 MySQL root 密码**：
   - 在菜单中选择选项 5
   - 输入新密码并确认
   - 脚本会自动更新 PHP 配置文件中的密码

2. **部署流程**：
   - 部署时会使用最新的密码配置
   - 如果密码已修改，部署时会使用新密码连接数据库

3. **宝塔命令要求**：
   - 系统必须安装宝塔面板
   - `bt` 命令必须可用

4. **PHP 文件要求**：
   - PHP 文件中必须包含类似 `define('DB_ROOT_PASS', '密码');` 的定义
   - 脚本会自动查找并替换这行代码

5. **安全考虑**：
   - 密码输入时不会显示在屏幕上
   - 密码在脚本中以变量形式存储，但不会持久保存
   
   
### 2.6版本更新修复内容：

1. **确保 MySQL 服务运行**：
   - 在 Shell 脚本中添加了显式的 MySQL 服务检查
   - 添加了服务启动和等待逻辑

2. **修复连接问题**：
   - 使用 `127.0.0.1` 代替 `localhost` 避免 socket 连接问题
   - 添加了专门的 MySQL 连接测试函数

3. **详细的错误诊断**：
   - 提供清晰的错误消息和故障排除建议
   - 添加了连接测试步骤

4. **用户主机指定**：
   ```sql
   CREATE USER 'apkdpb'@'127.0.0.1'
   确保用户可以从本地主机连接
   ```

5. **宝塔面板操作模拟**：
   ```bash
   {
     echo 7              # 选择修改MySQL密码选项
     sleep 1             # 等待选项加载
     echo "$password"    # 输入新密码
     sleep 1
     echo "$password"    # 再次输入新密码
     sleep 1
   } | bt
   ```

6. **安全检查**：
   - 添加 root 权限检查
   - 验证宝塔面板的 `bt` 命令是否存在
   - 增强错误处理（每一步操作后检查退出状态）

7. **用户体验优化**：
   - 添加操作进度提示
   - 使用 √ 符号标记成功操作
   - 更清晰的错误分隔线

8. **流程控制**：
   - 密码修改成功后才会执行后续操作
   - 增加 sleep 确保命令序列正确执行
   - 严格检查每个步骤的退出状态码
   
9. **版本更新**
   - 将版本号从 2.5 更新为 2.6
   - 更新了优化日期为 2025.07.6


### 2.5版本更新优化内容：

1. **步骤合并**：
   - 将原来的步骤6（启动应用程序）和步骤7（等待应用初始化）合并为新的`start_application_and_wait`函数（步骤6/9）
   - 步骤总数从10个减少到9个

2. **步骤2增加检测**：
   - 在设置权限前检查目标目录是否可写（`[ -w "$TARGET_DIR" ]`）
   - 如果可写则跳过权限设置，避免重复操作

3. **步骤4增加检测**：
   - 在复制文件前检查目标目录是否存在且非空（`[ -d "$DEST_DIR" ] && [ "$(ls -A "$DEST_DIR")" ]`）
   - 如果目标目录已存在则跳过复制操作

4. **菜单选项更新**：
   - 将菜单中的"启动应用程序"选项指向新的合并函数
   - 更新所有步骤的编号说明（1/9 → 9/9）
   
5. **新增PID文件处理**：
   - 定义PID文件路径：`pid_file="${TARGET_DIR}/AliPack.jar.pid"`
   - 启动前删除旧的PID文件：`rm -f AliPack.jar.pid`
   - 添加等待PID文件生成的循环（最多30秒）

6. **PID获取逻辑**：
   - 首先尝试从PID文件读取：`START_PID=$(cat "$pid_file")`
   - 如果文件不存在，尝试通过进程名查找：`ps aux | grep -v grep | grep "java.*AliPack.jar"`
   - 如果两种方法都失败，设置PID为"未知"

7. **优化等待机制**：
   - 先等待PID文件生成（最多30秒）
   - 如果提前获取到PID，继续等待剩余时间（确保总共等待30秒）
   - 显示详细的等待进度信息

5. **版本更新**
   - 将版本号从 2.4 更新为 2.5
   - 更新了优化日期为 2025.07.5

### 使用说明：
1. 应用启动后会生成`/www/wwwroot/DPB/AliPack.jar.pid`文件
2. 脚本会读取该文件获取应用进程PID
3. 如果PID文件未生成，脚本会自动尝试通过进程名查找
4. 最终部署结果会显示应用进程PID（在`show_result`函数中）


### 2.4版本主要优化内容：

1. **统一颜色格式**：
   - 使用更丰富的颜色方案（新增紫色和青色）
   - 所有输出信息都使用统一颜色编码
   - 重要信息使用更醒目的颜色组合

2. **功能合并与简化**：
   - 将原步骤5（替换IP）和步骤8（替换端口）合并为`configure_server`函数
   - 移除配置文件备份功能（原步骤4）
   - 步骤从12步精简为10步，逻辑更清晰

3. **提示信息优化**：
   - 使用更直观的图标（✅ ❌ 🔄 ℹ️ ⚠️）
   - 关键步骤添加分隔线增强可读性
   - 错误信息更详细，包含解决方案提示

4. **部署流程优化**：
   - 调整步骤顺序：先文件操作后配置修改
   - 端口范围从1000-9999调整为5000-9999（更安全）
   - 简化IP获取逻辑，添加格式验证

5. **用户体验增强**：
   - 部署结果展示更直观的访问URL
   - 添加剪贴板自动复制功能
   - 重要提示信息集中显示
   - 菜单界面更美观专业

6. **错误处理增强**：
   - 关键操作添加错误检查和退出
   - 统一错误处理流程
   - 增加操作状态反馈
 
5. **版本更新**
   - 将版本号从 2.3 更新为 2.4
   - 更新了优化日期为 2025.07.4


### 2.3版本脚本整合更新：

1. **功能保留**：
   - 完整保留了`ali.sh`的端口随机化、防火墙配置和访问验证功能
   - 完整保留了`dpb.sh`的JDK安装、目录权限设置、IP配置和部署流程

2. **步骤化组织**：
   - 使用12个步骤组织部署流程（参考ali.sh格式）
   - 每个步骤都有清晰的进度提示和状态标识（✅/❌）

3. **主要流程**：
   ```mermaid
   graph TD
   A[开始部署] --> B[安装JDK]
   B --> C[设置目录权限]
   C --> D[验证配置文件]
   D --> E[备份配置文件]
   E --> F[替换IP配置]
   F --> G[复制所需目录]
   G --> H[生成随机端口]
   H --> I[替换端口配置]
   I --> J[启动应用]
   J --> K[等待初始化]
   K --> L[添加防火墙]
   L --> M[验证访问]
   M --> N[显示结果]
   ```
   
4. **新增剪贴板复制功能**：
   - 在验证网站访问成功后，添加了自动复制访问地址的功能
   - 支持两种常见剪贴板工具：`xclip`（优先使用）和 `xsel`

5. **智能检测工具可用性**：
   - 使用 `command -v` 检测系统中是否安装了剪贴板工具
   - 如果检测到可用工具，自动将访问地址复制到系统剪贴板
   - 如果未检测到工具，显示安装提示信息

6. **用户友好的提示**：
   - 复制成功后显示确认信息（📋 访问地址已复制到剪贴板）
   - 对于未安装工具的情况，提示用户如何启用该功能

7. **兼容性处理**：
   - 保持原有脚本逻辑不变
   - 仅在访问验证成功后执行复制操作
   - 不改变原有的错误处理流程
   
8. **新增功能**：
   - 自动获取服务器IP地址
   - 支持多种防火墙工具（宝塔/firewalld/ufw）
   - 自动备份配置文件并显示备份路径
   - 剪贴板自动复制访问地址（需xclip/xsel）
   - 详细的部署结果汇总

9. **使用提示**：
   - 首次启动需要等待30秒初始化
   - 显示管理员默认凭据（admin/123456）
   - 提供错误处理和建议解决方案
   
10. **版本更新**
   - 将版本号从 2.2 更新为 2.3
   - 更新了优化日期为 2025.07.3


### 2.2版本更新优化内容：

1. **移除了所有不必要的用户交互**：
   - 自动备份配置文件（不再询问）
   - 自动替换端口配置（不再确认）
   - 自动启动应用（不再询问）
   - 自动添加防火墙规则（不再询问）

2. **新增网站访问验证步骤**：
   - 智能获取服务器IP地址（支持多种获取方式）
   - 自动生成访问URL：`http://<ip>:<新端口>`
   - 使用curl测试网站是否返回200状态码
   - 显示最终访问地址供用户使用

3. **优化了防火墙添加逻辑**：
   - 使用更完整的宝塔命令输入序列
   - 添加了详细的注释说明
   - 改进了错误处理和反馈

4. **增强了IP获取功能**：
   ```bash
   get_server_ip() {
     local ip
     ip=$(curl -s https://api.ipify.org) || \
     ip=$(curl -s http://ifconfig.me) || \
     ip=$(hostname -I | awk '{print $1}') || \
     ip=$(ip addr show | grep -oP 'inet \K[\d.]+' | grep -v '127.0.0.1' | head -1)
     echo "$ip"
   }
   ```

5. **改进的输出格式**：
   - 更清晰的步骤标识（1/7, 2/7等）
   - 最终结果汇总包含所有关键信息
   - 网站访问测试结果高亮显示

5. **版本更新**
   - 将版本号从 2.1 更新为 2.2
   - 更新了优化日期为 2025.07.2

### 最终输出示例：

========================================
🎉 所有操作已完成！
• 使用的新端口: 5683
• 服务器IP地址: 192.168.1.100
• 访问地址: http://192.168.1.100:5683
• 配置文件: /www/wwwroot/DPB/config/application.yml
• 配置文件备份: /www/wwwroot/DPB/config/application.yml.bak.20250709153045
• 应用PID: 29481
========================================


### 2.1版本更新修复内容：

1. **防火墙添加逻辑重构**：
   - 添加了 `add_firewall_port()` 函数处理防火墙规则
   - 使用更健壮的输入序列（包括端口、协议和备注）
   - 添加了错误处理机制

2. **多重防火墙支持**：
   - 首先尝试使用宝塔命令 `bt 5`
   - 如果失败，自动尝试系统级防火墙工具：
     - 支持 `firewalld` (CentOS/RHEL)
     - 支持 `ufw` (Ubuntu/Debian)
   - 提供清晰的错误提示

3. **输入序列优化**：
   ```bash
   {
       echo "$port"    # 输入端口号
       echo            # 回车使用默认协议 (tcp)
       echo "随机端口" # 输入备注
       echo "y"        # 确认添加
   } | bt 5
   ```

4. **错误处理和反馈**：
   - 检测每个步骤的执行结果
   - 提供详细的成功/失败信息
   - 失败时给出明确的解决建议

5. **版本更新**
   - 将版本号从 2.0 更新为 2.1
   - 更新了优化日期为 2025.07.1

### 防火墙添加流程说明：

1. 脚本会首先尝试使用宝塔命令添加端口
2. 如果宝塔命令失败（常见于某些环境配置），脚本会自动检测系统防火墙工具：
   - 对于 CentOS/RHEL 系统，使用 `firewall-cmd`
   - 对于 Ubuntu/Debian 系统，使用 `ufw`
3. 如果所有方法都失败，会提示用户手动添加端口


### 2.0版本重制更新内容：

1. **生成随机端口**：在1000-9999范围内生成安全的四位数端口
2. **配置文件备份**：自动创建原始配置的备份文件（扩展名为.bak）
3. **端口替换**：使用sed精确替换application.yml中的端口号
4. **启动应用**：进入项目目录执行start.sh启动脚本（后台运行）
5. **防火墙配置**：通过宝塔面板命令行接口自动添加新端口
6. **状态反馈**：执行完成后显示新端口信息

### 脚本特点：

1. **分步交互提示**：
   - 7个清晰步骤，每步都有明确提示
   - 关键操作前需要用户确认
   - 提供跳过选项（y/n）

2. **增强功能**：
   - 配置文件存在性验证
   - 带时间戳的备份文件
   - 端口修改前后对比显示
   - 启动进度实时显示
   - 操作结果汇总报告

3. **安全措施**：
   - 所有修改操作前需要确认
   - 提供跳过危险操作的选项
   - 自动验证配置文件路径

4. **用户体验**：
   - 使用Unicode图标增强可读性
   - 清晰的分隔线区分步骤
   - 进度实时显示
   - 最终结果汇总