Commit Graph

46 Commits

Author SHA1 Message Date
Max 436ea87a4f feat: 更新图标、名字、版本号 2026-04-10 16:56:06 +08:00
Max f7c301c89c chore: bump app versions to 1.0.1+2 2026-04-02 17:33:11 +08:00
Max ce3122861c chore: 补充 satellite 网络类型、升级测试资源与依赖锁定
- bridge_actions: 新增 ConnectivityResult.satellite 分支映射
- test_assets: 更新 bootstrap/config 测试资源与 bridge 调试页面
- apps: 同步 pubspec.lock 依赖锁定
- flavors: 更新 test.yaml 配置
2026-04-02 14:28:19 +08:00
Max c1d2db1d60 feat: extend media bridge and document changes 2026-04-02 13:38:15 +08:00
Max 40d1b179d0 Merge branch 'main' of https://gitea.23544.com/wangyang/web_shell_flutter 2026-04-01 16:48:58 +08:00
Max 7f1b8afa70 refactor: clean code 2026-04-01 16:48:55 +08:00
TangJo 42d12212e4 feat:新增注释 2026-03-26 10:23:24 +08:00
TangJo c08d5b58eb feat:加载远程配置 2026-03-26 09:54:18 +08:00
TangJo 44cf59749d Merge branch 'main' of https://gitea.23544.com/wangyang/web_shell_flutter 2026-03-25 17:55:03 +08:00
TangJo 24d8fc3a2d feat:支持升级功能。 2026-03-25 17:55:02 +08:00
Max 8799a62544 Merge branch 'main' of https://gitea.23544.com/wangyang/web_shell_flutter 2026-03-24 15:57:33 +08:00
Max 6e08349556 fix: ErrorOverlay 不可见 — Stack 在 Visibility(visible:false) 时坍缩为 0×0
当 _hasMainFrameError=true 时,Visibility(visible:false) 将 WebView
替换为 SizedBox.shrink()(0×0),这是 Stack 唯一的非 positioned 子组件。
Scaffold.body 提供松约束(0→max),导致 Stack 尺寸为 0×0,
Positioned.fill 的 ErrorOverlay 也变为 0×0,用户只能看到 Scaffold 的
深色背景而看不到错误页面的内容。

修复方式:用 SizedBox.expand() 包裹 Stack,强制紧约束使其始终填满屏幕。

附带变更:
- 添加 _debugLog() 封装(kDebugMode 保护)
- 在 7 个关键状态转换点添加调试日志
2026-03-24 15:54:38 +08:00
YuanXuan 55d035cb9c fix(ci): retry apk build after clearing corrupted Gradle cache
Handle sporadic Gradle wrapper zip corruption on Jenkins by retrying
build once after removing ~/.gradle/wrapper/dists.

Made-with: Cursor
2026-03-24 11:14:13 +08:00
YuanXuan 9fbefc4438 chore(ci): add heartbeat logs during flutter apk build
Print a timestamp every 30 seconds while flutter build runs so long
Gradle/download phases are visible in Jenkins instead of appearing hung.

Made-with: Cursor
2026-03-24 10:49:25 +08:00
YuanXuan f072df7b76 fix(ci): avoid Groovy GString parse errors in Jenkins shell block
Jenkins CPS Groovy rejects patterns like if [ "${params.X}" = "true" ].
Assign params to shell variables first, then use $VAR in tests and EXTRA_ARGS.

Made-with: Cursor
2026-03-24 10:24:42 +08:00
YuanXuan 0bfb1e67e0 fix(ci): escape EXTRA_ARGS in Jenkinsfile GString
Groovy interpolated $EXTRA_ARGS as a pipeline binding property, which
raised MissingPropertyException and skipped flutter build apk. Prefix
dollar signs with backslash so the shell receives literal $EXTRA_ARGS.

