Skip to content

Releases: th2006464/ShadowSleuth

v1.3.3 - dHash 内存修复 + 搜索页 UI 优化

Choose a tag to compare

@th2006464 th2006464 released this 25 Jun 09:23

v1.3.3 更新内容

修复

  • dHash 大量图片崩溃:15000 张照片 dHash 扫描完成后崩溃(OOM)
    • 重写 findDuplicatesByDHashBatched,去掉候选对预存储(旧版 ~1GB → OOM)
    • 改为流式比较:遍历每张图时从桶索引临时捞候选 → 立即比较 → 丢弃
    • 内存占用从 ~1GB 降至 ~10MB

优化

  • computeBatch 并发数 16→8,Bitmap 解码用 RGB_565(内存减半)
  • ScanState 合并逻辑简化,避免大列表双重遍历
  • 搜索页 dHash 按钮缩小并移至样本图片右上角,更简洁美观

v1.3.2

Choose a tag to compare

@th2006464 th2006464 released this 24 Jun 13:01

v1.3.2 - 两个优化

优化

  • 过滤 0x0 像素图片:dHash 搜索结果中不再显示宽高为0的无效图片
  • 同时间+同大小排除:时间戳和文件大小都一致的图片(大概率是同一份文件被系统重复索引),不做 dHash 匹配,避免重复显示

v1.3.1

Choose a tag to compare

@th2006464 th2006464 released this 24 Jun 12:57

v1.3.1 - 3 个 Bug 修复

修复

  • 底部导航栏 Scan 按钮无法返回扫描页:从 Results 页点击 Scan 按钮时改用 popBackStack() 回退,返回到 Scan 页面
  • dHash 搜索选取图片报错:系统相册选取的图片宽高未知时,增加 computeFast 兜底计算 + URI 匹配已有缓存
  • 同时间戳图片被 dHash 排除:dHash 内容匹配不再受 allSameSaveTime 限制,不同路径内容相同的图片正确识别

v1.3.0

Choose a tag to compare

@th2006464 th2006464 released this 24 Jun 12:40

v1.3.0 - dHash 分桶索引性能优化

重大性能提升

15000 张照片的 dHash 扫描从"卡死"变为"秒级完成":

  • 分桶索引算法: 将 64-bit hash 拆为 8x8-bit 多级索引,
    候选比较次数从 O(n^2) 约1.12亿降至约50万次, 速度提升约200倍
  • 消除双重 openInputStream: 复用 MediaStore 已知宽高,
    节省15000次跨进程文件打开
  • 并发控制: 信号量限制同时解码数(默认16), 避免 OOM
  • 不阻塞主线程: 分桶+汉明距离比较在 Dispatchers.Default 运行
  • 支持取消: 定期 yield(), 用户可随时中断扫描

其他改进

  • 批量计算 computeBatch() 使用结构化并发
  • 协程取消时优雅退出, 不误报错误
  • 默认并发上限16(平衡速度与内存)

v1.2.4 - 扫描结果页面也添加序号显示

Choose a tag to compare

@th2006464 th2006464 released this 24 Jun 06:08

v1.2.4 - 扫描结果页面也添加序号显示

🐛 修复

  • 扫描结果页面也显示序号:如 1/30 表示 30 个结果中的第 1 个
  • 之前只在搜索结果页面有序号,现在两个页面都一致了

📝 变更

  • ResultsScreen.kt:改用 itemsIndexed,传递 index/total 参数
  • 更新版本号至 1.2.4(versionCode 15)

下载后请在手机上允许「安装未知应用」权限。

v1.2.3 - 移除滚动条,改用序号显示

Choose a tag to compare

@th2006464 th2006464 released this 24 Jun 06:00

v1.2.3 - 移除滚动条,改用序号显示

🐛 修复

  • 移除搜索结果页面的滚动条:原实现有 bug,滚动时滚动条不更新
  • 改用序号显示进度:如 1/30 表示 30 个结果中的第 1 个

📝 变更

  • SearchScreen.kt:移除滚动条代码,改用 itemsIndexed
  • DuplicateGroupCard.kt:添加 index/total 参数,标题前显示序号
  • 更新版本号至 1.2.3(versionCode 14)

下载后请在手机上允许「安装未知应用」权限。

v1.2.2 - 滚动条修复 + dHash 优化 + 删除权限二次确认

Choose a tag to compare

@th2006464 th2006464 released this 24 Jun 05:27

v1.2.2 - 滚动条修复 + dHash 性能优化 + 删除权限二次确认

🐛 修复

  • 修复搜索结果页面滚动条不显示的问题:改用 Canvas 绝对定位实现滚动条,确保可见
  • 修复导航按钮失效:替换已弃用的 findStartDestination() API,改用 route 字符串

⚡ 优化

  • dHash 计算性能大幅提升:新增 computeFast() 方法,使用 inSampleSize 直接加载缩小图,速度提升 5-10 倍
  • 并行计算 dHash:使用 Kotlin 协程并行处理,15000 张照片扫描时间从 10-15 分钟降至 1-3 分钟
  • 复用 dHash 缓存:点击 dHash 搜索时优先使用已计算的缓存,避免重复计算

🔒 安全增强

  • 删除权限改为可选开关(默认关闭):使用 DataStore 持久化用户选择
  • 自定义二次确认弹窗:删除操作使用与 APP 风格一致的 SsDialog,不再使用系统弹窗
  • 移除 MANAGE_EXTERNAL_STORAGE 自动请求:改为用户可选手动授权,保护隐私

📝 其他

  • 更新关于页面字符串资源
  • 新增 AppPreferences.kt 管理 DataStore 偏好设置
  • 版本号升级至 1.2.2(versionCode 13)

下载后请在手机上允许「安装未知应用」权限。

v1.2.1-debug

v1.2.1-debug Pre-release
Pre-release

Choose a tag to compare

@th2006464 th2006464 released this 24 Jun 04:02

v1.2.1-debug — Bug 修复

dHash 标签

  • dHash 结果组标题改为显示 dHash 值(如 dHash: 3A2BC4D5...),而非文件名
  • DuplicateGroup 新增 dHashValue 字段

搜索页滚动条

  • 搜索结果列表右侧新增滚动进度条,直观了解滚动位置

dHash 缓存复用

  • 搜索样本图片时优先从现有缓存读取 dHash,避免重复计算
  • 缓存容量和创建时间同步更新

底部导航修复

  • 修复扫描按钮在结果页下滑后无反应的导航问题

v1.2.0-debug

v1.2.0-debug Pre-release
Pre-release

Choose a tag to compare

@th2006464 th2006464 released this 24 Jun 03:38

v1.2.0-debug — UI 改进

筛选按钮改名

  • 结果页 FilterChip「文件名相同」→「名称相同」
  • 结果页 FilterChip「文件大小相同」→「容量相同」
  • 匹配组副标题同步更新

搜索页滚动条

  • 搜索结果列表右侧新增半透明滚动进度条
  • 直观了解当前滚动位置

dHash 缓存详情

  • 关于页显示缓存占用容量(自动格式化为 B/KB/MB)
  • 显示上次缓存创建时间

搜索样本图缩小

  • 搜索页右下角样本图片从 140dp 缩小到 88dp

Bug 修复

  • SsComponents.kt 中 ripple() → rememberRipple() 编译错误

v1.1.0-debug: 更新 Logo 图标 + dHash 缓存管理

Choose a tag to compare

@th2006464 th2006464 released this 24 Jun 03:05

v1.1.0-debug

新增功能

  • 更换 App 图标:使用新 Logo,去除白色圆角背景,保留核心图像内容
  • dHash 缓存管理:右上角「关于」弹窗新增缓存信息卡片,显示已缓存图片数量及内存占用估算
  • 清空缓存按钮:支持一键清空 dHash 哈希缓存,清空后可重新触发 dHash 扫描

说明

  • dHash 缓存(Map<Long, Long>)存于内存,每张图约 8 字节,1000 张约 8KB
  • 清空缓存后,再次点击「dHash 相似扫描」将重新计算所有图片哈希

版本

  • versionCode: 10 / versionName: 1.1.0