报告口径本页直接渲染本地报告真源;静态能力、动态观察、推断和线上未验证项不得互相替代。
Storage Manager v1.0.5 权限与后台机制拆包报告#
文档日期:2026-10-14
本文区分“Manifest 声明”“代码用途”“真机实际授予”,不把声明权限写成已经调用成功。
一、结论先行#
- 高影响权限集中在所有文件访问、Usage Access、通知和前台服务。 文件清理与文件管理依赖
MANAGE_EXTERNAL_STORAGE;应用管理依赖PACKAGE_USAGE_STATS;保活/提醒依赖通知和specialUseFGS。(S1) - 首启只实际完成了通知授权。 All Files Access 被拒绝;存储读写与电话状态 AppOp 为 ignore;未授予 Usage Access。(D1)
- 后台核心不是 WorkManager 定时唤醒,而是常驻前台服务。
LongRunningService在首启后使用 ID1001进入前台并返回START_STICKY;60 秒循环负责本地提醒资格检查。(S1/D1) - 重启和远程拉活均存在静态入口。
BOOT_COMPLETED/LOCKED_BOOT_COMPLETED可启动服务,高优先级 FCM data 也可启动服务;本轮未重启、未发 FCM,真实成功率未知。(S1/U) - 划卡不等于强停。 Samsung Android 13 上最近任务划掉后服务仍在;系统 Force Stop 后服务和通知都消失,30 秒未自行恢复。(D1)
二、权限清单#
| 权限 | 类型 | 代码/产品用途 | 本轮状态 | 风险与边界 |
|---|---|---|---|---|
INTERNET |
普通 | 广告、Remote Config、FCM、归因/分析、隐私网页 | 随安装授予 | 网络数据内容未抓包 |
ACCESS_NETWORK_STATE |
普通 | 广告/网络可用性判断 | 随安装授予 | 低风险 |
ACCESS_WIFI_STATE |
普通 | 网络状态/SDK | 随安装授予 | 未定位一方精确调用目的 |
AD_ID |
普通/广告标识 | 广告归因与个性化 | 声明 | 实际可用性受系统设置影响 |
ACCESS_ADSERVICES_AD_ID/ATTRIBUTION/TOPICS |
Privacy Sandbox | 新广告标识、归因与 Topics | 声明 | 是否实际调用未验证 |
POST_NOTIFICATIONS |
运行时 | 常驻 FGS、普通提醒、FCM | 首启允许 | 用户拒绝会影响常驻通知与提醒路径 |
FOREGROUND_SERVICE |
普通 | 启动 LongRunningService |
D1 正在运行 | 需持续可见通知 |
FOREGROUND_SERVICE_SPECIAL_USE |
普通/受限用途 | API 34+ 的 specialUse FGS |
S1 | 合规性取决于真实核心用途与 Play 审核 |
RECEIVE_BOOT_COMPLETED |
普通 | 开机/锁定开机后启动 FGS | S1 | 未重启验证 |
WAKE_LOCK |
普通 | SDK/后台任务保持运行 | AppOp 有短时使用 | 未证明长期持锁 |
VIBRATE |
普通 | 高重要度提醒 Channel | 声明 | Channel 代码配置零值震动数组;OEM 实际表现不同 |
MANAGE_EXTERNAL_STORAGE |
特殊访问 | 全盘文件扫描、清理和文件管理 | 拒绝 | 高风险;需系统设置页授权 |
READ_EXTERNAL_STORAGE |
旧版运行时 | Android 旧版本读取文件 | AppOp ignore | target 36 下主要由新模型/所有文件访问决定 |
WRITE_EXTERNAL_STORAGE |
旧版运行时 | Android 旧版本写/删文件 | AppOp ignore | 新 Android 已弱化/废弃 |
PACKAGE_USAGE_STATS |
AppOps 特殊访问 | 应用使用情况、App Manager/RAM 展示 | 未授予 | 需用户在 Usage Access 页面授权 |
REQUEST_DELETE_PACKAGES |
普通/系统确认 | 发起应用卸载 | 声明 | 仍需系统确认,不能静默卸载 |
READ_PHONE_STATE |
运行时 | SDK/设备信息潜在用途 | AppOp ignore | 一方必要性不明确,需隐私披露复核 |
CHECK_LICENSE |
Play | Google Play License | 声明 | 与分发/完整性相关 |
| Install Referrer bind | 服务绑定 | 获取安装来源/自然量编码 | S1 | 影响广告与通知分流 |
FCM RECEIVE |
推送 | 接收 FCM | S1 | 服务端策略未验证 |
| App 自定义 signature permission | 签名级 | 保护动态非导出 Receiver | 随应用签名 | 低风险 |
原始声明:jadx/resources/AndroidManifest.xml:15-26,84-97、evidence/aapt-permissions.txt。
三、权限调用与页面#
3.1 通知#
- 首启直接触发 Android 13 通知权限弹窗。(D1)
- Permission 页面文案为
Enable notifications to receive suggestions that matter,把通知用于“建议”,与常驻服务和拉活提醒共同使用。(D1) - 设置页提供总通知、Clean Reminder、Battery Reminder 三个本地开关,默认均为 true。(S1,
NotificationSettingActivity.java:38-104)
3.2 所有文件访问#
- 点击 Clean Now 后展示自定义解释,再引导系统 All Files Access。(D1)
- 本轮选择 DENY,未验证系统授权后的全量扫描、清理和文件管理。(D1/U)
- 权限文案把全盘访问描述为“manage files of your device”,需要与真实数据处理和隐私政策一致。(I)
3.3 Usage Access 与卸载#
- App Manager/Junk 的应用缓存统计代码检查 Usage Access,并可跳转系统设置。(S1)
- App Uninstall 依赖系统卸载流程,
REQUEST_DELETE_PACKAGES只允许发起,不等于无确认删除。(S1)
四、一方组件#
| 类型 | 组件 | exported | 用途 |
|---|---|---|---|
| Launcher Activity | SplashFirstEmptyActivity |
true | 桌面启动入口 |
| Deep link/跳转 Activity | SplashActivity |
true | 启动编排、广告、通知路由 |
| 业务 Activities | Main、Junk、Large、Battery、AppManage、FileManager、Compression、Settings 等 | false | 产品功能 |
| FCM Service | FirebaseMsgService |
false | FCM data/notification payload |
| FGS | LongRunningService |
false | 常驻服务、通知调度、状态监听 |
| Receiver | StartReceiver |
false | Boot / Locked Boot |
| Receiver | NotifyDeleteReceiver |
false | 用户删除提醒后取消重复展示 Job |
| FileProvider | androidx.core.content.FileProvider |
false | 分享本地文件 URI |
| WorkManager Service | SystemJobService |
true + BIND_JOB_SERVICE |
AndroidX Work 框架组件 |
Manifest 还包含大量广告 SDK Activity/Provider/Service;这些是第三方组件,不等于一方业务逐一调用。
五、前台服务与保活#
5.1 服务声明#
<service
android:name="com.sweepeeer.manager.ssstorage.service.LongRunningService"
android:exported="false"
android:foregroundServiceType="specialUse">
<property
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
android:value="Clean up junk files in the background" />
</service>
证据:AndroidManifest.xml:218-225。(S1)
5.2 启动与运行#
- 统一入口
w3.a.q()先检查静态存活标志和notification_is_open,API 26+ 调startForegroundService()。(S1) onCreate()立即以 ID1001进入前台;API 34+ 使用specialUsetype bit。(S1)onStartCommand()重发常驻通知并返回1,即 Android 的START_STICKY。(S1)- 服务初始化屏幕、方向、前后台、卸载、电量/充电监听,并启动 60 秒通知资格循环。(S1)
- 真机启动后
START_FOREGROUND为 running,服务isForeground=true。(D1)
5.3 onTaskRemoved#
最近任务被移除后,服务只延迟 500ms 再做一次通知资格检查;代码没有在该回调中显式重新启动自身。服务能在本轮划卡后继续存在,主要因为 FGS 未被系统杀死,而不是 onTaskRemoved 完成了重启。(S1/D1)
5.4 Force Stop 边界#
- 3 秒:无 PID、无
LongRunningService、无活动 ID1001,包为stopped=true。(D1) - 30 秒:仍未恢复;系统保留 Channel 属正常配置持久化,不代表进程复活。(D1)
- 开机广播、FCM 和
START_STICKY都不能据此声称能突破用户 Force Stop。(结论边界)
六、拉活入口#
| 入口 | 静态行为 | 动态状态 |
|---|---|---|
| App 正常启动 | 启动 FGS + ID 1001 |
已验证 D1 |
BOOT_COMPLETED |
调统一启动器 | 未重启 U |
LOCKED_BOOT_COMPLETED |
调统一启动器 | 未重启 U |
Huawei STARTUP_COMPLETED |
Manifest 声明,但 Receiver 代码未处理 | 静态无效/保留 S1 |
| 高优先级 FCM data | w3.a.q(this,"data_start") |
未注入 U |
| FCM notification payload | 发布服务器标题/正文的简单通知 | 未注入 U |
START_STICKY |
服务被系统回收后允许系统尝试重建 | 未主动杀进程测试 U |
| 通知点击 | SplashActivity 读取 scan_type 等参数并路由 |
常驻通知可见,点击路由未逐项测试 |
七、WorkManager、Job 与 Alarm#
- 包内包含 WorkManager
SystemJobService,但一方初始化代码只查找并取消名为periodic_notification_work的旧唯一任务,未找到当前版本重新创建该周期任务的直接一方代码。(S1) - 真机 Job 列表只观察到该包的 Google DataTransport Job,用于 SDK 事件传输,不能当作一方通知保活 Job。(D1)
- 真机未观察到该包 AlarmManager 定时器。(D1)
- 本地普通提醒由前台服务内协程每 60 秒检查,不依赖系统 Alarm。(S1)
八、后台监控#
服务启动约 2 秒后初始化:
- 屏幕方向每 1 秒检查;
- 动态监听
SCREEN_ON / SCREEN_OFF / USER_PRESENT; - 记录首次启动时间;
- 启动通知日计数重置与 60 秒调度;
- 监听外部 App 卸载;
- 动态监听
BATTERY_CHANGED / ACTION_POWER_CONNECTED / ACTION_POWER_DISCONNECTED / BATTERY_LOW / BATTERY_OKAY; - 每 2 小时记录一次内部事件
A,异常时 3 分钟后尝试恢复该协程。(S1)
这说明常驻服务同时承担召回、状态监听和埋点周期任务,而不只是“清理后台垃圾”。(I)
九、风险与待验证#
specialUseFGS 的声明理由与实际长期承担通知/监控/埋点是否满足 Google Play 政策,需结合 Play Console 声明和现行审核要求单独核验。(U)READ_PHONE_STATE对清理工具的一方必要性未明确,需抓包/调用栈确认。(U)- 隐私政策为 HTTP、用户协议 URL 为空,属于可见合规质量问题。(S1)
- Boot 恢复、FCM data 拉起、系统低内存杀进程后的
START_STICKY恢复均未动态测试。(U) - 未授予 All Files Access 与 Usage Access,清理和应用管理的完整权限调用链未动态验收。(U)