Made-with: Cursor
2026-03-24 10:17:29 +08:00
Max 84df0d013f feat: add jenkinsfile 2026-03-24 10:07:56 +08:00
Max 96adc5cd91 build(jenkins): add Jenkins pipeline for Android and dynamic app update script 2026-03-24 09:48:29 +08:00
Max 318c829ced refactor: simplify icon assets and improve keystore resolution
- Remove separate icon_foreground.png, reuse icon.png for adaptive icon foreground
- Enhance resolveKeystoreFile() with root-relative → module-relative fallback
- Update documentation to reflect icon consolidation
- Update test bootstrap IP to 192.168.2.57
2026-03-23 17:53:53 +08:00
TangJo 0a17e1c4f7 feat:1.generate_app 兼容windows;2.支持windows 打包apk。 2026-03-23 16:34:02 +08:00
Max 435d99772c feat: 拆分启动与升级配置并补齐核心测试 2026-03-20 19:47:50 +08:00
Max 0d259334ee feat: 重构启动配置与升级配置分离,修复 WebView 错误浮层竞态条件
- 将 ShellRemoteConfig 拆分为 ShellBootstrapConfig(启动配置)和 ShellUpgradeConfig(升级配置)
- ShellBootstrapConfig 支持 initialUrl 和 preferredOrientations
- ShellUpgradeService 改为独立获取升级配置,不再依赖启动配置
- ShellEnvironment 新增 bootstrapConfigAsset / bootstrapConfigUrl / upgradeConfigUrl / copyWith
- 修复 WebView 错误浮层被 onPageFinished 重置的竞态条件
- 修复 Offstage 导致 Stack 坍缩为零尺寸的白屏问题,改用 Visibility
- 增强 recovery.dart 对原始 net::ERR_* 字符串的友好翻译
- 重新生成 3 个品牌应用(aixue / test / yunxiao)的图标和启动页资源
- aixue 应用改用 bootstrapConfigAsset 加载本地启动配置
- 移除 launch.json 中已废弃的 quanxue 配置
2026-03-20 17:23:03 +08:00
Max bf0f0e082f feat(publish): App 签名自动配置及依赖清理优化
- 新增 `generate_app.dart` 中的签名注入逻辑:读取 `signing` 节点或回退至默认 `tool/key.jks` 配置,自动生成 `android/key.properties`,并在 `build.gradle.kts` 中注入 `signingConfigs.release` 配置
- 修复: 在静态资源生成后主动运行 `flutter pub remove flutter_native_splash` 和 `flutter_launcher_icons` 避免其产生的编译阶段 Hook 破坏 Release 打包流程
- 执行: 重新生成并覆盖了 `test`、`aixue`、`yunxiao` 三个应用,现在可直接执行 `flutter build apk --release` 和 `appbundle` 上架构建
2026-03-20 11:47:59 +08:00
Max b8d7ec5a55 chore: 移除 quanxue 应用及相关配置 2026-03-20 11:17:48 +08:00
Max d6c6d6cc1c feat(flavor): 新增测试 (test) 内部应用 Flavor
- 新增:  默认初始 URL () 主要用于开发调试
- 新增:  内含 AI 生成的 极客/测试风 Icon 及 启动图片 (霓虹绿/深灰)
- 产物:  构建完毕
2026-03-20 11:14:02 +08:00
Max 10363abba4 feat(flavor): 新增爱学蝶变 (aixue) 应用 Flavor
- 新增:  默认初始 URL ()
- 新增:  内含 AI 生成的 品牌 Icon 及 启动图片 (日落橘紫蝴蝶/书本风格)
- 产物:  构建完毕
2026-03-20 11:10:39 +08:00
Max 4a235af054 feat(flavor): 新增云校嗨学 (yunxiao) 应用 Flavor 并支持自定义 defaultUrl
- 扩展:  支持注入  到
- 新增:  配置与资源图 (Icon & Splash)
- 产物: 生成  壳应用代码
2026-03-20 11:08:32 +08:00
Max 283c3ed601 test: 修复测试覆盖度 — 修复 LaunchOverlay 断言 + 扩展 Bridge 检测 + 补充 Phase 2 单测
Phase 3 测试覆盖修复:
- 修复 LaunchOverlay 测试:CircularProgressIndicator + appName 替代旧 UI
- Bridge 脚本检测从 8 → 12 个 Action
- test_hooks.dart: 新增 4 个 Phase 2 测试钩子
- 新增 10 个 Phase 2 单元测试:
  · getDeviceInfo smoke test
  · getNetworkStatus (WiFi/cellular/none) 3 个
  · setStatusBar (light/dark+color/empty) 3 个
  · showToast widget test + 空消息守卫
