敏捷冲刺日志 - Day 6

敏捷冲刺日志 - Day 6

站立会议

站立时会议改为线上进行。

  • 昨天已完成的工作:

    • 编写了兼容 Android 10 和 Android 11+ 的文件删除逻辑。
    • 测试发现 Android 10 的 RecoverableSecurityException 方案不稳定。
  • 今天计划完成的工作:

    • 唯一任务:对“替换”功能的闪退问题进行最终的技术攻关。
    • 深入研究 Android 10 上 RecoverableSecurityException 未被稳定触发的原因。
    • 尝试寻找替代方案,或者确定该问题是否为当前技术栈下无法完美解决的系统级限制。
    • 根据攻关结果,为下一步行动(继续修复或放弃功能)提供明确的技术决策依据。
  • 工作中遇到的困难:

    • 经过一整天的深度调研和在不同模拟器、真机上的测试,我们发现“替换”闪退的根源在于:对于用户通过 ACTION_GET_CONTENT 选择的媒体文件,应用在 Android 10 上几乎没有可靠的方法来获得永久性的删除权限。RecoverableSecurityException 的触发条件非常苛刻,无法作为通用的解决方案。
    • 这意味着,要完美地实现“替换”(即静默删除原始文件)这个功能,在部分系统版本上几乎是不可能的。任何尝试都可能带来新的兼容性问题和不稳定的用户体验。这是一个重大的技术壁垒。

项目燃尽图

8980f01e69be6f137b7c666807e043f5

代码/文档签入记录

  • 代码签入: refactor(replace): Final investigation and documented failure of RecoverableSecurityException
  • 签入记录对应的Issue内容与链接:
    • Issue: #BUG-001 - “替换”功能闪退
    • 链接: [链接到内部工单系统]
  • Code Review: 无代码变更,主要是调研结论和文档更新。

最新模块的代码

今天没有产生新的有效代码,因为主要工作是验证和否决之前的方案。以下是昨天编写但被证明不可靠的逻辑部分,作为记录。

// ... 此部分逻辑在 Android 10 上被证明不可靠 ...
} else { // Android 10 (Q) 及以下
    uris.forEach { uri ->
        try {
            contentResolver.delete(uri, null, null)
        } catch (e: SecurityException) {
            // 在 Android 10,我们期望能捕获 RecoverableSecurityException
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && e is RecoverableSecurityException) {
                // ... 但测试表明,这个分支的进入条件非常不稳定 ...
                val intentSender = e.userAction.actionIntent.intentSender
                val request = IntentSenderRequest.Builder(intentSender).build()
                deleteRequestLauncher.launch(request)
            }
        }
    }
}

运行结果的截图

a562fd67917054f230cb5438b92d3a4c

每日每人总结

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