Releases: Horizen5/Appslim
Release list
AppSlim Analyzer v0.6.3 — 应用列表秒开 + 缓存一致性
Android 应用运行时分析与智能精简平台。
这一版重写了应用列表模块,从「扫一遍再显示」改成 MT 管理器式的四级架构,
并解决了纯缓存方案最大的隐患——缓存一致性。
⚡ 列表秒开:慢在哪,就绕开哪
原来的做法是启动时把所有应用的 APK 都解析一遍(Activity/Service 数量、图标全解),
应用一多就要等好几秒。问题不在「扫描慢」,而在一开始就不该扫这么多。
| 层 | 做什么 | 为什么 |
|---|---|---|
| ① 快速列表 | getInstalledApplications(0) |
flag 传 0,不解析任何组件信息,几十毫秒返回 |
| ② Room 缓存 | 组件数量等重信息落库 | 二次启动直接读表,不碰 APK |
| ③ 安装广播 | PACKAGE_ADDED/REMOVED/REPLACED |
补上「App 开着时装了新应用」的缺口 |
| ④ 懒加载 | 点进详情才做深度解析 | 用不到的信息一律不算 |
图标只解可见项 —— LruCache 缓存 400 张,卡片进入可视区才异步解码。
原来一次性解几百张 Bitmap,既慢又占内存。
排序放在组合层 —— 名称/可瘦身/最近更新/最近使用四种排序走 combine,
切换排序不触发任何重新扫描。
🔄 v0.6.3:缓存一致性
纯缓存方案有个隐患:刚装完的新 App 不在缓存里,列表就看不到它。
分两种情况:
- 重新打开 App — 每次
refreshAppList()都会重新调getInstalledApplications,
不是纯读缓存,所以新应用会出现(v0.6.2 已经是这个行为) - App 正开着的时候装了新应用 — 这就是 v0.6.3 补的洞
做法是在 Application context 上动态注册广播监听:
IntentFilter().apply {
addAction(Intent.ACTION_PACKAGE_ADDED)
addAction(Intent.ACTION_PACKAGE_REMOVED)
addAction(Intent.ACTION_PACKAGE_REPLACED)
addDataScheme("package") // ← 少了这行收不到任何广播
}两个细节:
- 必须
addDataScheme("package")—— 这三个广播都带 package: 这个 data scheme,
不声明的话过滤器不匹配,一条都收不到 - 动态注册 + 挂在 Application 上 —— 静态注册在 Android 8+ 会被后台广播限制拦掉;
挂在 Activity 上则会随页面销毁而失效
📊 增量更新,不做全量重扫
第二阶段的深度信息只对「缓存里没有」或「APK 路径变了」的应用重新解析,
而且每 25 个批量提交一次,避免频繁触发重组。
方法笔记:这套架构抽象成了可复用的方法,写在
dev-craft / 让 Android 应用列表秒开
大小:2.9 MB · 要求:Android 10+
AppSlim Analyzer v0.5.10(一键检测自动返回修复)
AppSlim Analyzer v0.5.10
一键检测 · 自动返回修复(本次重点)/ One-tap Detection: Auto-Return Fix
问题根因
「能打开目标 App,但 10 秒后不会自动跳回」不是逻辑没写,而是 Android 10+ 的 Background Activity Launch (BAL) 限制:从后台(即使前台 Service)直接 startActivity 把本应用拉回前台会被系统静默拦截。GitHub 上的 bring_app_to_foreground 项目与原生文档均确认——对普通 App 唯一可靠的绕过手段是申请 SYSTEM_ALERT_WINDOW(显示在其他应用上层) 权限,授予后该权限即成为 BAL 豁免项。
修复内容
- 新增申请「显示在其他应用上层」权限;授予后,检测满 10 秒会被前台服务自动
startActivity拉回 AppSlim 并展示结果。 - 未授予时优雅降级:检测结束弹通知,点通知即可返回(通知 PendingIntent 本身即 BAL 豁免)。
- Lens 页新增权限引导卡:未授予时提示并一键跳转系统授权页;授权后从设置返回会自动重新检测状态。
- 结果页增强:
- 按 CPU 峰值降序,给**「🔥 占用最高」** 的 Activity / 进程打标记;
- 新增「返回详情并管理」按钮,直达应用详情页对高占用组件做阻断 / 一键优化。
使用
- 安装后首次用「一键检测」,会提示授予「显示在其他应用上层」(仅用于检测后自动返回,可随时在系统设置关闭);
- 授予后:点一键检测 → 自动开 App → 等 10 秒 → 自动跳回并展示哪些 Activity / 进程占用最高;
- 点「返回详情并管理」即可对高占用组件进行阻断或一键优化。
构建产物 / Artifact
AppSlimAnalyzer-v0.5.10-release.apk(MD5:67e253501c1ce85a6decd6dbb131f5f2)
AppSlim Analyzer v0.5.9(一键检测全自动闭环)
AppSlim Analyzer v0.5.9
一键检测 · 全自动闭环(本次重点)/ One-tap Detection: Full Auto Loop
修复「点一键检测没反应 / 采完不返回 / 进程列表空」:现在点一次即完成整个流程,与你发的 APPLENS 项目行为一致:
- 📲 自动打开目标 App(标准
getLaunchIntentForPackage+ 前台 Service 保活); - ⏱ 前台运行 10 秒,每 500ms 采样一次(UsageStats 读前台 Activity +
top/dumpsys兜底); - ↩️ 自动返回 AppSlim Analyzer,并在检测页直接展示结果:启动了哪些 Activity、各进程 CPU / 内存占用。
关键改动
LensScreen支持autoStart:详情页「一键检测」(lens?pkg=…&auto=1) 进入后加载即自动开始,不再需要点第二次。ProfileService采样结束后主动startActivity把本应用带回前台(FLAG_ACTIVITY_REORDER_TO_FRONT,前台服务内允许),用户无需手动切回。ApplensSampler.sampleProcesses()新增进程采集:CPU 来自top、内存来自dumpsys meminfo(普通模式内存可能为 0,属系统限制)。ProfileService结果补齐processes(此前硬编码为空列表)。
之前「没反应」的根因:详情页点检测只是跳到 Lens 页还要再点一次;且采完后只发通知、目标 App 一直留在前台,你不手动切回就看不到任何结果,于是以为「点了没用」。
构建产物 / Artifact
AppSlimAnalyzer-v0.5.9-release.apk(MD5:71504496d0e4292a48cd10b46261e932)
使用 / Usage
- 手机开启「未知来源应用」安装权限,安装本 APK。
- 首次检测前在应用内「去开启使用情况访问」并授予权限(否则读不到具体 Activity)。
- 进入任意应用详情页 → 点击「一键检测」→ 自动开 App、等 10 秒、自动返回看结果。
AppSlim Analyzer v0.5.8(性能优化:后台自动降频)
AppSlim Analyzer v0.5.8
性能优化(本次重点)/ Performance
针对「打开 App 即占满一个 CPU 核心、退到后台也持续高占用」的问题:
- 🔋 后台自动降频:接入
ProcessLifecycleOwner进程级前后台感知。应用一退到后台,所有采样协程立即暂停(仅前台检测服务ProfileService不受影响),CPU 占用趋近 0。 - ⏱ 前台采样降频:进程列表刷新间隔由 500ms → 2s,系统 CPU 测量循环也加了显式间隔、不再忙等。有 Root 时不再每 500ms 拉起一次
su全量扫/proc。 - 🧵 图标/元数据已在采样器内缓存,刷新不再反复查
PackageManager。
之前的根因:
MainViewModel里有两个while(true)死循环(viewModelScope持有、与 Activity 生命周期解耦),即使退到后台也不停,且每 500ms 全量su扫描一次,导致单核持续 100%+。
构建产物 / Artifact
AppSlimAnalyzer-v0.5.8-release.apk(MD5:67c0527afae190c4a5d7cdc68a1605cc)
使用 / Usage
- 手机开启「未知来源应用」安装权限,安装本 APK。
- 首次检测前在应用内「去开启使用情况访问」并授予权限。
- 打开任意应用详情页 → 点击「一键检测」。
AppSlim Analyzer v0.5.7
AppSlim Analyzer v0.5.7
本次更新 / What's new
- 🐛 修复「一键检测」直接闪退:根因是
LensViewModel用getSystemService(PackageManager::class.java)拿到null导致实例化即 NPE。已改为app.packageManager/getSystemService(ACTIVITY_SERVICE),不再在目标 App 启动前崩溃。 - 💥 崩溃日志:新增全局
UncaughtExceptionHandler,未捕获异常写入files/crash/crash.log(含型号 / SDK / 品牌 / 堆栈),应用内「崩溃日志」按钮可查看、复制、清空。 - 🔬 「一键检测」严格移植 APPLENS:前台
Service(ProfileService)+PARTIAL_WAKE_LOCK,UsageStatsManager.queryEvents读前台 Activity(兜底dumpsys),每 500ms 采样一次、持续 10s(共 20 个点),CPU/内存走top/dumpsys meminfo。规避 HyperOS 后台限制,不再闪退。 - 📄 README 中英双语文档:新增「实现原理(检测用的是哪套代码)」与「构建方式」章节。
构建产物 / Artifact
AppSlimAnalyzer-v0.5.7-release.apk(MD5:24c6fb117af284a1b9b102f3a4e42a24)
使用 / Usage
- 手机开启「未知来源应用」安装权限,安装本 APK。
- 首次检测前在应用内「去开启使用情况访问」并授予权限。
- 打开任意应用详情页 → 点击「一键检测」。