SD Maid 2/SE
简体中文

此翻译可能已过时。 阅读英文版

设置 SD Maid SE

关于 SD Maid SE 各个设置步骤的说明。

SD Maid 会根据可用的访问权限进行调整。虽然所有权限都是可选的,但如果您不授予任何权限,大多数功能都将无法工作。完成所有设置项后,SD Maid 的表现才会最好。

如果有 root 或 ADB 访问权限,SD Maid 会自动尝试完成部分设置步骤。

有些权限相互重叠,或者一个是另一个的超集,例如您可以同时授予 SD Maid root 权限和 ADB 访问权限。对于任何操作,SD Maid 总是会尝试使用最佳的访问方式;如果失败,则改用次佳的访问方式重试,然后是第三佳的,依此类推。授予 SD Maid 相互重叠的权限可以提高可靠性。

提示:下面的一些设置步骤需要运行 ADB 命令。如果您的电脑上没有配置 ADB,可以使用 Web ADB Helper 直接在浏览器中运行这些命令。

管理存储

“管理存储”权限是一项范围很广的存储访问权限。

使用情况

使用情况(Usage statistics)权限可让 SD Maid 获取应用的数据和缓存大小,以及应用是否正在运行或上次使用的时间。

存储访问框架

SD Maid 使用 Android 存储访问框架(SAF)来获取对更多存储区域的访问权限。对于仅凭“管理存储”权限无法访问的特定路径,SD Maid 会请您授予访问权限(Android 就是这样™️)。

重复此过程,直到所有路径都变为绿色。

SAF:故障排除

适用于事情没有按计划进行的情况。

SAF:Android/data|obb 访问权限

在 Android 11 和 Android 12 上,使用较新版本的系统文件应用(com.google.android.documentsui)无法授予对 Android/data|obb 的访问权限。如果已安装的文件应用的目标版本为 Android 14(API 级别 34)或更高,SD Maid 就会隐藏针对这些路径的 SAF 访问请求(与 Android 13+ 上一样)。

Google Play 通过 Google Play 系统更新服务来更新文件应用。Android 12 系统自带的原始“文件”应用(针对 API 级别 31 构建,例如 aml_doc_310851020 (310851020))允许 SD Maid 在 Android/Data 上打开 SAF 路径选择窗口,而最新的“文件”应用(针对 API 级别 34 或更高版本构建,例如 14-10492947 (340916000))会阻止这样做。

解决方法:

您可以卸载文件应用的更新,然后再设置 SD Maid。之后再次更新文件应用,不会破坏已经授予的权限。

或者

您也可以使用 Web ADB Helper 运行此命令。

adb uninstall com.google.android.documentsui

SAF:OPEN_DOCUMENT_TREE ActivityNotFoundException

通过存储访问框架授予路径访问权限,需要一个能让用户确认要授予访问权限的路径的应用。这个应用就是“Documents”(文档)应用。它是自 Android 5.0 起内置于每台 Android 设备中的系统应用(com.android.documentsui 或 com.google.android.documentsui)。如果您遇到此错误,说明有人删除或停用了这个应用。大多数情况下,是有人运行了一个过于激进的“精简”(de-bloating)工具,把它停用了。您可以通过 ADB 重新启用它:

您也可以使用 Web ADB Helper 运行这些命令。

adb shell pm enable com.android.documentsui
or
adb shell pm enable com.google.android.documentsui

SAF:窗口为空

如果用于授予路径访问权限的窗口是空的,那么可能是您的外部存储提供程序软件包(com.android.externalstorage)被停用了(很可能是被过于激进的“精简”工具停用的)。您可以通过 ADB 重新启用它:

您也可以使用 Web ADB Helper 运行此命令。

adb shell pm enable com.android.externalstorage

再次运行 Google Play 系统更新即可恢复该更新。您也可以从 APKMirror.com 手动下载更新后的版本。

通知

如果没有此权限,SD Maid 将无法发布通知。在某些 ROM 上,这可能会降低后台执行时的可靠性。

应用列表

SD Maid 需要 QUERY_ALL_PACKAGES 权限来检查您的设备上安装了哪些应用(即“查看已安装应用的清单”)。另请参阅“使用情况权限”

以下功能必须具备 QUERY_ALL_PACKAGES 权限:

此权限自 Android 11 起就已存在,通常默认授予。自 Android 14 起,有些设备(例如 #1015、#1354)不会默认授予此权限,或者该权限可能被撤销。

无效的应用列表

在某些设备上,“应用列表”权限(QUERY_ALL_PACKAGES / GET_INSTALLED_APPS)已经授予,但系统仍然返回不完整的已安装应用列表,例如缺少 android 等核心系统软件包的列表。SD Maid 检测到这种情况时,会在设置卡片中显示“无效的应用列表”警告和“可能的设备限制”提示,而不是继续进行。

SD Maid 是有意在这里停下的:如果它看不到完整的已安装应用列表,就无法可靠地判断哪些文件属于仍然安装着的应用。如果强行继续,可能会删除属于某个 SD Maid 只是没能看到的应用的数据,因此在获得完整列表之前,与应用相关的功能会一直保持停用。

您可以尝试:

如果“应用列表”权限已经允许,但列表仍被报告为无效,这通常是设备限制,而不是您能修复的问题:有些系统(例如 HarmonyOS,或经过大量修改的 Android 版本)从不向第三方应用提供完整的应用列表。示例请参阅 #2441。

在这种情况下,与应用相关的工具(卸载残留、应用清理、应用控制)会保持停用以保护您的数据,但存储分析器仍然可以工作:它会显示您的存储空间使用了多少,只是细节较少:文件夹大小以只读方式显示,且无法归属到单个应用。

无障碍服务

无障碍服务允许 SD Maid 像人一样与您的设备交互,即查看屏幕和点按按钮。SD Maid 可以用它来自动执行繁琐的操作,例如在数百个应用上点按“清除缓存”。无障碍服务是一种应用自身无法启动的服务,必须由系统启动,因为这类服务会授予应用对您设备的额外访问权限。

ACS:故障排除

在多种情况下,该服务可能会停止运行,需要您重新启用:

ACS:服务已停用

某些 ROM(例如 MIUI)因会激进地停止所有未被设备厂商列入白名单的东西而臭名昭著。 如果系统不断要求您重新启用无障碍服务,那么可能是每当 SD Maid 不在活跃使用时,系统就会将其停用。

请尝试停用电池优化;在 MIUI ROM 上还有一个名为“Autostart”(自启动)的额外设置,请为 SD Maid 启用它。对于小米/POCO/红米设备:

您也可以考虑授予额外的权限,以允许 SD Maid 自动重新启动该服务。

ACS:被手机管家阻止(一加、OPPO、realme)

在 OxygenOS 和 ColorOS 上,预装的“Phone Manager”(手机管家)应用可能会自行关闭无障碍服务,通常是在清理完成后一秒钟之内。之后 Android 的无障碍开关确实处于关闭状态,所以看起来就像 SD Maid 在运行中途停止了工作。

请在 Phone Manager>Utilities>Block suspicious app activities(手机管家>实用工具>拦截可疑应用行为)中关闭此功能。

同一界面中会保留一份它拦截过的记录列表。如果其中标记为“Abnormal device control”(异常设备控制)的条目时间与您运行清理的时间吻合,就可以确认这就是原因。旁边的“Blocking alerts”(拦截提醒)开关只控制您是否会收到通知,因此在关闭提醒的情况下,这一切都会悄无声息地发生。

ACS:通过 ADB 启用

如果您的设备无法通过屏幕启用无障碍服务(例如电视设备),可以通过 ADB 运行以下命令来启用该服务:

您也可以使用 Web ADB Helper 运行此命令。

adb shell settings put secure enabled_accessibility_services eu.darken.sdmse/.automation.core.AutomationService

ACS:自动重启服务

注意:这是一项高级技巧,面向高级用户。

您可以授予一项额外的权限,让 SD Maid 能够自行重新启动该服务。 该权限名为 WRITE_SECURE_SETTINGS,只能通过 ADB 授予。 如果您已经配置好 ADB,请运行以下命令来授予该权限:

您也可以使用 Web ADB Helper 运行此命令。

adb shell pm grant eu.darken.sdmse android.permission.WRITE_SECURE_SETTINGS

授予此权限后,SD Maid 可以在必要时使用此处所述的命令来启用该服务。 只有在您至少手动启用过一次无障碍服务后,SD Maid 才会使用此方法。 如果您再次进入设置并告诉 SD Maid 不要使用无障碍服务,那么在您再次手动启用无障碍服务之前,将不会使用这种自动重启技巧。

要再次从 SD Maid 移除此权限,请使用以下命令:

您也可以使用 Web ADB Helper 运行此命令。

adb shell pm revoke eu.darken.sdmse android.permission.WRITE_SECURE_SETTINGS

如果您收到 Operation not allowed: java.lang.SecurityException,请参阅此处。有些设备会限制 ADB 权限。请查看开发者选项中是否有需要切换的额外设置(例如 Disable Permission Monitoring(停用权限监控)),使用命令之后,您可以再将其恢复。

ACS:高级保护

在 Android 17 及更高版本上,Google 的高级保护(Advanced Protection)模式会阻止非专用无障碍工具(屏幕阅读器、开关控制等)的应用使用无障碍服务。SD Maid 是一款维护/清理工具,因此在启用高级保护期间,其无障碍服务无法启用:Android 会在系统层面拒绝该服务,即使您尝试通过 root 或 ADB 访问权限来授予也不行。

SD Maid 无法让自己免受此限制:只有被 Google 归类为无障碍工具的应用才符合条件,而清理工具被明确排除在外。

您有两个选择:

ACS:AppOps 限制

Android 13+ 可能会对侧载的应用施加额外的限制。因此,如果 SD Maid 不是从 Google Play 或其他应用商店等(Google 所知的)已知来源安装的,那么您可能无法直接向 SD Maid 授予某些权限,例如启动无障碍服务。

OxygenOS 15 - 一加

一加在 OxygenOS 15 的应用设置中忘了(或者干脆没有)加入允许受限制的设置操作。如果您不是通过 Google Play 安装,那么安装程序需要设置 INSTALL_ALL_WHITELIST_RESTRICTED_PERMISSIONS 标志。如果您已经配置好 Shizuku,可以使用 “Install with Options”应用。

其他 ROM

要解除这些限制,请在系统中打开 SD Maid 的应用设置界面。打开右上角的菜单并选择允许受限制的设置,之后您可以返回无障碍服务列表并启用 SD Maid 的服务。

注意: 为了提高易用性(这是讽刺),Google 决定只有在以下情况下才会显示此设置:

😮‍💨

更多背景信息请参阅此处。

Root 权限

拥有 root 权限时,SD Maid 可以完全访问您的设备,并执行尽可能彻底的扫描。这通常意味着您已经解锁了引导加载程序(bootloader)并安装了 Magisk。

如果 SD Maid 认为您的设备可能已经 root,就会首先请求 root 权限。如果获得了 root 权限,SD Maid 会利用它尽可能多地授予其他权限。root 权限是您能给予一个应用的最高级别的访问权限,此时其他权限只是为了易用性和性能才需要,因此如果 SD Maid 已经拥有 root 权限,在设置过程中就无需再额外征得同意。

ADB 访问权限

ADB 访问权限让 SD Maid 能够使用 Android 的调试接口(ADB)执行需要更高权限的操作。它需要一个单独的应用,该应用在您的设备上运行 ADB 服务,并向其他应用授予对该服务的访问权限:Porter 或 Shizuku。这是您可以对手机做的一项修改,其他应用也可以利用它。

它与 root 类似,但并不相同。其权限稍弱一些,但这项修改不是永久性的,也不需要您解锁引导加载程序。

Porter

Porter 是我维护的 Shizuku 分支,带有可选的 root 支持。它的网站上介绍了如何安装和启动它。在 Android 11 及更高版本上,借助无线调试,您无需电脑即可启动它。

如果您是第一次设置 ADB 访问权限,请使用 Porter。在没有安装任何提供 ADB 访问权限的应用时,来自 GitHub 和 F-Droid 的 SD Maid 版本会引导您使用 Porter。Google Play 版本会引导您前往 Google Play 上的 Shizuku,但与 Porter 配合使用的方式完全相同。

如果 Porter 和 Shizuku 都已安装,SD Maid 会使用 Porter。此时设置卡片会显示已安装 Porter,因此 SD Maid 会等待 Porter,而不是 Shizuku。请启动 Porter 以继续,或者如果您希望 SD Maid 使用 Shizuku,就将 Porter 卸载。

使用 Shizuku

Shizuku 有两个版本:

两者不能同时安装。如果原版在您的设备上已经可以正常工作,就没有必要切换。

授予访问权限

设置好 Porter 或 Shizuku 后:

如果您已经授予 SD Maid root 权限,再设置 ADB 访问权限并不会启用额外的功能,但可以提高可靠性。如果使用 root 权限的操作失败,SD Maid 会改用 ADB 访问权限重试。

ADB 访问权限:故障排除

您可以前往设置 > 设置并查看 ADB 访问权限设置卡片,以检查 SD Maid 的 ADB 访问权限状态。它应该显示 SD Maid 现在可以通过 Porter 使用 ADB 访问权限(或通过 Shizuku)。

Shizuku 始终无法连接

卡片显示 ADB 访问失败和 Shizuku 正在运行,但从未将 SD Maid 连接到其辅助服务。旧版本中显示的是 Waiting for link with Shizuku(正在等待与 Shizuku 建立连接)或 Shizuku link failed(Shizuku 连接失败)。

打开 Shizuku 应用。如果它显示正在运行,并且 SD Maid 在其已授权列表中,那么 Shizuku 的设置没有问题,重新设置也无济于事。出问题的是 Shizuku 的辅助服务:它在启动时就崩溃了,来不及回报,而 SD Maid 会在大约 15 秒后放弃。重试会执行同样的检查,也会以同样的方式失败。

这是 Shizuku 的错误(RikkaApps/Shizuku#1198),而不是 SD Maid 的错误,它会影响所有使用 Shizuku 辅助服务的应用。受影响的有联发科(MediaTek)设备,以及运行 HyperOS 或 MIUI 的设备。

据报告,thedjchi 的分支修复了这个问题。要切换: