feat: 同时启动多个模拟器时使用自动检测连接时提供弹窗选择
https://github.com/user-attachments/assets/0b424e4d-6704-4d63-84dc-64916df6220b
## Summary by Sourcery
添加通用的项目选择对话框,并使用它在自动检测期间处理多个已检测到的模拟器和连接地址。
New Features:
- 引入可复用的项目选择对话框和视图模型,可以显示带有可自定义标题和提示语的项目列表,并返回所选项目。
- 当检测到多个模拟器或多个 ADB 路径时,允许用户选择要连接的模拟器实例。
- 当检测到多个非默认的 ADB 连接地址时,允许用户选择要使用的连接地址。
Bug Fixes:
- 当发现多个候选项时,通过明确要求用户进行选择,防止产生含糊不清或错误的模拟器/ADB 选择。
- 当不存在有效目录时,将已配置路径初始化为空,避免强制使用硬编码的默认模拟器安装路径。
- 确保选择对话框始终在 UI 线程调度器上创建和显示,以避免潜在的线程问题。
Enhancements:
- 优化模拟器检测逻辑,以同时跟踪模拟器名称和解析后的 ADB 路径,对结果去重,并在选择界面中展示这些信息。
- 使用通用项目选择对话框替换特定于模拟器路径的对话框,并简化相关视图模型的职责。
- 通过可在不同选择场景中复用的通用选择与提示字符串,改进本地化支持。
<details>
<summary>Original summary in English</summary>
## Summary by Sourcery
Add generic item selection dialog and use it to handle multiple detected
emulators and connection addresses during auto-detection.
New Features:
- Introduce a reusable item selection dialog and view model that can
display a list of items with customizable title and prompt and return
the selected item.
- Allow users to choose which emulator instance to connect to when
multiple emulators or ADB paths are detected.
- Allow users to choose which connection address to use when multiple
non-default ADB addresses are detected.
Bug Fixes:
- Prevent ambiguous or incorrect emulator/ADB selection by explicitly
requiring a user choice when multiple candidates are found.
- Avoid forcing hard-coded default emulator installation paths by
initializing configured paths as empty when no valid directory exists.
- Ensure selection dialogs are always created and shown on the UI thread
dispatcher to avoid potential threading issues.
Enhancements:
- Refine emulator detection to track both emulator name and resolved ADB
path, deduplicate results, and surface this information in the selection
UI.
- Replace the emulator-path-specific dialog with a generic item
selection dialog and simplify related view model responsibilities.
- Improve localization support with generic selection and prompt strings
that can be reused across different selection scenarios.
</details>
<img width="3190" height="208" alt="07832262dcc66157005c08cc95a03fd1"
src="https://github.com/user-attachments/assets/84630506-c595-4999-ac7b-9c79f200bb16"
/>
<img width="1753" height="91" alt="b8ee23114f21ed1047697a77e713f1e5"
src="https://github.com/user-attachments/assets/6d781864-9c65-4774-85c7-8c22a1210285"
/>
完整包体积 +67 M
更新包第一次也会大差不多这么多,后面因为增量的原因不会影响
## Summary by Sourcery
记录迁移到自包含(self-contained)的 .NET 部署方式,并相应更新运行时和操作系统支持要求。
新功能:
- 通过自包含部署,将 .NET 运行时打包进 Windows GUI 构建中,从而不再需要单独安装 .NET。
增强改进:
- 在所有支持的语言中明确说明:安装时仅需要 Visual C++ 运行时,因为 .NET 现在已随程序一同提供。
- 更新 Linux/Wine 使用文档,以反映 Windows 构建已包含 .NET 运行时这一事实。
- 重新措辞操作系统支持说明,解释由于运行时和系统组件依赖,MAA 需要 Windows 10 或更高版本。
构建:
- 调整 WPF GUI 项目和依赖设置脚本以使用自包含发布模式,并停止安装外部的 .NET Desktop Runtime。
文档:
- 更新所有语言的常见问题(FAQ)、安装说明和新手指南,使其与新的自包含部署方式和运行时要求保持一致。
<details>
<summary>Original summary in English</summary>
## Summary by Sourcery
Document the switch to self-contained .NET deployment and update runtime
and OS support requirements accordingly.
New Features:
- Bundle the .NET runtime into the Windows GUI build via self-contained
deployment to remove the need for a separate .NET installation.
Enhancements:
- Clarify across all supported languages that only the Visual C++
runtime is required at install time, as .NET is now included.
- Update Linux/Wine usage docs to reflect that the Windows build already
contains the .NET runtime.
- Reword OS support notes to explain that MAA requires Windows 10 or
later due to its runtime and system component dependencies.
Build:
- Adjust the WPF GUI project and dependency setup script to use
self-contained publish mode and stop installing the external .NET
Desktop Runtime.
Documentation:
- Refresh FAQ, installation, and newbie guides in all languages to match
the new self-contained deployment and runtime requirements.
</details>