OneApp 性能/包体积/鸿蒙适配方案摘要与行动建议
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -24,3 +24,6 @@ __pycache__/
|
|||||||
# 操作系统文件
|
# 操作系统文件
|
||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
|
||||||
|
oneapp.apk
|
||||||
|
ID. UNYX.app
|
||||||
5768
App_Package_Size_Optimization/apk_size.csv
Normal file
5768
App_Package_Size_Optimization/apk_size.csv
Normal file
File diff suppressed because it is too large
Load Diff
4142
App_Package_Size_Optimization/ipa_size.csv
Normal file
4142
App_Package_Size_Optimization/ipa_size.csv
Normal file
File diff suppressed because it is too large
Load Diff
337
App_Package_Size_Optimization/包体积分析与优化方案.md
Normal file
337
App_Package_Size_Optimization/包体积分析与优化方案.md
Normal file
@@ -0,0 +1,337 @@
|
|||||||
|
# OneApp 包体积分析与优化方案
|
||||||
|
|
||||||
|
数据来源:
|
||||||
|
- Android: [apk_size.csv](./apk_size.csv)
|
||||||
|
- iOS: [ipa_size.csv](./ipa_size.csv)
|
||||||
|
- iOS 参考资料: [放心课App包大小分析.pdf](./放心课App包大小分析.pdf)
|
||||||
|
|
||||||
|
体积分布来源(tree 结构展示):
|
||||||
|
|
||||||
|
Android(APK 解包):
|
||||||
|
```
|
||||||
|
oneapp.apk/
|
||||||
|
├─ lib/
|
||||||
|
│ └─ arm64-v8a/
|
||||||
|
│ ├─ libapp.so
|
||||||
|
│ ├─ libAMapSDK_MAP_v10_0_700.so
|
||||||
|
│ ├─ libCubicSDK.so
|
||||||
|
│ ├─ libfuai.so
|
||||||
|
│ ├─ libmodpdfium.so
|
||||||
|
│ ├─ libavcodec.so
|
||||||
|
│ ├─ libavformat.so
|
||||||
|
│ ├─ libliteavsdk.so
|
||||||
|
│ ├─ libtxffmpeg.so
|
||||||
|
│ └─ libdownloadproxy.so
|
||||||
|
├─ assets/
|
||||||
|
│ ├─ engine/EngineAssets.bundle
|
||||||
|
│ ├─ model/ai_face_processor_e51.bundle
|
||||||
|
│ └─ flutter_assets/
|
||||||
|
│ └─ assets/fonts/
|
||||||
|
│ ├─ HYQiHei-60S.ttf
|
||||||
|
│ └─ HYQiHei-80S.ttf
|
||||||
|
├─ res/
|
||||||
|
└─ resources.arsc
|
||||||
|
```
|
||||||
|
|
||||||
|
iOS(IPA 解包):
|
||||||
|
```
|
||||||
|
Runner.app/
|
||||||
|
├─ Frameworks/
|
||||||
|
│ ├─ App.framework/App
|
||||||
|
│ ├─ Flutter.framework/Flutter
|
||||||
|
│ ├─ FURenderKit.framework/FURenderKit
|
||||||
|
│ ├─ FUAIKit.framework/FUAIKit
|
||||||
|
│ ├─ OneAppSDK.framework/OneAppSDK
|
||||||
|
│ ├─ libavcodec.framework/libavcodec
|
||||||
|
│ ├─ libavformat.framework/libavformat
|
||||||
|
│ ├─ TXFFmpeg.framework/TXFFmpeg
|
||||||
|
│ └─ RemoteParkAssistCoreMEB.framework/RemoteParkAssistCoreMEB
|
||||||
|
├─ EngineAssets.bundle
|
||||||
|
├─ ai_face_processor_e51.bundle
|
||||||
|
└─ Runner
|
||||||
|
```
|
||||||
|
|
||||||
|
说明:以下体积分布基于 WizTree 导出的解包目录统计(安装包解压后的文件集合),用于定位体积大户与优化方向,不等同于应用商店展示的下载体积。
|
||||||
|
|
||||||
|
## Android(APK)体积分布
|
||||||
|
|
||||||
|
总体体积(解包后汇总):约 1140.6 MB
|
||||||
|
|
||||||
|
一级目录占比(解包后汇总):
|
||||||
|
- assets:约 301.8 MB
|
||||||
|
- lib:约 286.9 MB
|
||||||
|
- 根目录(含 classes.dex / resources.arsc / 清单等):约 267.8 MB
|
||||||
|
- res:约 13.2 MB
|
||||||
|
|
||||||
|
主要大文件(Top 10):
|
||||||
|
- libapp.so:约 35.1 MB
|
||||||
|
- assets/0OO00l111l1l.:约 27.7 MB
|
||||||
|
- assets/engine/EngineAssets.bundle:约 20.3 MB
|
||||||
|
- libAMapSDK_MAP_v10_0_700.so:约 19.1 MB
|
||||||
|
- libCubicSDK.so:约 13.7 MB
|
||||||
|
- libflutter.so:约 10.3 MB
|
||||||
|
- assets/model/ai_face_processor_e51.bundle:约 10.2 MB
|
||||||
|
- 字体 HYQiHei-60S.ttf:约 8.2 MB
|
||||||
|
- 字体 HYQiHei-80S.ttf:约 8.0 MB
|
||||||
|
- libavcodec.so:约 8.1 MB
|
||||||
|
|
||||||
|
按文件类型占比(Top):
|
||||||
|
- .so:约 143.4 MB
|
||||||
|
- .bundle:约 31.0 MB
|
||||||
|
- 无扩展名资源:约 29.9 MB
|
||||||
|
- .ttf:约 17.3 MB
|
||||||
|
- .webp:约 15.5 MB
|
||||||
|
- .png:约 6.8 MB
|
||||||
|
- .json:约 5.7 MB
|
||||||
|
|
||||||
|
结论:SO 与 assets 体积是主要矛盾,尤其是低频功能的引擎、地图、视频与模型资源。
|
||||||
|
|
||||||
|
## Android(APK)优化方案
|
||||||
|
|
||||||
|
### 1) SO 动态加载(最推荐,预估可省 35–45 MB 以上)
|
||||||
|
|
||||||
|
核心策略:将低频重度功能从首包剥离,改为运行时按需下载,再用 System.load() 加载,避免首包加载与体积膨胀。
|
||||||
|
|
||||||
|
原理:
|
||||||
|
- APK 安装体积主要由 assets 与 lib 贡献,把不必要的 .so 挪出首包可直接减小安装体积
|
||||||
|
- 仅在功能触发时下载并加载,提升首装体验与首启时间
|
||||||
|
|
||||||
|
实施步骤:
|
||||||
|
- 选型与边界
|
||||||
|
- 明确低频、重依赖模块边界,避免核心首页路径依赖
|
||||||
|
- 建立下载开关与回退策略
|
||||||
|
- 拆包与产物
|
||||||
|
- 从构建产物中移除对应 .so 与资源
|
||||||
|
- 产出按 ABI 分包的动态资源包(arm64-v8a 等)
|
||||||
|
- 下载与校验
|
||||||
|
- 按需下载到应用私有目录
|
||||||
|
- 校验包完整性与版本兼容性
|
||||||
|
- 加载与初始化
|
||||||
|
- 调用 System.load() 加载本地路径
|
||||||
|
- 延迟初始化 SDK,确保只在功能入口执行
|
||||||
|
- 失败兜底
|
||||||
|
- 下载失败或加载失败时,降级到提示或轻量替代方案
|
||||||
|
|
||||||
|
第一梯队:必须动刀的大户
|
||||||
|
- libAMapSDK_MAP_v10_0_700.so(19.1 MB)
|
||||||
|
- 现状:地图引擎大、加载时机过早
|
||||||
|
- 方案:仅在用户进入“附近充电桩 / 导航”等页面时下载与加载
|
||||||
|
- libCubicSDK.so(13.7 MB)与 libCubicAISDK.so
|
||||||
|
- 现状:3D 车模渲染引擎,低频重度
|
||||||
|
- 方案:仅进入 3D 车模时下载与加载
|
||||||
|
- libfuai.so(7.4 MB)
|
||||||
|
- 现状:人脸识别/相机特效
|
||||||
|
- 方案:实名认证、人脸识别、社区发帖时再下载
|
||||||
|
- libmodpdfium.so(5.0 MB)
|
||||||
|
- 现状:PDF 阅读
|
||||||
|
- 方案:点开说明书时加载
|
||||||
|
|
||||||
|
第二梯队:多媒体与社交功能
|
||||||
|
- FFmpeg 系列库(libavcodec.so 8.1 MB、libavformat.so 4.3 MB 等)
|
||||||
|
- 方案:视频/行车记录回放模块进入时再加载
|
||||||
|
- 腾讯云音视频相关(libliteavsdk.so 3.5 MB、libtxffmpeg.so 2.5 MB、libdownloadproxy.so 2.5 MB)
|
||||||
|
- 方案:直播/音视频通话页面再加载
|
||||||
|
- libpag.so(2.4 MB)
|
||||||
|
- 方案:首页无 PAG 动画则动态化
|
||||||
|
|
||||||
|
### 2) 静态资源极致脱水(目标 20–30 MB)
|
||||||
|
|
||||||
|
原理:
|
||||||
|
- 高分辨率图片与字体是 assets 体积大户,压缩与替换可快速带来收益
|
||||||
|
- 资源分级与按需下发可避免一次性装入所有车型与动效
|
||||||
|
|
||||||
|
实施步骤:
|
||||||
|
- 图片优化
|
||||||
|
- PNG/JPG 批量转 WebP,保持视觉质量
|
||||||
|
- 大图按场景拆分与缩放,减少冗余尺寸
|
||||||
|
- 动效优化
|
||||||
|
- GIF/序列帧替换为 Lottie 或矢量动画
|
||||||
|
- 字体优化
|
||||||
|
- 字体子集化,仅保留实际用字
|
||||||
|
- 合并或减少字体家族数量
|
||||||
|
- 模型与大资源
|
||||||
|
- AI 模型与 3D 资源改为在线按需下载
|
||||||
|
|
||||||
|
重点目录:
|
||||||
|
- flutter_assets(39.6 MB)
|
||||||
|
- PNG/JPG 全量转 WebP(无损或高保真),通常可缩 40%–60%
|
||||||
|
- 动效从 GIF/序列帧改为 Lottie
|
||||||
|
- model(10.2 MB)
|
||||||
|
- AI 模型剥离为在线按需下载
|
||||||
|
|
||||||
|
### 3) 架构策略:全面迁移 AAB
|
||||||
|
|
||||||
|
原理:
|
||||||
|
- 通过 ABI 与屏幕密度拆分,终端只安装必需资源
|
||||||
|
- 从构建层面减少冗余架构与高密度资源
|
||||||
|
|
||||||
|
实施步骤:
|
||||||
|
- 产物策略
|
||||||
|
- 主线市场使用 AAB
|
||||||
|
- 国内渠道按 ABI 与密度拆分多 APK
|
||||||
|
- ABI 与密度
|
||||||
|
- 仅向 64 位设备下发 arm64-v8a
|
||||||
|
- 仅向高分屏设备下发 xxhdpi 及以上
|
||||||
|
- 动态功能模块
|
||||||
|
- 高频模块留首包,低频模块采用动态下发
|
||||||
|
- 注意国内商店对动态特性的支持差异
|
||||||
|
|
||||||
|
### 4) 代码与资源裁剪
|
||||||
|
|
||||||
|
原理:
|
||||||
|
- 未使用代码与资源不会影响功能,但会增加安装体积
|
||||||
|
|
||||||
|
实施步骤:
|
||||||
|
- 开启 R8 压缩与混淆,移除未使用代码
|
||||||
|
- 开启资源收缩,移除未使用图片与资源文件
|
||||||
|
- 移除无用语言与地区资源,仅保留目标市场
|
||||||
|
|
||||||
|
### 5) Native 库裁剪与去符号
|
||||||
|
|
||||||
|
原理:
|
||||||
|
- Native 库的调试符号与无用段会显著增加体积
|
||||||
|
|
||||||
|
实施步骤:
|
||||||
|
- 统一使用 release 产物与 strip 后的 .so
|
||||||
|
- 只保留必要的 ABI 与必要的插件 .so
|
||||||
|
- 对第三方 SDK 进行精简版本选型
|
||||||
|
|
||||||
|
## iOS(IPA)体积分布
|
||||||
|
|
||||||
|
总体体积(解包后汇总):约 1234.5 MB
|
||||||
|
|
||||||
|
一级目录占比(解包后汇总):
|
||||||
|
- Frameworks:约 610.1 MB
|
||||||
|
- 根目录(Runner.app 根目录):约 304.6 MB
|
||||||
|
- 各类 .bundle:约 28.9 MB
|
||||||
|
|
||||||
|
主要大文件(Top 10):
|
||||||
|
- App.framework/App:约 43.7 MB
|
||||||
|
- Runner:约 43.7 MB
|
||||||
|
- EngineAssets.bundle:约 18.1 MB
|
||||||
|
- FURenderKit.framework:约 13.3 MB
|
||||||
|
- FUAIKit.framework:约 12.6 MB
|
||||||
|
- ai_face_processor_e51.bundle:约 10.2 MB
|
||||||
|
- Flutter.framework:约 9.6 MB
|
||||||
|
- OneAppSDK.framework:约 8.0 MB
|
||||||
|
- libavcodec.framework:约 7.7 MB
|
||||||
|
- RemoteParkAssistCoreMEB.framework:约 6.7 MB
|
||||||
|
|
||||||
|
按文件类型占比(Top):
|
||||||
|
- 无扩展名(二进制可执行与 framework 主体):约 215.6 MB
|
||||||
|
- .bundle:约 28.9 MB
|
||||||
|
- .ttf:约 17.2 MB
|
||||||
|
- .webp:约 9.7 MB
|
||||||
|
- .car(Asset Catalog):约 8.8 MB
|
||||||
|
- .png:约 4.1 MB
|
||||||
|
- .json:约 5.4 MB
|
||||||
|
|
||||||
|
结论:Frameworks 是 iOS 体积主因,其次是 EngineAssets 与人脸识别相关模块。
|
||||||
|
|
||||||
|
## iOS(IPA)优化方案
|
||||||
|
|
||||||
|
以下方案结合当前包体分布给出可落地项:
|
||||||
|
|
||||||
|
与 Android 不同,iOS 更依赖构建期裁剪与资源下沉
|
||||||
|
|
||||||
|
### 1) 移除多余架构(armv7)
|
||||||
|
|
||||||
|
原理:armv7 属于历史设备架构,保留会直接扩大二进制与 Framework 体积。
|
||||||
|
|
||||||
|
实施步骤:
|
||||||
|
- Build Settings(Release)
|
||||||
|
- Excluded Architectures:armv7
|
||||||
|
- Validate Workspace 仅保留 arm64 产物
|
||||||
|
- 在 Build Phases 添加 Run Script,对嵌入 Framework 进行瘦身
|
||||||
|
- 确保脚本在 Code Sign 之前执行
|
||||||
|
|
||||||
|
```shell
|
||||||
|
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
|
||||||
|
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
|
||||||
|
do
|
||||||
|
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
|
||||||
|
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
|
||||||
|
if lipo -info "$FRAMEWORK_EXECUTABLE_PATH" | grep -q "armv7"; then
|
||||||
|
lipo -remove armv7 "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
预期收益:通常在 10–20 MB 量级
|
||||||
|
|
||||||
|
### 2) 裁剪符号表与导出符号
|
||||||
|
|
||||||
|
原理:调试符号与未使用的导出符号不会影响运行时功能,但会增加可执行文件与动态库体积。通过剥离符号、限制导出符号集合,可以直接减少安装包体积。
|
||||||
|
|
||||||
|
实施步骤:
|
||||||
|
- 主二进制裁剪
|
||||||
|
- Build Settings:STRIP_STYLE=all
|
||||||
|
- EXPORTED_SYMBOLS_FILE 指向空文件,收敛导出符号
|
||||||
|
- 动态库裁剪
|
||||||
|
- Build Settings:STRIP_STYLE=non-global
|
||||||
|
- 对三方库先裁剪再签名,避免破坏签名
|
||||||
|
```shell
|
||||||
|
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
|
||||||
|
APP_EXECUTABLE_NAME="$(echo $WRAPPER_NAME | cut -d '.' -f1)"
|
||||||
|
arch="$(lipo -info "$APP_PATH/$APP_EXECUTABLE_NAME")"
|
||||||
|
if ! echo "$arch" | grep -q "arm64"; then exit 0; fi
|
||||||
|
cd "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
||||||
|
framework_path=$(pwd)
|
||||||
|
for file in $(find . -type f -perm +111); do
|
||||||
|
if ! [[ "$(file "$file")" == *"dynamically linked shared library"* ]]; then continue; fi
|
||||||
|
extracted_file_path=$framework_path${file:1}
|
||||||
|
strip -x $extracted_file_path
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
收益:对安装包体积有直接缩减效果,通常在数 MB 至 10 MB 级别
|
||||||
|
|
||||||
|
### 3) 资源与三方库瘦身
|
||||||
|
|
||||||
|
原理:Frameworks 与资源包是 iOS 安装体积的核心来源,资源下沉与按需加载能有效降低首包。
|
||||||
|
|
||||||
|
实施步骤:
|
||||||
|
- 资源优化
|
||||||
|
- 图片统一走 Asset Catalog,开启压缩与优化
|
||||||
|
- 字体做子集化,仅保留实际用字
|
||||||
|
- 按需资源
|
||||||
|
- 低频资源拆分为 ODR 或在线资源包
|
||||||
|
- 首包仅保留核心路径资源
|
||||||
|
- 三方库瘦身
|
||||||
|
- 优先选择精简版 SDK 或模块化版本
|
||||||
|
- 低频 SDK 与资源做按需下载
|
||||||
|
|
||||||
|
结合当前分布可优先处理:
|
||||||
|
- 人脸/美颜 SDK(FURenderKit、FUAIKit、ai_face_processor_e51.bundle)
|
||||||
|
- 低频功能可改为按需下载,或将静态资源外置
|
||||||
|
- EngineAssets.bundle
|
||||||
|
- 低频 3D/引擎资源按需下载
|
||||||
|
- 音视频相关库(libavcodec、TXFFmpeg)
|
||||||
|
- 仅在视频/直播功能进入时加载,或者拆分成按需模块
|
||||||
|
|
||||||
|
### 4) 死代码与无用资源清理
|
||||||
|
|
||||||
|
原理:未被引用的符号与资源不会影响功能,但会增加二进制与资源体积。
|
||||||
|
|
||||||
|
实施步骤:
|
||||||
|
- DEAD_CODE_STRIP=YES(确保保持开启)
|
||||||
|
- 使用 LinkMap 定位未引用目标与静态库
|
||||||
|
- 清理未使用类、图片、bundle 与重复资源
|
||||||
|
|
||||||
|
## iOS 参考
|
||||||
|
[抖音品质建设 - iOS 安装包大小优化实践篇](https://www.cnblogs.com/fadaijun/p/14285852.html)
|
||||||
|
[iOS逆向实战--019:符号的剥离与恢复](https://www.jianshu.com/p/752d3f07884f)
|
||||||
|
|
||||||
|
## 优化优先级建议
|
||||||
|
|
||||||
|
- P0:Android 动态 SO + iOS 架构裁剪
|
||||||
|
- P1:两端资源压缩与 3D/AI 模型外置
|
||||||
|
- P2:符号表裁剪、死代码与无用资源清理
|
||||||
|
|
||||||
|
| 优化项 | 预期收益 | 技术风险 | 实施成本 | 优先级 |
|
||||||
|
| ------------- | ----- | ---- | ---- | --- |
|
||||||
|
| Android 动态 SO | ⭐⭐⭐⭐⭐ | 中 | 中 | P0 |
|
||||||
|
| iOS 架构裁剪 | ⭐⭐⭐ | 低 | 低 | P0 |
|
||||||
|
| 资源压缩 | ⭐⭐ | 低 | 低 | P1 |
|
||||||
|
| AI / 3D 外置 | ⭐⭐⭐⭐ | 中 | 中 | P1 |
|
||||||
|
| 符号裁剪 | ⭐⭐ | 中 | 低 | P2 |
|
||||||
BIN
App_Package_Size_Optimization/放心课App包大小分析.pdf
Normal file
BIN
App_Package_Size_Optimization/放心课App包大小分析.pdf
Normal file
Binary file not shown.
185
App_Performance_Optimization_Plan/OneApp性能与架构优化方案.md
Normal file
185
App_Performance_Optimization_Plan/OneApp性能与架构优化方案.md
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
# OneApp 性能与架构优化方案(2026)
|
||||||
|
|
||||||
|
## 1. 背景与范围
|
||||||
|
|
||||||
|
当前 OneApp 已经具备初步的性能与稳定性监控能力,但要达到“性能非常优异的 APP”仍存在明显差距。本方案聚焦以下范围:
|
||||||
|
|
||||||
|
- 性能与稳定性提升:监控基建完善、历史遗留问题清理、内存与资源使用优化
|
||||||
|
- 架构改造:在不“彻底动架构”的前提下,进一步强化模块化与解耦
|
||||||
|
- 基础库升级:Flutter/Android/iOS 三端基础库升级与治理
|
||||||
|
|
||||||
|
## 2. 现状与依赖基础
|
||||||
|
|
||||||
|
### 2.1 架构与模块化现状
|
||||||
|
|
||||||
|
当前项目采用分层架构与模块化体系,主结构已在架构文档中明确:[OneApp架构设计文档.md](../OneApp架构设计文档.md)。
|
||||||
|
|
||||||
|
关键现状:
|
||||||
|
- Flutter 业务模块与基础模块大量并行开发
|
||||||
|
- 模块化已经形成,但边界与依赖治理不足
|
||||||
|
|
||||||
|
### 2.2 监控与调试基础
|
||||||
|
|
||||||
|
现有监控/调试基础包括:
|
||||||
|
- 监控插件:`kit_app_monitor` [kit_app_monitor.md](../basic_utils/kit_app_monitor.md)
|
||||||
|
- 调试工具集:[debug_tools.md](../debug_tools.md)
|
||||||
|
- 业务侧的基础打点能力(如通用埋点管理)
|
||||||
|
|
||||||
|
这为性能监控基建升级提供了可复用的基础能力,但缺少统一指标体系、采样策略与跨平台一致性。
|
||||||
|
|
||||||
|
## 3. 总体目标与原则
|
||||||
|
|
||||||
|
### 3.1 目标
|
||||||
|
|
||||||
|
- 性能与稳定性体系化建设,形成可持续的“指标—监控—分析—治理”闭环
|
||||||
|
- 内存占用显著下降(基线先建立,按阶段目标下降)
|
||||||
|
- 模块化进一步强化,高内聚低耦合,支持独立演进与风险隔离
|
||||||
|
- 三端基础库升级并形成稳定的升级节奏
|
||||||
|
|
||||||
|
### 3.2 原则
|
||||||
|
|
||||||
|
- 保持当前架构主干稳定,不进行彻底重构
|
||||||
|
- 优先完善监控与治理基建,再做深度优化
|
||||||
|
- 以数据驱动优化,优先解决影响面最大的问题
|
||||||
|
- 形成可复制、可持续的治理流程
|
||||||
|
|
||||||
|
## 4. 监控与性能基建方案
|
||||||
|
|
||||||
|
### 4.1 监控指标体系
|
||||||
|
|
||||||
|
核心指标分层:
|
||||||
|
- 启动性能:冷启动、温启动、首帧、首交互
|
||||||
|
- 渲染性能:FPS、卡顿率、长帧占比、掉帧场景
|
||||||
|
- 内存:PSS、Dart Heap、Native Heap、峰值与稳定值
|
||||||
|
- 稳定性:Crash、ANR、卡死/黑屏、页面白屏
|
||||||
|
- 网络:请求耗时、失败率、弱网体验
|
||||||
|
- 资源:图片缓存命中率、磁盘占用、缓存淘汰
|
||||||
|
|
||||||
|
### 4.2 监控数据链路
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
采集与上报建议:
|
||||||
|
- 统一采样策略,避免过度采集影响性能
|
||||||
|
- 关键指标提供高频采样,非关键采用抽样
|
||||||
|
- 本地缓存与批量上报,降低网络开销
|
||||||
|
|
||||||
|
### 4.3 监控模块改造建议
|
||||||
|
|
||||||
|
基于 `kit_app_monitor` 能力进行扩展:
|
||||||
|
- 新增统一的指标定义与版本管理
|
||||||
|
- 引入跨平台一致的指标采集接口
|
||||||
|
- 为 Flutter 与原生提供统一的数据封装结构
|
||||||
|
|
||||||
|
## 5. 性能与稳定性治理策略
|
||||||
|
|
||||||
|
### 5.1 性能治理闭环
|
||||||
|
|
||||||
|
闭环流程:
|
||||||
|
1. 建立基线与指标阈值
|
||||||
|
2. 监控收集与告警
|
||||||
|
3. 问题定位与归因
|
||||||
|
4. 优化与验证
|
||||||
|
5. 回归监控与持续治理
|
||||||
|
|
||||||
|
### 5.2 重点治理方向
|
||||||
|
|
||||||
|
#### 5.2.1 内存优化
|
||||||
|
|
||||||
|
- 分模块基线统计:首屏、核心业务、长时运行
|
||||||
|
- 梳理大对象与泄漏风险:图像、列表、缓存、全局单例
|
||||||
|
- Dart/Native 双向跟踪,统一内存报警阈值
|
||||||
|
|
||||||
|
#### 5.2.2 图片缓存与资源治理
|
||||||
|
|
||||||
|
- 统一图片加载策略与缓存策略
|
||||||
|
- 高分辨率资源按需加载
|
||||||
|
- 关键页面图片预加载控制
|
||||||
|
|
||||||
|
#### 5.2.3 存储与缓存治理
|
||||||
|
|
||||||
|
- 缓存分层:内存、磁盘、远程
|
||||||
|
- 统一缓存淘汰策略与容量上限
|
||||||
|
- 热点数据与历史数据分层管理
|
||||||
|
|
||||||
|
#### 5.2.4 稳定性与异常治理
|
||||||
|
|
||||||
|
- Crash/ANR 建立统一分类与标签体系
|
||||||
|
- 高频问题建立专项治理清单
|
||||||
|
- 回归版本进行监控对比
|
||||||
|
|
||||||
|
## 6. 代码层面优化方向
|
||||||
|
|
||||||
|
### 6.1 Flutter 性能优化
|
||||||
|
|
||||||
|
- 减少无效 rebuild 与 state 更新范围
|
||||||
|
- 列表与复杂布局进行分片渲染
|
||||||
|
- 重度计算迁移到 Isolate
|
||||||
|
- 避免不必要的同步阻塞与大对象拷贝
|
||||||
|
|
||||||
|
### 6.2 原生侧优化
|
||||||
|
|
||||||
|
- Android:减少主线程阻塞,降低过度日志与 I/O
|
||||||
|
- iOS:优化对象生命周期与图像解码策略
|
||||||
|
|
||||||
|
## 7. 架构与模块化优化
|
||||||
|
|
||||||
|
### 7.1 模块边界与依赖治理
|
||||||
|
|
||||||
|
- 明确模块职责与可见边界
|
||||||
|
- 禁止跨层依赖与非必要双向依赖
|
||||||
|
- 建立模块依赖审计机制
|
||||||
|
|
||||||
|
### 7.2 模块自闭环策略
|
||||||
|
|
||||||
|
- 模块内部完成“接口-实现-测试”闭环
|
||||||
|
- 公共能力进入 `basic_*` 或 `kit_*` 模块
|
||||||
|
|
||||||
|
### 7.3 重点模块改造顺序
|
||||||
|
|
||||||
|
建议按业务影响与性能收益排序:
|
||||||
|
1. 核心启动链路
|
||||||
|
2. 高频访问模块(首页、车控、个人中心)
|
||||||
|
3. 资源密集模块(地图、图片、媒体)
|
||||||
|
|
||||||
|
## 8. 基础库升级策略
|
||||||
|
|
||||||
|
### 8.1 升级节奏
|
||||||
|
|
||||||
|
- 每季度做一次三端基础库统一升级
|
||||||
|
- 每次升级设置可回滚策略
|
||||||
|
|
||||||
|
### 8.2 升级优先级
|
||||||
|
|
||||||
|
- Flutter SDK 与关键依赖(状态管理、路由、网络)
|
||||||
|
- Android/iOS 原生 SDK 与重要三方库
|
||||||
|
|
||||||
|
## 9. 里程碑与交付物
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 9.1 阶段目标
|
||||||
|
|
||||||
|
- 阶段 1:完成指标基线与监控链路统一
|
||||||
|
- 阶段 2:完成核心模块性能专项优化
|
||||||
|
- 阶段 3:完成模块化治理与基础库升级闭环
|
||||||
|
|
||||||
|
### 9.2 交付物
|
||||||
|
|
||||||
|
- 性能指标基线报告
|
||||||
|
- 性能与稳定性监控平台规范
|
||||||
|
- 优化专项清单与治理结果
|
||||||
|
- 模块化治理与依赖关系报告
|
||||||
|
|
||||||
|
## 10. 适配与扩展
|
||||||
|
|
||||||
|
在 Android 与 iOS 基础上,新增鸿蒙平台接入时:
|
||||||
|
- 复用监控指标体系
|
||||||
|
- 接入统一的监控链路与数据规范
|
||||||
|
- 与原有平台保持指标可对齐
|
||||||
|
|
||||||
|
## 11. 关联文档
|
||||||
|
|
||||||
|
- [OneApp架构设计文档.md](../OneApp架构设计文档.md)
|
||||||
|
- [kit_app_monitor.md](../basic_utils/kit_app_monitor.md)
|
||||||
|
- [debug_tools.md](../debug_tools.md)
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="980" height="360" viewBox="0 0 980 360">
|
||||||
|
<rect x="20" y="20" width="940" height="320" rx="12" fill="#f6f8fa" stroke="#d0d7de"/>
|
||||||
|
<text x="40" y="55" font-size="20" font-family="Arial" fill="#24292f">性能与稳定性监控链路</text>
|
||||||
|
|
||||||
|
<rect x="60" y="90" width="220" height="70" rx="10" fill="#ffffff" stroke="#8c959f"/>
|
||||||
|
<text x="80" y="130" font-size="14" font-family="Arial" fill="#24292f">Flutter 指标采集</text>
|
||||||
|
<text x="80" y="150" font-size="12" font-family="Arial" fill="#57606a">FPS / 内存 / 启动</text>
|
||||||
|
|
||||||
|
<rect x="320" y="90" width="220" height="70" rx="10" fill="#ffffff" stroke="#8c959f"/>
|
||||||
|
<text x="340" y="130" font-size="14" font-family="Arial" fill="#24292f">原生指标采集</text>
|
||||||
|
<text x="340" y="150" font-size="12" font-family="Arial" fill="#57606a">Crash / ANR / IO</text>
|
||||||
|
|
||||||
|
<rect x="580" y="90" width="320" height="70" rx="10" fill="#ffffff" stroke="#8c959f"/>
|
||||||
|
<text x="600" y="125" font-size="14" font-family="Arial" fill="#24292f">本地缓冲 + 采样 + 过滤</text>
|
||||||
|
<text x="600" y="145" font-size="12" font-family="Arial" fill="#57606a">分级采样 / 批量上报</text>
|
||||||
|
|
||||||
|
<rect x="60" y="210" width="260" height="70" rx="10" fill="#ffffff" stroke="#8c959f"/>
|
||||||
|
<text x="80" y="250" font-size="14" font-family="Arial" fill="#24292f">统一指标封装</text>
|
||||||
|
<text x="80" y="270" font-size="12" font-family="Arial" fill="#57606a">跨平台一致结构</text>
|
||||||
|
|
||||||
|
<rect x="360" y="210" width="260" height="70" rx="10" fill="#ffffff" stroke="#8c959f"/>
|
||||||
|
<text x="380" y="250" font-size="14" font-family="Arial" fill="#24292f">上报服务</text>
|
||||||
|
<text x="380" y="270" font-size="12" font-family="Arial" fill="#57606a">批量 / 弱网 / 重试</text>
|
||||||
|
|
||||||
|
<rect x="660" y="210" width="240" height="70" rx="10" fill="#ffffff" stroke="#8c959f"/>
|
||||||
|
<text x="680" y="250" font-size="14" font-family="Arial" fill="#24292f">指标分析平台</text>
|
||||||
|
<text x="680" y="270" font-size="12" font-family="Arial" fill="#57606a">告警 / 报表 / 归因</text>
|
||||||
|
|
||||||
|
<line x1="280" y1="125" x2="320" y2="125" stroke="#57606a" stroke-width="2"/>
|
||||||
|
<line x1="540" y1="125" x2="580" y2="125" stroke="#57606a" stroke-width="2"/>
|
||||||
|
<line x1="200" y1="160" x2="200" y2="210" stroke="#57606a" stroke-width="2"/>
|
||||||
|
<line x1="450" y1="160" x2="450" y2="210" stroke="#57606a" stroke-width="2"/>
|
||||||
|
<line x1="620" y1="245" x2="660" y2="245" stroke="#57606a" stroke-width="2"/>
|
||||||
|
<line x1="320" y1="245" x2="360" y2="245" stroke="#57606a" stroke-width="2"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,24 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="980" height="320" viewBox="0 0 980 320">
|
||||||
|
<rect x="20" y="20" width="940" height="280" rx="12" fill="#f6f8fa" stroke="#d0d7de"/>
|
||||||
|
<text x="40" y="55" font-size="20" font-family="Arial" fill="#24292f">阶段路线图</text>
|
||||||
|
|
||||||
|
<line x1="80" y1="120" x2="900" y2="120" stroke="#57606a" stroke-width="2"/>
|
||||||
|
<circle cx="120" cy="120" r="10" fill="#2da44e"/>
|
||||||
|
<circle cx="420" cy="120" r="10" fill="#bf8700"/>
|
||||||
|
<circle cx="720" cy="120" r="10" fill="#0969da"/>
|
||||||
|
|
||||||
|
<rect x="80" y="150" width="240" height="90" rx="10" fill="#ffffff" stroke="#8c959f"/>
|
||||||
|
<text x="100" y="180" font-size="14" font-family="Arial" fill="#24292f">阶段 1:监控基线</text>
|
||||||
|
<text x="100" y="200" font-size="12" font-family="Arial" fill="#57606a">指标体系 / 采样 / 上报</text>
|
||||||
|
<text x="100" y="220" font-size="12" font-family="Arial" fill="#57606a">建立性能基线</text>
|
||||||
|
|
||||||
|
<rect x="360" y="150" width="240" height="90" rx="10" fill="#ffffff" stroke="#8c959f"/>
|
||||||
|
<text x="380" y="180" font-size="14" font-family="Arial" fill="#24292f">阶段 2:专项优化</text>
|
||||||
|
<text x="380" y="200" font-size="12" font-family="Arial" fill="#57606a">内存 / 启动 / 页面性能</text>
|
||||||
|
<text x="380" y="220" font-size="12" font-family="Arial" fill="#57606a">核心模块治理</text>
|
||||||
|
|
||||||
|
<rect x="640" y="150" width="240" height="90" rx="10" fill="#ffffff" stroke="#8c959f"/>
|
||||||
|
<text x="660" y="180" font-size="14" font-family="Arial" fill="#24292f">阶段 3:架构治理</text>
|
||||||
|
<text x="660" y="200" font-size="12" font-family="Arial" fill="#57606a">模块化 / 依赖治理</text>
|
||||||
|
<text x="660" y="220" font-size="12" font-family="Arial" fill="#57606a">基础库升级闭环</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -34,7 +34,7 @@ pip install mkdocs-material
|
|||||||
- **[主应用架构](main_app.md)** - 主应用的详细架构说明
|
- **[主应用架构](main_app.md)** - 主应用的详细架构说明
|
||||||
- **[调试工具](debug_tools.md)** - 开发调试工具使用指南
|
- **[调试工具](debug_tools.md)** - 开发调试工具使用指南
|
||||||
|
|
||||||
<!-- ### 📱 功能模块
|
### 📱 功能模块
|
||||||
|
|
||||||
根据OneApp架构设计,系统分为应用层(APP)和服务层(CLR)两大部分:
|
根据OneApp架构设计,系统分为应用层(APP)和服务层(CLR)两大部分:
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ pip install mkdocs-material
|
|||||||
- **[社区功能](community/README.md)** - 用户社区和交互功能
|
- **[社区功能](community/README.md)** - 用户社区和交互功能
|
||||||
- **[会员服务](membership/README.md)** - 会员权益和管理系统
|
- **[会员服务](membership/README.md)** - 会员权益和管理系统
|
||||||
- **[设置功能](setting/README.md)** - 应用配置和个人设置
|
- **[设置功能](setting/README.md)** - 应用配置和个人设置
|
||||||
- **[触点模块](touch_point/README.md)** - 用户接触点管理 -->
|
- **[触点模块](touch_point/README.md)** - 用户接触点管理
|
||||||
|
|
||||||
## 📁 项目结构
|
## 📁 项目结构
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user