Skip to content

Architecture

nicknull edited this page May 18, 2026 · 1 revision

技术架构

DroidLink 采用 MVVM (Model-View-ViewModel) 架构,使用 Flutter + Provider 进行状态管理。

整体架构

┌─────────────────────────────────────────────┐
│                   Views                      │
│  SplashView · HomeView · FileExplorerView    │
│  GalleryView · AppManagerView · ScreenshotView│
├─────────────────────────────────────────────┤
│                 ViewModels                    │
│  DeviceViewModel · FileExplorerViewModel     │
│  GalleryViewModel · AppManagerViewModel      │
│  ScreenshotViewModel                         │
├─────────────────────────────────────────────┤
│                 Services                      │
│  AdbService · DeviceMonitor · StartupChecker │
│  ApkResourceParser                           │
├─────────────────────────────────────────────┤
│               External Tools                  │
│           ADB · scrcpy · aapt                 │
└─────────────────────────────────────────────┘

核心模块

Services 层

服务 职责
AdbService 封装所有 ADB 和 scrcpy CLI 命令,自动检测工具路径,支持 Homebrew 安装
DeviceMonitor 每 2 秒轮询设备列表,广播设备状态变化
StartupChecker 启动时顺序检测 Homebrew、ADB、scrcpy,引导用户安装
ApkResourceParser 纯 Dart 解析 APK 二进制文件,提取应用名称

ViewModel 层

ViewModel 管理的状态
DeviceViewModel 设备列表、选中设备、当前页面切换
FileExplorerViewModel 文件浏览路径、文件列表、多选状态
GalleryViewModel 媒体扫描、分页加载、缩略图缓存、导出追踪
AppManagerViewModel 应用列表、标签缓存、收藏、权限管理
ScreenshotViewModel 截图、录屏进程、历史记录、预览

数据模型

模型 字段
DeviceInfo 序列号、型号、Android 版本、电量、存储、分辨率
FileItem 文件名、路径、类型、大小、修改日期、权限
MediaItem 文件名、路径、大小、时间戳、是否视频、缩略图路径
AppInfo 包名、APK 路径、应用名、版本、是否系统应用、大小、是否收藏

依赖关系

pubspec.yaml 关键依赖:
├── flutter (UI 框架)
├── provider ^6.1.0 (状态管理)
├── media_kit ^1.2.6 (视频播放)
├── file_selector ^1.0.0 (文件选择对话框)
├── path_provider ^2.1.0 (应用目录)
├── archive ^4.0.9 (APK 解析)
└── url_launcher ^6.3.0 (打开链接)

工具检测策略

ADB 和 scrcpy 的检测遵循多级回退:

  1. 环境变量 (ANDROID_HOME)
  2. 平台默认路径 (~/Library/Android/sdk/, %LOCALAPPDATA%\Android\Sdk\)
  3. Homebrew 安装路径 (/opt/homebrew/bin/, /usr/local/bin/)
  4. 系统 PATH (which/where)

Clone this wiki locally