敏捷冲刺日志 - Day 6
站立会议
站立时会议改为线上进行。
-
昨天已完成的工作:
- 编写了兼容 Android 10 和 Android 11+ 的文件删除逻辑。
- 测试发现 Android 10 的
RecoverableSecurityException方案不稳定。
-
今天计划完成的工作:
- 唯一任务:对“替换”功能的闪退问题进行最终的技术攻关。
- 深入研究 Android 10 上
RecoverableSecurityException未被稳定触发的原因。 - 尝试寻找替代方案,或者确定该问题是否为当前技术栈下无法完美解决的系统级限制。
- 根据攻关结果,为下一步行动(继续修复或放弃功能)提供明确的技术决策依据。
-
工作中遇到的困难:
- 经过一整天的深度调研和在不同模拟器、真机上的测试,我们发现“替换”闪退的根源在于:对于用户通过
ACTION_GET_CONTENT选择的媒体文件,应用在 Android 10 上几乎没有可靠的方法来获得永久性的删除权限。RecoverableSecurityException的触发条件非常苛刻,无法作为通用的解决方案。 - 这意味着,要完美地实现“替换”(即静默删除原始文件)这个功能,在部分系统版本上几乎是不可能的。任何尝试都可能带来新的兼容性问题和不稳定的用户体验。这是一个重大的技术壁垒。
- 经过一整天的深度调研和在不同模拟器、真机上的测试,我们发现“替换”闪退的根源在于:对于用户通过
项目燃尽图

代码/文档签入记录
- 代码签入:
refactor(replace): Final investigation and documented failure of RecoverableSecurityException - 签入记录对应的Issue内容与链接:
- Issue:
#BUG-001 - “替换”功能闪退 - 链接:
[链接到内部工单系统]
- Issue:
- Code Review: 无代码变更,主要是调研结论和文档更新。
最新模块的代码
今天没有产生新的有效代码,因为主要工作是验证和否决之前的方案。以下是昨天编写但被证明不可靠的逻辑部分,作为记录。
// ... 此部分逻辑在 Android 10 上被证明不可靠 ...
} else { // Android 10 (Q) 及以下uris.forEach { uri ->try {contentResolver.delete(uri, null, null)} catch (e: SecurityException) {// 在 Android 10,我们期望能捕获 RecoverableSecurityExceptionif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && e is RecoverableSecurityException) {// ... 但测试表明,这个分支的进入条件非常不稳定 ...val intentSender = e.userAction.actionIntent.intentSenderval request = IntentSenderRequest.Builder(intentSender).build()deleteRequestLauncher.launch(request)}}}
}
运行结果的截图

每日每人总结
- 刘瑞康 (开发): 整理了完整的测试报告,汇总了在不同设备和系统版本下的行为差异、官方文档说明及社区讨论,为最终技术决策提供了充分证据。
- 刘泽昊 (开发): 快速创建了一个新分支,移除了“替换”相关的 UI 元素并演示了简化后的用户流程,帮助团队直观评估功能移除后的产品体验。
- 伊尔番 (PM): 组织了专项决策会议,基于开发团队提供的技术分析,一致同意移除“替换”功能。已向用户清晰传达原因,并提出以增强“分享”功能作为补偿,获得理解。