# web_android_shell

Android 平板专用 H5 壳应用 — Monorepo 多品牌架构。

## 项目结构

```
web_android_shell/
├── apps/                         # 品牌应用（每个品牌一个 Flutter App）
│   └── quanxue/                  # 全学通
├── packages/
│   ├── web_shell_core/           # 核心库（WebView 引擎 + Bridge + 服务）
│   └── web_android_shell/        # 旧版入口（已迁移至 apps/quanxue）
├── flavors/                      # 品牌配置 + 品牌资源
│   ├── quanxue.yaml              # 品牌配置
│   └── quanxue/                  # 品牌资源（图标、启动页）
│       ├── icon.png
│       ├── icon_foreground.png
│       └── splash.png
├── tool/
│   ├── generate_app.dart         # 一键生成新品牌应用
│   └── flutter_run_fresh.ps1     # Windows 调试脚本（自动杀旧进程）
└── doc/                          # 项目文档
```

## 快速开始

### 1. 运行已有品牌

```bash
cd apps/quanxue
flutter run
```

### 2. 生成新品牌

```bash
# 1) 在 flavors/ 下创建品牌配置
cp flavors/quanxue.yaml flavors/新品牌.yaml
# 2) 修改配置中的 app_name, application_id, app_key, theme, branding
# 3) 准备品牌资源（参见下方规格要求）
mkdir flavors/新品牌
cp 你的图标.png flavors/新品牌/icon.png
cp 你的前景图.png flavors/新品牌/icon_foreground.png
cp 你的启动图.png flavors/新品牌/splash.png
# 4) 运行生成脚本
dart run tool/generate_app.dart 新品牌
```

生成脚本会自动完成：
- 创建 Flutter 应用 → `apps/新品牌/`
- 添加 `web_shell_core` 依赖
- 覆写 `MainActivity` 继承 `CoreShellActivity`
- 更新 `AndroidManifest.xml` 应用名
- 生成品牌入口 `main.dart`
- 复制品牌资源到生成目录
- 添加 `flutter_launcher_icons` / `flutter_native_splash` 依赖
- 自动生成应用图标和启动页

### 3. 品牌配置格式

```yaml
app_name: "全学通"                          # 应用名
application_id: "com.wanmake.quanxue"       # 包名
app_key: "quanxue_prod"                     # 业务标识
theme:
  accent_color: "0xFF3ED37B"                # 主题色
  bg_color: "0xFFFFFFFF"                    # 背景色
  text_color: "0xFF1F2937"                  # 主文字色
  muted_text_color: "0xFF6B7280"            # 次要文字色
branding:
  icon: "icon.png"                          # 应用图标（相对于 flavors/<品牌>/）
  icon_background: "#FFFFFF"                # 自适应图标背景色
  icon_foreground: "icon_foreground.png"    # 自适应图标前景
  splash: "splash.png"                      # 启动页图片
  splash_color: "#FFFFFF"                   # 启动页背景色
```

### 4. 品牌资源规格

| 资源 | 文件名 | 最小尺寸 | 格式 | 说明 |
|---|---|---|---|---|
| 应用图标 | `icon.png` | 1024×1024 | PNG | 正方形，用于生成各尺寸 launcher icon |
| 自适应图标前景 | `icon_foreground.png` | 1024×1024 | PNG (透明背景) | 主体内容需居中，四周留 **25% 安全区** |
| 启动页图片 | `splash.png` | 1152×1152 | PNG | 用于生成 Android 12+ 和旧版启动页 |

> **提示：** 资源文件放置在 `flavors/<品牌名>/` 目录下，`branding` 中的路径相对于此目录。如果省略 `branding` 段，脚本会跳过图标和启动页生成。

## 调试说明

部分教育平板设备使用 `Ctrl+C` 结束 `flutter run` 后，旧进程可能留在后台影响 WebView 启动。

**推荐做法：**
- 调试结束时在 `flutter run` 控制台按 `q` 退出
- 或使用调试脚本自动杀旧进程再启动：

```powershell
.\tool\flutter_run_fresh.ps1          # 自动选设备
.\tool\flutter_run_fresh.ps1 -d F136A # 指定设备
```

## 技术栈

| 组件 | 技术 |
|---|---|
| 框架 | Flutter 3.x (Dart 3.11+) |
| WebView | `webview_flutter` + `webview_flutter_android` |
| 宿主能力 | `image_picker` · `file_picker` · `permission_handler` · `url_launcher` |
| 原生层 | Kotlin Plugin + Java `CoreShellActivity` |
| 代码规范 | `very_good_analysis` |

## 平台约束

**仅支持 Android 平板。** iOS / Web / Desktop 平台已移除。