- 全部 84 条测试通过 
2026-03-20 10:48:23 +08:00
Max d4f7899351 feat(bridge): 新增 Phase 2 协议函数 — getDeviceInfo / getNetworkStatus / showToast / setStatusBar
- 新增 device_info_plus 和 connectivity_plus 依赖
- bridge_protocol.dart: AppShell API 从 8 个扩展到 12 个
- bridge_actions.dart: 实现 4 个 Dart 处理器 + 原生风格 Toast 动效组件
- shell_page.dart: 新增 4 个 action 分支
- test_bridge.html: 新增 4 个测试区块,Bridge 检测覆盖全部 12 个方法
2026-03-20 10:30:29 +08:00
Max dad37faecb feat(launch_overlay): 使用品牌 Logo 和 AppName 替换通用图标
- ShellEnvironment 新增 splashImage 字段支持品牌启动图标
- LaunchOverlay 使用 splash.png 替换 Icons.language_rounded
- 标题改为品牌名称(appName),移除副标题
- 加载指示器改为 CircularProgressIndicator 不定态转圈
- 使用 accentColor 主题色
- generate_app.dart 自动注册 assets/branding/ 并生成 splashImage 配置
- quanxue pubspec.yaml 注册 assets/branding/ 目录
2026-03-20 10:14:43 +08:00
Max 8ac3a222c1 feat: 则跟你讲唉设备状态 2026-03-20 09:58:52 +08:00
Max fb84e6f4fe feat: init 改为 测试web 2026-03-20 09:56:02 +08:00
Max 498fa823a0 merge: refactor_monorepo → main
重构为 monorepo 架构,核心变更:
- 拆分 core_app.dart (2100行) 为 15 个模块化文件
- 重写 generate_app.dart 品牌资源生成流程
- 补全 web_shell_core Android 权限/Impeller/手势配置
- 测试覆盖 67 用例
- 全量文档更新
2026-03-20 04:49:04 +08:00
Max 8db977c3d9 fix: 注入 Android 13 预测手势并在底层强制禁用 Impeller 引擎保障 WebView 渲染稳定 2026-03-20 04:43:14 +08:00
Max 77af598f3e fix: 补充 web_shell_core 缺失的 Android 权限及清单属性
利用 Android Manifest Merger 的特性,将所有核心权限声明在 web_shell_core 的库清单中。
- 补齐了 INTERNET, CAMERA, STORAGE, BLUETOOTH 等全套权限,确保 H5 与 permission_handler 正常工作
- 添加了 Android 11+ 所需的 url_launcher queries 白名单
- 巧妙注入 android:usesCleartextTraffic="true",优雅解决了 HTTP 明文流量被拦截的问题
生成的品牌 App 现在可以零配置开箱即用
2026-03-20 04:38:37 +08:00
Max 4438727b32 fix: 移除 flutter create 默认生成的 widget_test.dart 避免报找不到 MyApp 错误 2026-03-20 04:36:52 +08:00
Max 5569db3a1a docs: 替换 AI 生成图为精准带标尺的程序化工程蓝图 2026-03-20 04:33:09 +08:00
Max 3b661417f1 chore: 更新全学通品牌核心资源 (严格合规)
- 使用 Python 重绘 icon.png (1024x1024)
- 生成带透明圆形遮罩的 icon_foreground.png (1024x1024, 内容安全区682px)
- 生成带透明圆形遮罩的 splash.png (1152x1152, 内容安全区768px)
- 重新运行 generate_app.dart 同步资源到 Android 原生目录
- 新增 doc/品牌资源规范.md 及相关配套示意图
2026-03-20 04:31:14 +08:00
Max 7735894c5c feat: 修复 generate_app.dart 品牌资源生成流程
- 重写 generate_app.dart:添加品牌名校验、--android-language java、
  自动安装 flutter_launcher_icons/flutter_native_splash dev 依赖、
  所有 Process.run 结果检查 exitCode
- 更新 quanxue.yaml:添加 branding 配置段
- 新增 flavors/quanxue/ 品牌资源目录(icon、foreground、splash)
- 重新生成 apps/quanxue(含品牌图标和启动页)
- 更新 README.md:品牌配置示例、资源规格说明、生成步骤
- 更新 web_shell_core/README.md:测试数量 54 → 67
2026-03-20 04:19:33 +08:00
Max a3b970d2b8 test: 测试覆盖率 54→75 用例
新增 7 个测试组:
- ShellEnvironment 配置验证(字段/默认URL/https地址)
- Bridge JS 协议格式(版本号/通道守卫/8 Action/成功响应/失败响应)
- AndroidCompatibilityPlan describe 格式(fallback/现代设备/F136A/空字段)
- 相机边界场景(无 controller/不弹窗/返回 null)
- 多文件序列化(多 XFile/空列表/URI 转换)
- 看门狗常量验证(旧相机脚本/版本解析)
2026-03-19 20:05:43 +08:00
Max 115713d8f4 docs: 完善全部项目文档
- 重写根 README.md(项目结构 + 快速开始 + 品牌配置 + 调试说明 + 技术栈)
- 重写 web_shell_core/README.md(功能表 + 使用方式 + 代码结构 + 测试 + 原生层)
- 重写 apps/quanxue/README.md(品牌应用说明)
- 更新 packages/web_android_shell/README.md(迁移通知)
- 填充 web_shell_core/CHANGELOG.md(0.0.1 初始发布内容)
- 新增 doc/architecture.md(分层架构 + 启动流程 + Bridge 协议 + 兼容策略)
- 修正 pubspec.yaml 中的占位 description
2026-03-19 20:00:04 +08:00
Max 97be25b332 chore: 中文化日志注释 + 测试覆盖率 25→54 + iOS 清理 + 代码优化
- 全面中文化 debugPrint 日志(bridge_protocol, media_service, navigation_service, shell_page)
- Java 异常处理注释中文化(CoreShellActivity)
- 新增 29 个测试用例覆盖边界场景(URL/序列化/兼容性/错误映射/Accept类型/boolValue/MIME)
- 提取 _buildAndroidWidgetParams 方法,优化 summary getter 可读性
- 删除 iOS 相关文件(仅支持 Android 平板)
- 测试中使用 cascade notation 改进风格
2026-03-19 19:54:29 +08:00
Max bae37a4bb5 Refactor: split core_app.dart (2100 lines) into 15 modular files across 5 directories 2026-03-19 17:24:57 +08:00
Max a4a714f037 Refactor: migrate to Monorepo N-brand architecture with automated scaffolding 2026-03-19 16:58:03 +08:00
Max 163f0a89f9 chore: save state before monorepo refactor 2026-03-19 16:43:52 +08:00
Max c36ea7bfc8 Initial commit: Flutter web android shell project 2026-03-19 16:00:05 +08:00