23 lines
3.9 KiB
Markdown
23 lines
3.9 KiB
Markdown
# 教训
|
||
|
||
- 中:本地目录原先没有 `.git`,不能直接 `pull`;应先获取远端历史,以共同基线做三方合并。
|
||
- 中:合并后需编译检查跨文件 API;本次发现并修复资源别名、Backdrop 导入及底部导航 `mainTabs` 缺失问题。
|
||
- 低:远端 URL 不保留账号密码,认证信息只用于本次读取。
|
||
- 高:Kyant0 Backdrop 的 `layerBackdrop` 捕获范围内不能再直接绘制使用同一 backdrop 的玻璃控件,否则可能形成循环渲染并在 RenderThread 触发 SIGSEGV;页面源层与玻璃控件必须分离,视频源层只包 AndroidView。
|
||
- 中:远端提交与本地大范围未提交 UI 改动并行时,先暂存本地改动、合并远端非冲突文件,再恢复本地改动并手动吸收远端业务行为,避免整文件覆盖。
|
||
- 高:Backdrop 的来源层与消费玻璃必须是同级兄弟层;菜单外部手势层也必须位于菜单内容下方,否则打开手势会误触发关闭。
|
||
- 中:Backdrop 的玻璃效果是否明显取决于来源内容;纯白卡片上无法显示明显折射,需依靠仓库的高光、阴影和 lens 边缘表现,不能用普通白色背景冒充。
|
||
- 高:Root Overlay 若直接消费外层页面 `layerBackdrop`,外层 source 会把 Overlay 再捕获形成 RenderNode 循环;必须为局部页面建立只包裹底层内容的 source,并让 Overlay 作为兄弟 consumer。
|
||
- 高:Room 实体由 Java 可空字段映射时,迁移列定义必须与 Room 的 `notNull` 预期一致;新增 `protocol` 使用可空列并在模型读取时回退 HTTPS,否则旧数据库启动会因迁移校验失败崩溃。
|
||
- 低:Compose 非 Composable 回调中不能直接调用 `stringResource`;需在 Composable 作用域先缓存文案,再传入回调。
|
||
- 低:全量 `lintDebug` 在当前环境分析阶段长时间无输出且无报告;最终以 `assembleDebug`、`git diff --check`、资源键和关键残留静态检查收尾。
|
||
- 高:本地 AndroidLiquidGlass-kmp 的 `lens` 和高光默认样式会创建 Android 13 AGSL RuntimeShader;出现 RenderThread SIGSEGV 时不能只改 Kotlin 异常处理,应移除 RuntimeShader/折射链并以 Backdrop blur、vibrancy、Plain highlight 和 Compose 渐变降级。
|
||
- 高:根 `layerBackdrop` 不应包住播放器等原生 View;子页面应避免把同一个 source 同时作为父捕获层和子消费层,否则即使没有 AGSL 也可能形成 RenderNode 循环。
|
||
- 高:Android Emulator 的 Kyant RenderEffect/GraphicsLayer 采样可能直接在 RenderThread 触发 SIGSEGV,Kotlin 异常无法兜底;应按运行环境在进入 `drawBackdrop`/`layerBackdrop` 前降级,且播放器永不捕获 AndroidView。
|
||
- 高:仅跳过 `drawBackdrop` 仍可能提前创建 `rememberGraphicsLayer`;Backdrop 来源应在不安全设备上直接返回 `null`,源层和消费层都不能挂载。
|
||
- 高:模拟器不一定使用标准 `sdk_gphone` 指纹,RenderThread 防护还应检查 x86 ABI、board 和 `emu` 设备名;详情页绘制回调中的 Compose 状态也必须提前快照。
|
||
- 中:Emby 播放回报必须沿用 PlaybackInfo 返回的 `PlaySessionId`/`MediaSourceId`,并将开始、进度、停止事件串行化;把回报协程绑定到播放器 Composable 生命周期会在返回页面时丢失停止事件。
|
||
- 高:液态玻璃不能以“API 版本高”作为唯一启用条件;Kyant Backdrop 还需通过设备安全门和运行帧率门控,低帧率/不安全 GPU 必须在创建 LayerBackdrop 前降级,避免 RenderThread 崩溃。
|
||
- 高:玻璃模式已改为用户手动选择,不能再用 Choreographer 帧率变化自动切换;但模拟器/低版本仍必须在创建 Kyant LayerBackdrop 前保留硬件安全门,避免 RenderThread SIGSEGV。
|
||
- 中:降级玻璃的边缘高光应在 `drawContent()` 之前绘制;否则公共玻璃容器中的文字和图标会被高光层洗白。
|