4.7 KiB
4.7 KiB
教训
- 中:本地目录原先没有
.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()之前绘制;否则公共玻璃容器中的文字和图标会被高光层洗白。 - 高:用户明确要求真实液态玻璃时,不能继续保留设备/模拟器安全门;当前仅保留 API 31+ 能力判断,底栏原生 Backdrop 必须先绘制容器与选中胶囊,再绘制清晰图标/文字,避免内容被二次采样覆盖。该取舍需在实体机 GPU 上继续验证 RenderThread 稳定性。
- 中:玻璃模式是全局 Compose 状态;涉及
rememberLayerBackdrop或玻璃规格的缓存必须把AppTheme.glassMode纳入重建边界,否则设置副标题会变但材质不变。 - 低:清理页面遗留实现前必须用全仓库引用检索确认;私有且无调用的旧 UI 可以删除,活动页面保留原数据/弹窗实现。
- 低:
BasicTextField的decorationBox无论是否为空都必须调用inner();占位文案应与真实输入内容叠放,否则会破坏焦点和光标绘制。