MapAdKiller

把高德、百度、腾讯地图里那些不想看的东西关掉 —— 只留地图。

Version libxposed License Platform Telegram Stars


这是什么

一个 Android 模块。装好之后,地图 App 的广告、活动、营销信息流、推荐内容会被关掉,道路、地名、导航这些该有的东西一样不少。

  • 两种装法:免 root 内置版(普通用户,装上就能用)/LSPosed 模块版(已经用框架的用户)。
  • 有开关面板:所有功能都是开关,你决定关哪些,随时可以拨回来。
  • 改了立刻看得见:面板里每一项都标了「开了会怎样」,不用猜。
  • 不占资源:模块自己不创建线程,静置时几乎不产生任何日志。

支持的应用:

应用 包名
高德地图 com.autonavi.minimap
百度地图 com.baidu.BaiduMap
腾讯地图 com.tencent.map

当前版本 2.2.2(versionCode 222),基于 libxposed API 102,最低 Android 8.0。


下载

到 Releases 页面下载,两个包选一个就行。

包 文件名 适合谁 需要 root 吗
免 root 内置版(推荐) amap-2.2.2-nonroot.apk(高德免 root 内置版) 普通用户,手机上没装框架 不需要
模块版 MapClean-lsp-v2.2.2.apk 已经在用 LSPosed / Vector 的用户 需要框架

一句话区别:内置版把模块直接并进了地图本体,装完就是成品,代价是包体大、签名变了;模块版是一个几 MB 的小模块,靠框架注入,三个地图共用一份配置。

⚠️ 别装错包(这是最常见的误用)

模块版 MapClean-lsp-*.apk 免 root 内置版 �map-*-nonroot.apk
体积 约 4 MB 约 175 MB
需要框架 需要 LSPosed / Vector 不需要
会不会动到高德本体 完全不动(只在运行时注入) 会替换:包名仍是 com.autonavi.minimap,但签名变了(CN=xiawanli)
卸载后 高德还是官方原版 需要重装官方高德

root / LSPosed 用户请只装 4 MB 的模块版。 如果你发现"高德签名被改了",几乎一定是装了 175 MB 的内置版 —— 它本来就是重新签名的重打包高德。装回去的办法:卸载高德 → 从应用商店重装官方版 → 只安装模块版。


快速开始

免 root 内置版(推荐)

  1. 下载 amap-2.2.2-nonroot.apk(高德免 root 内置版)。
  2. 先卸载手机上原有的高德地图(内置版重新签过名,和官方签名冲突,无法覆盖安装)。

    卸载会清掉登录状态和已下载的离线地图,装好重新登录即可。

  3. 安装,打开高德地图,长按底部「我的」标签约 1 秒,面板就出来了。

不需要 root,不需要 Magisk,不需要 LSPosed,也不需要任何框架。

模块版(LSPosed)

  1. 安装 MapClean-lsp-v2.2.2.apk。
  2. 在 LSPosed / Vector 里启用模块,并把需要处理的地图 App 勾进作用域 (高德 com.autonavi.minimap、百度 com.baidu.BaiduMap、腾讯 com.tencent.map,勾哪个管哪个)。
  3. 重启目标地图 App(强制停止后重新打开),然后长按底部「我的」标签约 1 秒。

模块版不改动地图安装包,安全软件不会报红,三个地图共用同一份模块与同一套配置。


打开面板

图:长按底部「我的」标签

长按底部「我的」标签约 1 秒 → 面板从底部弹出。再长按一次即可收起。

  • 面板右上角的 ✕ 只关闭面板,不会关掉悬浮球。
  • 想彻底让悬浮球消失,去 外观 → 关闭悬浮窗(见下一节)。
  • 关掉之后想再打开:还是长按「我的」标签约 1 秒,面板会重新出现。

面板底部有一个搜索框,开关太多找不到时直接搜名字。


面板导览

面板顶部是一排分类标签(chip),左右滑动或直接点选切换:

顺序 分类 里面有什么
1 首页 首页那些卡片的开关:天气、扫街榜、活动、营销信息流、回家/公司等。顶部有常驻横幅
2 省电 推送、后台任务、埋点与广告、第三方标注过滤,共 11 项 + 一键省电
3 工具 首页工具宫格与「更多工具」里的逐个开关
4 内容 各类内容流、推荐位、详情页信息流
5 地图 地图上的兴趣点标识、图层相关
6 我的 「我的」页面里的入口与卡片
7 底栏 底部标签栏的入口
8 其他 悬浮窗入口、调试日志、当前版本、检查更新
9 外观 悬浮球与面板的大小、不透明度、宽度

面板顶部固定显示:

元素 含义
头像 + 名称 当前正在配置的目标 App
版本胶囊 🟢 绿色 = 已是最新版本;🔴 红色 + 「新版本」小标 = 有新版本可用(点它可去下载)
连接状态药丸 ● 已连接 · 可写入 正常 / ● 已连接 · 写入被拒 写不进去 / ○ 只读 · 需要目标 App 运行中 目标 App 没在跑
GitHub 链接 直达项目主页

首页顶部的常驻横幅:省电拦截已开启 · 查看/调整 →,点一下直接跳到「省电」页。 如果你之前关掉过其中某些项,这行会变成红字提示,提醒你当前不是全拦截状态。


外观设置

「外观」页有 4 个滑块,拖动时实时预览,松手才保存,不满意随时拖回去。

滑块 可调范围 默认值
悬浮球大小 36 ~ 72 dp 46 dp
悬浮球不透明度 30 ~ 100 % 100 %
面板宽度 自动 或 280 ~ 420 dp 自动
面板不透明度 60 ~ 100 % 100 %

下面还有两个按钮:

  • 恢复默认外观:一键把上面 4 项拨回默认。
  • 关闭悬浮窗:悬浮球和面板都不再出现(适合已经调好、不想再看到球的用户)。

⚠️ 关掉悬浮窗之后不是没法找回:长按底部「我的」标签约 1 秒,面板会重新弹出。


省电 / 后台

这一页有 11 个开关。语义请先记住一句话:

开 = 这个行为已经被拦截(默认全部开启);关 = 恢复高德的原生行为。

分组 开关 拦截了什么 关掉之后
推送 关闭推送长连接 ACCS 长连接(省电最多的一项) 长连接恢复,待机耗电上升
关闭推送消息处理 推送消息的分发处理 推送消息会被处理,耗电略升
关闭推送服务壳 推送服务的外壳进程(激进) 推送服务壳恢复常驻
后台任务 关闭周期任务 WorkManager / JobScheduler 周期任务 周期任务恢复调度
关闭子进程拦截 子进程拦截的总闸(排查用) 一次性放行全部子进程拦截,用于排查「是不是我拦的」
关闭桌面小组件刷新 桌面小组件的定时刷新 小组件恢复刷新,耗电上升
关闭云控调度池 LotusPool 云控调度池 云端下发的周期任务恢复
埋点与广告 关闭阿里埋点 Analytics 阿里 Analytics 埋点初始化 埋点恢复上报
关闭开屏广告请求 开屏广告请求 开屏广告可能重新出现
关闭广告曝光上报 广告曝光上报 曝光数据恢复上报
地图 启用第三方标注过滤 过滤第三方 POI 标注(默认就是关闭,需手动开启) 不参与拦截;注意开启后可能影响帧率

顶部还有一个 「一键省电(全部开启拦截)」 按钮,一次把其中 9 项打开 (不含「子进程拦截」总闸和「第三方标注过滤」——前者是排查开关,后者默认就该关着)。

两件必须知道的事

  1. 本页开关改动后,需要「强制停止 + 重新打开」目标 App 才生效。 这样设计的好处是:关闭的项在运行时彻底不加载对应实现,零性能开销,而不是「加载了再拦掉」。
  2. 代价要提前想清楚:关掉「推送长连接」之后,行程提醒、活动推送、消息中心、家人地图消息会收不到。 想恢复就把那一项拨回「开」,强停重开即可。

更新

  • 每天自动检查一次(24 小时节流,不会频繁请求)。
  • 有新版本时,面板顶部的版本胶囊会变红,并挂一个「新版本」小标。
  • 每个新版本只提示一次,不打扰。
  • 也可以手动查:其他 → 检查更新,四种状态:检查中 / 有新版本 / 已是最新 / 线上版本未获取。
  • 查到新版本后会出现 「镜像下载」 按钮。

国内镜像优先:更新检查与下载会优先走国内镜像 (gh-proxy.com、gh.llkk.cc、ghfast.top、ghproxy.net、jsDelivr), 没有 VPN 也能正常查到新版本。


常见问题

Q1. 长按「我的」没反应,面板打不开? 确认你长按的是底部标签栏里的「我的」(不是页面内的头像),并且按住约 1 秒再松手。 模块版还要确认两件事:框架里模块已启用、目标地图已加入作用域,并且重启过目标 App。

Q2. 顶部显示 ○ 只读 · 需要目标 App 运行中? 面板是靠目标 App 的进程读写配置的。把地图切到前台(或重新打开一次),状态会变成 ● 已连接 · 可写入。

Q3. 显示 ● 已连接 · 写入被拒? 说明配置没能写进去。先强制停止目标 App 再重开;仍然如此,检查系统是否限制了该应用的后台/存储权限。

Q4. 我把悬浮球关了,怎么找回来? 长按底部「我的」标签约 1 秒,面板会重新出现,然后去「外观」里重新打开悬浮窗。

Q5. 开关点了,但界面没变化? 分两种情况:

  • 「省电 / 后台」页的开关:必须强制停止并重开目标 App 才生效(这些项是安装期/启动期门控)。
  • 其他页的开关:多数立即生效;地图上的标注类改动,需要重新进入一次地图页。

Q6. 推送收不到了? 去「省电」页把 关闭推送长连接 和 关闭推送消息处理 拨回「关」,然后强停重开。 这是省电的代价,取舍由你决定。

Q7. 检查更新一直显示「线上版本未获取」? 通常是网络问题。稍后再试;模块会优先走国内镜像,但首次检查仍需要能访问 GitHub 或任一镜像。

Q8. 装内置版提示「应用未安装 / 签名不一致」? 内置版重新签过名,必须先卸载官方高德地图再安装。卸载会清除登录态与离线地图。


装了内置版之后,高德自己又更新回去了?

内置版是重新签名过的,理论上商店更新不了它;但部分机型的应用商店/高德自更新会直接覆盖安装官方版,表现为"模块突然消失了"。

处理:在应用商店里把「高德地图」的自动更新关掉,或在高德的设置里关闭自动更新。之后重新安装一次内置版即可。

面板显示「只读 · 无法写入配置」/ 开关拨了不生效?

说明当前进程里拿不到可写的配置通道。依次尝试:

  1. 先打开一次目标地图 App,再长按「我的」打开面板(首次冷启动时通道可能还没就绪);
  2. 模块版用户:在 LSPosed / Vector 里确认本模块已启用,且作用域包含对应地图的包名,然后强制停止地图 App 重开;
  3. 仍然不行就重装模块。

模块会优先用框架的远程配置通道;拿不到时自动降级为应用进程内的本地配置(面板右上角会显示「可写入(本地)」)。降级模式下面板的读取、保存都正常,但少数在启动极早期安装的拦截项可能仍按默认值运行 —— 关掉再重开一次地图 App 即可。

性能

模块本身的开销可以忽略:不创建任何线程,静置 60 秒模块日志只有 0 ~ 3 条。

高德地图(17.02.0.1541)实测:

指标 结果
首页地图拖动帧间隔 p99 17.3 ms
掉帧率 0.0 %
帧率 稳定 60 fps
冷启动耗时(中位) ~790 ms

致谢与交流

  • 有问题、有建议、想第一时间拿到新版本:Telegram 交流群
  • Bug 与功能请求:请走 GitHub Issues
  • 觉得有用的话,点个 Star 就是最大的支持 ⭐

Star 趋势

Star History Chart


已知限制

  • 面板的分类标签栏,从屏幕最右约 160px 起手滑动不了(系统手势区冲突)。 绕过办法很简单:直接点 chip 就能跳到对应分类。
  • 灵动岛 / 手表联动:如果官方原包上这些功能同样不可用,那属于设备侧配置问题,与本模块无关。

License

GPL-3.0-or-later

免责声明

本项目仅供学习与技术交流使用,不得用于商业用途。 所有商标、素材与数据归各自权利人所有。请支持正版,通过官方渠道使用地图服务。 使用本模块所产生的一切后果由使用者自行承担。

Releases

2.2.3

Stable

10/20/2026, 1:26:14 PM

v2.2.3(versionCode 223)— 悬浮窗按版本分流、装错包诊断

发布日期:2026-10-20。版本码:223。基线 v2.2.2(版本码 222)。

新增

  • 悬浮窗按安装形态分流:免 root 内置版默认显示悬浮球;LSPosed 模块版默认不显示(悬浮窗主要面向免 root 用户),可在面板「其他 → 悬浮窗入口」手动开启。判定依据是宿主 APK 内是否存在 assets/lspatch/config.json,不依赖 root 状态、也不依赖 PackageManager。
  • host_mode 诊断日志:event=host_mode pkg=<宿主> embedded=<true|false> kind=<lspatch-embedded|official-or-lsposed>,用于一眼判断用户装的是官方版还是内置版,方便排查「模块好像把高德签名改了」这类误报。

修复

  • host_signer 在 Android 13+ 读不到证书(GET_SIGNATURES 已废弃返回 null)→ 改用 GET_SIGNING_CERTIFICATES。
  • 诊断日志误报包名(会打出 com.miui.contentcatcher / com.google.android.webview)→ 改为从宿主 Context 取包名,并按包名去重。
  • 不再输出证书 DN / 指纹:LSPatch 会把宿主的 PackageManager 包装成「原版应用」,读到的始终是官方签名 CN=minimap,而非磁盘上重签名包的 CN=xiawanli —— 该字段具有误导性,已删除。需要确认签名请对 APK 文件本身做校验(apksigner verify --print-certs)。

构建

  • 模块版在构建期彻底移除免 root 专属实现:tools/module_prune.py 会在编译前复制一份源码并删除 9 个文件(悬浮面板 / 悬浮球 / 悬浮窗挂载 / 悬浮窗 hook / 自绘滑块 / 头像徽章 / 长按入口),并校验 9 个核心类仍在。模块 APK 的 dex 里这些类与相关字符串全部 0 命中,体积从 4,380,276 B 降到 4,331,124 B。
  • 签名密钥固定并加构建守卫:app/build.ps1 现在会校验 app/debug.keystore 的证书,缺失或不匹配直接中止构建,避免再次出现「换密钥导致老用户无法升级」。

说明

  • 2.2.3 同时包含 2.2.2 之后的所有修复:未登录用户打不开面板、面板关闭后无法再次打开、版本胶囊卡在「检查中」、部分设备显示「只读」与开关不生效(配置后端本地兜底)。
  • 更新模块 APK 后若发现模块没生效:LSPosed 会缓存模块的 apk_path,重装后该路径可能指向已删除的旧目录,导致模块不注入(重启也不会自动刷新)。重启一次手机,或在 LSPosed 里取消再重新勾选一次作用域即可。

下载

你要装哪个 文件名 体积 说明
root / LSPosed 用户 MapClean-lsp-v2.2.3.apk 约 4 MB 不会改动高德本体,只在运行时注入
普通用户(免 root) amap-2.2.3-nonroot.apk 约 175 MB 会替换你手机上的高德,签名变为 CN=xiawanli

装了模块版发现「模块没生效」?LSPosed 会缓存模块的 apk_path,重启一次手机(或在 LSPosed 里取消再勾选一次作用域)即可。

反馈:Issues · Telegram 交流群

Assets

1

2.2.2

Stable

10/20/2026, 8:21:01 AM

v2.2.2(versionCode 222)— 长按「我的」开面板 + 「省电 / 后台」整组

发布日期:2026-10-20。版本码:222。基线 v2.2.1(版本码 221)。

这一版把面板从「打开模块设置页」改成了「长按地图底部『我的』标签直接唤出」,并把此前分散在各处的后台省电项收成一组,普通用户不需要懂任何技术名词就能用。

新增

  • 适配高德地图 17.02.0.1541。首页、工具宫格、地图标注、搜索栏等各分组开关随新版本重新校验过。
  • 新增「省电 / 后台」整组(11 项 + 一键省电),模块版设置页同步出现同一组:
    • 推送:关闭推送长连接(ACCS,省电最多)/关闭推送消息处理/关闭推送服务壳(激进)。
    • 后台任务:关闭周期任务(WorkManager / JobScheduler)/关闭子进程拦截(总闸,排查用)/关闭桌面小组件刷新/关闭云控调度池(LotusPool)。
    • 埋点与广告:关闭阿里埋点 Analytics/关闭开屏广告请求/关闭广告曝光上报。
    • 地图:启用第三方标注过滤(默认关闭,开启后可能影响帧率)。
    • 顶部「一键省电(全部开启拦截)」一次写入 9 项,不含「子进程拦截」总闸与「第三方标注过滤」。
    • 语义统一为「开 = 该行为已被拦截」,默认全开;关掉即恢复原应用行为。本页改动需强制停止并重开目标 App 才生效。
  • 面板顶部新增版本胶囊:绿色表示已是最新;红色并挂「新版本」小标表示有新版本可用,点它可直达下载。
  • 新增每日自动检查更新:24 小时节流,每个新版本只提示一次;并接入国内镜像源(gh-proxy.com / gh.llkk.cc / ghfast.top / ghproxy.net / jsDelivr),无 VPN 也能查到新版本。查到新版本后出现「镜像下载」按钮。
  • 新增「外观」页 4 个滑块:悬浮球大小 3672dp(默认 46)、悬浮球不透明度 30100%(默认 100)、面板宽度(自动 / 280420dp)、面板不透明度 60100%。拖动实时预览,松手保存,另有「恢复默认外观」。
  • 新增「关闭悬浮窗」:关掉后悬浮球与面板都不再出现;需要时长按底部「我的」标签约 1 秒即可重新唤出面板。
  • 新增「长按『我的』打开面板」:长按约 1 秒弹出,再长按收起。面板右上角 ✕ 只关面板,不关悬浮球。
  • 首页顶部新增常驻横幅「省电拦截已开启 · 查看/调整 →」,点击直达省电页;若有关掉的项会以红字提示。
  • 面板底部新增搜索框,可按开关名搜索。

性能

  • 修掉高德 ACCS 长连接空转导致的周期性掉帧:首页地图拖动帧间隔 p99 82.77ms → 17.3ms,掉帧率 6.1% → 0.0%,稳定 60fps。
  • 冷启动中位耗时 ~790ms。
  • 模块自身不创建任何线程;静置 60 秒,模块日志 0~3 条。

修复

  • 工具宫格隐藏不生效:兜底路径绕过了过滤逻辑,已修正。
  • 「关闭 = 不加载」由运行时拦截改为安装期门控,关掉的项彻底不加载对应实现,零性能开销。
  • 版本号固定为 2.2.2 / 222(Version.java、module.prop、AndroidManifest.xml 三处同步)。

已知限制

  • 面板分类栏从屏幕最右约 160px 起手滑动不了(系统手势区冲突),直接点 chip 可正常跳转。
  • 「省电 / 后台」页改动需强制停止并重开目标 App 才生效。
  • 关掉推送长连接后,行程提醒、活动推送、消息中心、家人地图消息会收不到;拨回「开」并强停重开即可恢复。
  • 灵动岛 / 手表联动:官方原包上同样不可用,属设备侧配置,与本模块无关。

Assets

1

10/15/2026, 5:30:13 AM

MapAdKiller 2.2.1 更新说明

发布日期:2026-10-15。版本码:221。对比基线 v2.2.0(版本码 220)。

2.2.0 的 APK 在「自带默认配置」完成前就已构建,包内不含该功能;本版为补齐发布。
模块本体功能与 2.2.0 一致,另修正 2.2.0 遗留的版本号与产物名问题。

新增

  • 自带默认配置:模块内置一份 JSON(res/raw/default_config.json),全新安装后自动应用一次。
  • 格式与「更多 → 导出 JSON 配置」完全一致,可直接替换。
  • null 键表示「未设置、保持缺省」,应用时跳过,不会写成 false。
  • 只应用一次:标记键 _defaults_applied 存在即跳过,不覆盖用户改动。
  • 设置页「恢复默认配置」可手动再应用一次,忽略标记,有二次确认。
  • 免 root 内置版按宿主包名只应用本机那一家的配置组,其它组静默跳过。
  • 内置 JSON 覆盖高德(139 键)、百度(51 键)、腾讯(92 键)与模块界面项(1 键)。
  • 腾讯组 92 键:15 个默认显示的工具为 true,其余 61 个已知工具为 false,16 个总开关为 null(保持缺省)。

修复

  • Version.TARGETS 把百度适配版本写作 22.0.0,设置页因此对 22.0.50 显示 ✘。改为 22.0.50。
  • app/build.ps1 输出名硬编码为 MapClean-lsp-v2.1.6.apk,不随版本号变化。改为从 Version.NAME 动态生成。
  • app/AndroidManifest.xml 版本停在 216 / 2.1.6。同步为 221 / 2.2.1。
  • 仓库 app/META-INF/xposed/module.prop 同步为 2.2.1 / 221,模块内置更新检查不再报旧版。
  • res/values/strings.xml 的 <description> 去掉写死的 v2.0.0。该字符串是系统「应用信息」展示的文案,属于用户可见残留。
  • MainActivity.buildFooter() 内 MapAdKiller v2.0.0 的版本行删除。该方法从无调用点,是死代码。

已知限制

  • 百度面板仍保留约 80px 空白带(原生 mHideHeight 几何下限)。
  • 腾讯工具宫格第 3 档(完全展开)未取得运行时截图验证,自动化上滑只到中档。
  • 腾讯 extendHeight 在官方包内无调用点,模块写入该字段生效,但与官方后续版本兼容性未知。
  • 免 root 内置版的「自带默认配置」仅做静态验证;内置默认配置的腾讯组仅做静态键集校验(键集与取值逐项对照 tmapclean.Spec),未做真机首启验证。

免 root 内置版(高德 / 百度 / 腾讯三个独立 APK,不需要 root / LSPosed / 任何框架)在主项目发布页:
https://github.com/ldxm666/MapAdKiller/releases/tag/v2.2.1

附件

文件 大小 SHA-256
MapClean-lsp-v2.2.1.apk 4,347,508 B 5ed6105166909e1e8e6a2951e3aa613936a86e25688dee3bee8a05fcb979469f
SHA256SUMS.txt — 校验值

Assets

2

10/12/2026, 12:11:55 PM

MapAdKiller 2.1.5 更新说明

发布日期:2026-10-12。版本码:215。对比基线 v2.1.2(版本码 212)。

修了什么:百度

发布日期:2026-10-12。版本码:215。对比基线 v2.1.4(版本码 214)。

2.1.4 的模块对百度地图完全没有反应:开关照写、界面照旧,logcat 里连一条 BMapClean 都没有。
腾讯与高德不受影响。

根因:一个 APK 只能声明一个 Xposed 入口(META-INF/xposed/java_init.list),
百度、腾讯两半只能靠共享源码里的显式转发到达。之前为了让「只并入高德」的免 root
精简构建能编译(它会把整个 bmapclean 包删掉),这两处转发被直接从共享源码里删掉了 ——
精简构建过了,完整模块的百度跟着一起失效:H.module 恒为 null,
每次挂钩都以 miss <id> (module null) 失败,装了等于没装。

  • 恢复 mapclean.MainHook.onModuleLoaded 与 mapadkiller.MainHook.onPackageReady 两处转发。
  • 精简构建改为生成 no-op 桩类(tools/build_variant.py 的 STUBS 新增 bmapclean/MainHook),
    而不是把调用从共享源码里拿掉。
  • 新增构建期护栏:app/build.ps1 在 DEX 里直接校验
    Lio/github/ldxm666/bmapclean/MainHook; 与 Lio/github/ldxm666/mapadkiller/TmapHooks;
    必须存在,缺一个就 fail the build;精简构建也把前者加进 required 列表,
    并把原来的「整包禁用」改成逐类禁用(允许空桩,不允许任何真正能挂钩百度的类)。

同一批的第二个回归:设置页「百度」那一页读写全挂

用户反馈:设置页里百度那一页怎么点都提示 「LSPosed 服务未连接」。

同一个成因的第二个漏接。bmapclean.App 的注释写着"由 io.github.ldxm666.mapclean.App
(真正的 Application)驱动",但那三处调用从来没接上 —— 于是 bmapclean.App.service
恒为 null:百度组(bmapclean_config)读开关永远返回缺省值、写开关永远返回 false,
UI 就把它显示成"服务未连接";bmapclean.App.app() 也为 null,诊断卡永远是"尚未收到回报"。

修复:mapclean.App 的 onCreate / bindService / diedService 补上
bmapclean.App.attach / onBind / onDied;精简构建用 no-op 桩类补位;
app/build.ps1 的护栏把 Lio/github/ldxm666/bmapclean/App; 纳入必查。

实机:I/MapCleanApp: onServiceBind ok 之后紧跟着
I/BMapCleanApp: onServiceBind ok (driven by mapclean.App)(修复前这一行不存在)。

  • 实机验证:baidu_adapter version=22.0.0 mode=capabilities →
    event=install_done pkg=com.baidu.BaiduMap ok=60 miss=0。
  • 高德四件修复无回归;签名与 2.1.2 起所有版本相同(cbecdaeb…54ed),可就地覆盖安装。

免 root 内置版(不需要 root / LSPosed / 任何框架)在主项目发布页:https://github.com/ldxm666/MapAdKiller/releases/tag/v2.1.5

附件 大小 SHA-256
MapClean-lsp-v2.1.5.apk 4,277,717 B 3611ae031b51b877d57802056f114b32262a2c4093da8bdf3491063ec625f18d
SHA256SUMS.txt — 校验值

模块签名与 2.1.2 起的所有版本相同(cbecdaeb…54ed),可就地覆盖安装。

Assets

2

10/12/2026, 11:01:31 AM

MapAdKiller 2.1.4 更新说明

发布日期:2026-10-12。版本码:214。对比基线 v2.1.2(版本码 212)。

本版的重点是 全新的免 root 内置版:把高德部分直接并入高德地图本体,
不需要 root、不需要 LSPosed、不需要任何框架,装完界面自己就是精简好的。
完整说明和安装包在 主项目 v2.1.4 发布页。

本页提供的是 LSPosed 模块,与内置版同一套源码,修复完全一致。

修复:四个「开关看起来没用」的问题

  • 「设置家」无效 —— 那条行由高德自己绘制,模块只决定放不放行,而首页面板实例被高德缓存复用,
    改开关不会重建它。本版让开关写完立刻生效(原地重建,不用退出重进),并且默认开启。
  • 工具开关无效(步行 / 骑行不出现) —— 高德自己的工具槽只有两项,模块以前只会删不会加。
    本版按"已开启"自动补齐空位(首页工具栏实测只有 5 格),只补首页那一份数据,不动高德自己的存储。
  • 「更多工具」没有独立开关 —— 从「工具 → 其他」提到 「首页」分组,标签「更多工具入口」。
  • 地图兴趣点开关完全无效 —— 原生库在集成模式下的布局与类加载器查找路径对不上,从未被加载;
    且原生侧把"没装成"报成了"装成了"。本版补齐加载路径、优先用宿主 nativeLibraryDir,
    并让原生侧如实汇报(日志新增 framework_bound=)。

其他

  • 开关写入即生效:首页工具面板原地重建,原生样式过滤重新下发。
  • 默认值与迁移调整:_amap_protocol_schema 210 → 211,只对"迁移前本来是开"的安装恢复,
    不覆盖用户显式选择。
  • 悬浮窗 UI 重做(作者头像 / 状态胶囊 / 横向滑动切分类 / 分类搜索 / 已开启工具排最前)。
  • 首页推荐画布过滤加固:卡名解析按宿主真实规则,流式信封兼容两种拼写。

验证

层级 结果
编译 BUILD OK,签名 cbecdaeb…54ed(与 2.1.2 同密钥,可就地覆盖安装)
版本 versionCode 214 / versionName 2.1.4
安装 真机就地覆盖 Success(2.1.3 → 2.1.4)
作用域 com.autonavi.minimap / com.baidu.BaiduMap / com.tencent.map
原生库 四 ABI lib/<abi>/libmapclean_labels.so,META-INF/xposed/native_init.list 齐备

⚠️ 关于免 root 内置版被安全中心报红

那是误报。包里内嵌了一个完整 APK(原版高德)、运行时从 assets 加载 dex、并内置签名绕过 ——
三点都来自重打包机制本身,无法通过"清理安装包"消除。

如果你介意红标,就用本页的模块版:它只是把模块装进框架,不改动任何地图安装包,不会被报毒。

附件

文件 大小 SHA-256
MapClean-lsp-v2.1.4.apk 4,277,717 B f1a62850667c16eac0cabbb82c54aeba899b5203de647fbf6cf19a4eeb72d6e6
SHA256SUMS.txt — 校验值

自本版起,发布页只提供成品 APK,不再附带源码包。

Assets

2

10/10/2026, 1:00:44 AM

MapAdKiller 2.1.2 更新说明

发布日期:2026-10-10。版本码:212。对比基线为上一发布版本 2.1.0 系列(Git 标签 v2.1.0-beta1,版本码 210)。

本次更新围绕实际使用中反复出现的问题展开:页面刷新后推荐内容重新出现、隐藏入口仍能被点到、选中的工具没有显示,以及隐藏地图标识误伤底图。设置、数据、布局和点击处理一起调整。

高德首页与工具栏

  • 首页信息流在请求返回、列表刷新和页面重建时继续按配置处理,覆盖天气、扫街榜、活动与营销内容等已验证模块。
  • 回家/公司、好友动态及地图活动入口保持独立设置,减少不同区域共用一个开关造成的误处理。
  • 修复面板上滑后地图无法拖动、收起与回弹状态异常的问题,保留原生手势与面板状态转换。
  • 工具按稳定身份处理,目录从“更多工具”核对;补齐步行、骑行,避免被远程下发的“超划算”等工具替换或混入。
  • 增加仅显示已开启工具的模式:未选择和未知的新工具默认隐藏;普通模式继续使用逐项显示设置。
  • 重排同步更新数据顺序与点击对象,避免显示的是一个工具,点击却打开另一个功能。

高德底栏与地点详情

  • 隐藏底栏入口时同步处理数据项和点击路由,修复“我的”附近误点到已隐藏打车入口的问题。
  • 调整剩余入口宽度与选中背景,修复按钮和背景尺寸不一致。
  • 新增“显示「发现好去处」照片推荐”独立开关,默认关闭,控制长按地图选点详情中的推荐标题与照片信息流。
  • 保留该详情页的地址、行政区、收藏、分享、新增和路线操作,以及“逛逛周边”功能快捷入口。
  • 推荐模块从页面数据与布局引用中同时删除,后续同类响应继续应用配置,避免只隐藏首屏后又被刷新回来。

百度地图标识与白屏修复

  • 地图标识改为一个整体显示开关,不再展示效果不稳定的细分类别选项。
  • 隐藏兴趣点图标与名称,保留道路、街道、城市、河流和其他基础地理内容。
  • 修复替换整个资源目录导致底图白屏的问题:保留百度原始目录,仅为经过结构验证的地图样式文件提供处理后的内容。
  • 原版资源不被覆盖,配置和登录数据不需要清除。无法识别的样式、文件打开失败时使用原始文件。
  • 百度与高德的原生处理按宿主隔离,避免一套资源 Hook 被装入另一地图中。

百度底栏与搜索页

  • 百度底栏除了可见按钮,还有面板状态切换时使用的透明点击代理。本版同步代理显隐、宽度和对应监听器,解决按钮已均分但点击范围仍停在原五列的问题。
  • 在原生重新绑定事件、页面恢复和面板状态变化后维护对应关系,避免“我的”误进入打车。
  • 保留第三入口在语音皮肤下的原生触摸语义,不把长按语音强行改成普通点击。
  • 去除搜索页“热度飙升榜”。仅过滤已验证的排名模型,历史记录与未知数据项保留。
  • 首页搜索框的推广轮播词恢复原生默认提示,同时清理其隐藏的推广查询数据。
  • 搜索页推荐词标签替换为原生常用地址入口,保留回家、去公司、收藏夹及自定义常去地点。
  • 保留景点、美食、酒店、厕所等搜索分类,以及用户输入、历史与正常搜索结果。
  • 继续保留活动图标、任务横幅、AI 此刻、推荐信息流和“我的”页精简能力。

配置与兼容性

  • 新备份格式按高德、百度和模块设置分组,解决同名配置覆盖,以及导回后只有高德恢复的问题。
  • 保留“未设置/使用默认值”的状态,避免导出把默认值永久写成显式选择。
  • 旧版高德平面配置仍可导入;旧文件没有包含的百度设置不会被错误重置。
  • 界面与 Hook 共享配置语义,变更使缓存失效,减少高频读取与开关显示不一致。
  • 大部分功能按实际接口能力安装,地图小版本变化不再直接导致整套增强失效;未知接口和数据结构回退原应用行为。
  • 官方 API 102 仅作编译依赖,完整 service/interface 102 服务类随模块打包,补齐 Vector 2.2 所需的公开服务接口。
  • 框架服务与作用域查询改为异步缓存,避免状态页等待 IPC 导致卡顿,并区分连接等待、作用域读取失败和未勾选地图。服务未连接时不直接判定模块未激活。
  • 校验 APK 签名、四 ABI 原生库、真实 ZIP STORED 存储方式与 16 KB 对齐,构建失败时停止输出。

验证范围与使用说明

主要设备验证版本为高德 17.00.0.2005、百度 22.0.0(1650),Android 16/LSPosed 2.1.1。回归包括配置备份、接口失败回退、工具列表处理、原生样式结构、文件替换边界及百度底栏实际布局和触摸分发。

百度标识开关已完成显示/隐藏、冷启动、放大缩小和拖图对照。百度搜索页已确认默认提示、常用地址与历史保留,热榜和推荐词移除。百度首页/我的已完成 24 次不同位置的点击切换,并覆盖面板展开与收起,未再跳转到打车。

高德地点详情已实机确认推荐标题与照片卡消失,地址、周边工具和路线操作保留。数据过滤通过 Android 真实 org.json 的 136 项断言,覆盖模块与布局引用同步移除、重复刷新、损坏 JSON、未知结构及歧义卡片 ID 的保守回退。

Vector 2.2 已对照官方公开接口完成依赖和状态逻辑检查,尚未在 Vector 2.2 实机复测;腾讯地图本轮未重新验证。不将静态检查写成实机适配结论。

覆盖安装后保持原有框架作用域;调整开关后强停相应地图再打开。地图标识默认隐藏,可在标识分组中开启显示;升级时旧细分类别设置合并到整体开关。

本次发布范围止于上述已验证功能,未纳入百度地点详情“猜你想搜/周边推荐”的新增处理。免 Root 整合 APK 本轮不发布,仓库保留构建与校验工具;普通模块 APK 本身仍需要相应框架。

发布核验

  • 最终模块版本:2.1.2,版本码 212,包名 io.github.ldxm666.mapadkiller。
  • Android 数据/配置/能力回归:1,295 项断言通过(1,120 + 136 + 18 + 12 + 9)。百度底栏布局与触摸专项另通过 274 项断言。
  • 原生文件替换专项 125 项断言,宿主选择与初始化顺序专项 55 项断言,四 ABI 编译通过。
  • APK v2/v3 签名、官方 API 102 依赖、Java/Native 入口、四 ABI ELF 和 ZIP 16 KB 对齐检查通过。
  • APK SHA256:98f27f430a86286ebcf09e2037cb095308128b5a593b5392889a52fec716c3aa。
  • 发布源码包排除原地图 APK、手机证据、日志、私有签名密钥与令牌;下载后可依据 SHA256SUMS.txt 核验。

Assets

3

10/8/2026, 11:58:01 AM

保留已验证的高德重构版本;百度以 2.0.0 为基线修复。

  • 高德:处理首页广告信息流、天气、扫街榜、打车营销卡及通勤入口,修复工具排列、上下拖动和底部选中背景,增加好友动态开关。
  • 百度:版本限定的原生组件与 Presenter Hook,停用旧全局视图扫描;配置缓存读取,整块与逐项开关共享规格,底部剩余入口均分,「我的」页逐卡控制。
  • 百度:隐藏左上角 V22 活动图标及“天天做任务”任务横幅,拦截创建、轮播和恢复显示。

实测适配:高德 17.00.0.2005、百度 22.0.0(1650);libxposed API 102;versionCode 210。腾讯部分沿用原实现,本轮未重新验证。

最新 APK 已完成编译、签名验证及 ADB 覆盖安装,百度安装日志显示 44 个 Hook 成功、0 个 miss;用户已确认本轮实机测试通过。

覆盖安装 APK,在 LSPosed 中保留模块启用状态及地图作用域,强停目标地图后重新打开。更改开关后同样重启目标地图。

完整 ZIP 包含 APK、源码、构建依赖和修复说明;不包含手机日志、截图、目标地图 APK 或签名密钥。
APK SHA-256:4dca8ad40c6c03a54e0aa3f8ec87ca45228956028956ef0d4ac57a1b2ff9261d。

修复与验证说明。GPL-3.0-or-later。

Assets

2

9/30/2026, 6:24:54 AM

v2.0.2(versionCode 202)—— 我的页两张卡:进页即消失、无留白

修复(用户真机逐轮反馈,最终形态)

  • 「百度运动」「全民共建」关掉后仍在:
    这两张卡是 JS 拿到 UGC 数据之后才渲染的,而摘卡的复扫原本只在 OnGlobalLayout 里跑
    —— 布局回调没触发的那几秒,卡片就明晃晃挂在页面上(用户:"刚进去一直在,要等一会儿才消失")。
    现在进入「我的」页后每 200ms 复扫一次(持续约 15 秒,之后自动停),
    卡片一被渲染出来就被摘掉,用户最多看到一闪。
  • 关闭后留下大片空白:早期版本是在页面画完之后才摘视图,而「我的」页是 AJX 自绘列表
    (按预计算坐标摆位,不会重排)→ 摘掉就留洞。
    现在摘除发生在布局阶段(配合上面的高频复扫),不产生空洞;
    并且 JS 若把卡再插回来,下一轮 200ms 复扫会当场再摘。
  • 注意:模块更新后必须重启目标 App(LSPosed 注入发生在进程启动时)——
    adb shell am force-stop com.baidu.BaiduMap 再打开。用户上一轮"卡片还在"的原因正是模块装得比进程晚。

一并交付(v2.0.2 前几轮已修)

  • 首页左上角运营气泡(新鲜事 / 一键穿越 / 古今地图)按资源 id 命中清除
    (event_entry_container / left_container,运行时按名解析,不怕数值重排)。
  • 搜索框热词轮播钉死为默认提示词「查找地点、公交、地铁」。
  • 「我的车 / 导航车标 / 热门语音 / 热门活动」开关失效修复(撤销 gk 共享闸门的误伤)。
  • 更新提示:6 小时节流改为只在同一次运行内生效(冷启动必查)+ 设置页顶部整宽大按钮
    (绿=已最新 / 黄=立即更新 / 蓝=点此重试)。

真机验收

  • 冷启动 → 进「我的」→ 3 秒内:百度运动 / 全民共建 / 反馈中心 全部消失且无空白,
    只剩用户开着的那几张卡(热门语音 / 我的车 / 导航车标 …);全程 FATAL=0。
  • 首页:搜索框为默认词、左上角无气泡。

Assets

1

9/30/2026, 4:24:38 AM

v2.0.1(versionCode 201)—— 开关失效修复 + 首页广告位清除

修复(都是用户真机报的问题)

  • 「我的车 / 导航车标 / 热门语音 / 热门活动」的开关失效(v2.0.0 引入):
    根因是 phoneInfo.gk 闸门 —— gk !== '0' 同时写在 8 张卡的 s-if 里,
    只要注入 gk=0,这些卡自己的开关就被压住(表现为"打开了还是不显示")。
    现在只在「这几张卡本来就都该隐藏」时才注入 gk;各卡改由 per-card 过滤控制,
    广告/运营卡也一并从共享闸门改成逐卡名摘除。真机日志:mine js 补丁里
    卡片名逐个列出(C.car/voice/carLogo/sport/contribution/common/...)。
  • 「全民共建 / 百度运动」关不掉:JS 层注入被 App 新版 bundle 加载机制挡住
    (biz_pkg_path 只覆盖外壳与资源包;内容入口 loadScriptFromString 一次都没触发;
    连"写新文件 + 同步 pkginfo.json 的 md5"也不被认)。
    改为视图层兜底:按标题锚点(百度运动 / 反馈中心)整块摘卡,
    复用首页同款 hideSection 的三重保险(满宽 / 高度上限 / 禁词消歧)。
    真机验证:两张卡消失,页面其余区块与页头不受影响。

新增(用户要求)

  • 首页左上角运营浮层清除:「一键穿越 / 古今地图 / 新鲜事」那类贴图广告,
    判据是"可点击 + contentDescription 命中白名单 + 位于屏幕左上",实测命中并 GONE;
    浮层是绝对定位的地图叠加层,GONE 不影响右侧「图层 / 反馈」按钮。
  • 搜索框热词轮播钉死:首页搜索框里的运营热词("青城山门票 / 成都海昌极地海洋公园…")
    不再轮播 —— 把 tv_searchbar_title(及其所属切换器子树)的文案钉成默认提示词
    「查找地点、公交、地铁」。不摘控件、不动搜索框。真机验证:60 秒后仍是默认词。
  • 两项都进了设置页新的**「首页广告位」**分组,默认关(= 已清除),可随时打开恢复。

说明

  • 开关语义不变:true = 显示。改完「我的」页开关重开该页即生效;首页开关强停 App 后生效。
  • 高德 / 腾讯侧能力与 v2.0.0 一致,未改动。

Assets

1

9/30/2026, 1:53:01 AM

MapAdKiller v2.0.0(versionCode 200)—— 合并 BMapClean

这一版把另一个独立模块 BMapClean(百度地图界面精简)整体并入本模块。
模块 id / 应用名 / 签名全部不变(io.github.ldxm666.mapadkiller),所以是就地升级:
LSPosed 里原来的启用状态、作用域勾选(高德 / 百度 / 腾讯)和已有配置全部沿用,
不用重装也不用重新勾选。原来那个 io.github.ldxm666.bmapclean 包可以直接卸载。

新功能一:设置页左右滑动分页

原来的单页长列表按 App 拆成三页,左右滑动切换,顶部标签也能直接点:

页 内容
百度地图 首页底部入口栏 / 工具宫格 / 回家去公司 / 天气 / 推荐信息流 / 「我的」页 + 模块状态卡
高德地图 首页标签栏 / 工具宫格 / 推荐内容 / 「我的」页 / 搜索框内页 + 去广告卡片
其他 隐藏桌面图标 / 工具宫格排序 / 调试日志 / 去广告说明

新功能二:版本检查与更新提示

  • 每次打开设置页自动查最新版本:多源回退,没有代理也能用 ——
    gh-proxy.com 反代 → jsDelivr CDN → jsDelivr(fastly) → GitHub 官方 → gh-proxy 反代 raw。
    结果缓存 6 小时,点版本行强制刷新;全部源失败只显示「未获取」,不会弹错误框。
  • 界面顶部显示当前版本 + 线上最新版本:已是最新 = 绿色,有新版本 = 黄色。
  • 发现新版弹窗,四个出口:镜像下载(gh-proxy,无代理可用)/ GitHub 下载 / Telegram 群 / 稍后更新。
  • 同时显示最佳适配应用版本并对照本机实际版本:
    百度地图 22.0.0 / 高德地图 17.00.0.2005 / 腾讯地图 11.6.0(一致 ✔ / 不一致 ✘)。

并入的百度侧能力(原 BMapClean v0.4.3)

  • 首页:底部入口栏逐项开关 + 剩余项自动均分、工具宫格 15 格逐项、回家 / 去公司、天气(地图右侧 + 底部行程卡)、推荐信息流
  • 「我的」页 —— 视图层方案三次回归后彻底废弃,改为数据层 + JS 层:
    • 数据层:改写 Talos JS 网络响应(qt=ads 的活动/资源位按 ads.content[].type 摘条目)、
      改写手机信息下发(补 phoneInfo.gk=0,一次关掉 天天领钱 / 出行保+借钱 / 我的店铺 / 导航车标)
    • JS 层:改写 TalosBridge.loadJSFile 的 biz_pkg_path 指向打过补丁的副本,
      在页面 JS 里把 sport / contribution / common(宫格) 从 cardList 摘掉
    • 真机结果:我的页只剩 头像 / 足迹卡 / 客服中心,无留白、无误伤

修复

  • 百度「我的」页必崩:拦截器读完响应体必须无条件换新 body,否则
    NetworkingModule$c.onResponse 二次 string() 抛 IllegalStateException: closed,
    OkHttp Dispatcher 线程 FATAL(真机栈为证,已修)。
  • 分页一次滑动只翻一页(松手时按拖动起始页判断,不再叠加)。

安装 / 更新

Assets

1

1.1.0

Stable

9/29/2026, 12:15:41 PM

MapAdKiller v1.1.0(versionCode 110)

版本口径统一:模块对外版本恒为 1.1.0 / versionCode 110。

新增开关(默认开 = 已处理,可随时关):

  • 关闭首页搜索框热词轮播(文字流动 / 运营广告词)
  • 关闭首页「去XXX 打车」打车浮窗(打车运营卡)

修复:

  • 首页搜索框文字流动 + 运营/广告词:在 BaseSearchBar 的两个词出口上换成系统默认提示词
  • 首页「去XXX 打车」运营浮窗卡:按「卡内文案锚点 + AJX 列表 item 结构」整卡摘除

其余能力保留:三家开屏断源、首页/我的页 UI 自定义、搜索页去广告、广告 SDK 拦截。
详细证据见源码仓库 docs/FIX-v1.1.0-hotword-and-ridecard.md。

Assets

1

9-1.0.9

Stable

9/26/2026, 5:07:40 PM

MapAdKiller v1.0.9 (versionCode 9)

  • 榜单/特色推荐卡统一开关
  • 液态玻璃设置页
  • 隐藏桌面图标后 LSPosed 入口常驻
  • 幽灵格机制(修复乱闪与点击穿透)
  • 更多工具/秒送识别与修复

Assets

1

1.0.7

Stable

9/18/2026, 1:24:02 PM

v1.0.7 (2026-09-18)

修复:高德首页「删了标签,悬浮栏没被占满」

藏掉标签只改了槽位宽(weight 平分),但那一层选中胶囊 id=tab_bg_layer 的宽度
是高德自己按 totalWidth / 标签总数 算死的,它不知道我们藏了几个。
于是 5 个标签变 2 个之后胶囊还是 201px,首页 / 我的悬在 1/4、3/4,中间和两头全是空的。

现在每个可见槽位的胶囊层会被撑成槽位宽度本身 —— 等价于高德自己按 2 个标签排出来的样子。
真机实证:TAB-FILL slot=503 visible=2 rowW=1006,整条悬浮栏占满。

修复:「部分隐藏」会把路线规划页的信息模块一起抹掉(严重)

根因是整棵 decor 树照单全收:路线页备选卡片的里程文案 2379公里 / 34米
命中了首页信息流的「距离标签」规则(isDistanceLabel),collapseHost 顺着父链
爬到列表宿主,把「24小时22分 / 大众常选 / 封路」那一整排路线信息模块 GONE 掉。

现在加了页面闸门(铁律 G):首页与「我的」页都带底部悬浮标签栏
(LiteTabBar > TabItemLayoutV2),路线页 / 搜索页 / 导航页没有。
认不出标签栏就整轮放弃,一个节点都不碰;列表绑定钩子同样受这道闸门约束。
真机实证:进入路线页后 COLLAPSE / BIND-HIDE 归零,三个备选路线卡片完整。

新增:隐藏桌面图标(可开关)

LAUNCHER intent-filter 移到 activity-alias(.LauncherAlias)上,
设置页新增「隐藏桌面图标」开关,切的就是这个组件的 enabled 状态。

  • 隐藏时挂一条常驻通知当回家的路(点按回设置页),并申请 POST_NOTIFICATIONS;
  • 手动兜底:adb shell am start -n io.github.ldxm666.mapadkiller/.MainActivity;
  • 在 LSPosed 管理器里把模块停用不受影响,桌面图标状态存在系统组件表里。

真机实证:disabledComponents: io.github.ldxm666.mapadkiller.LauncherAlias,
resolve-activity -c LAUNCHER 返回 No activity found,通知正常常驻。

新增:「收藏夹」独立开关

宫格第 3 行是轮播格(景点游玩 / 离线地图 / 通行费助手 / 收藏夹 / 更多工具 …
在几个槽位里换着显示)。「收藏夹」以前被并进「更多工具」的别名,
受「扩展工具页」和「更多工具」双重夹击,不管怎么设都是隐藏的。

  • 从 TOOL_EXTRA_LABELS 里摘出来,TOOL_ALIAS 归一成自己的键;
  • 留不留,只看这一格此刻显示的那个文案自己的开关,不再看 cellKey
    (那是首见文案钉住的键,轮播格钉错了就永远放不出来);
  • 「保过一次就永久保」:轮播轮到收藏夹时会把格子放出来,并把它从隐藏登记表里摘掉;
  • 收行判据改成配置驱动(markKeep)并支持反悔:
    以前按当时的 width/height 判空行,AJX 首帧还没量过时整行会被误判成空行收掉,
    而 squashedRows 每轮重申 GONE+height=0 —— 那一行就永久死了。

新增:隐藏搜索页金刚区(美食 / 酒店 / 加油站 / 休闲玩乐 / 扫街榜)

搜索页顶部那排分页运营位,设置页新增「高德 · 搜索页」分区独立开关(默认显示)。

识别方式是结构投票:只有当某个容器子树里同时挂着 >=4 个分类文案时才认它,
命中从上往下第一个满足的祖先(最小那个),再往上走几层把分页小圆点一起收掉。
单看一个「美食」绝不动手 —— 首页信息流、我的页、宫格里都有它。
这条规则不属于首页,所以跑在页面闸门之前。
真机实证:SEARCHCAT-HIDE Container [31,13 1017x223],金刚区与圆点一起消失,
搜索框 → 快捷 chip → 历史记录 之间不留空带。

修复:百度地图卡在开屏,要按返回键才进主页(严重)

根因:广告 SDK 自动检索把 com.meishu.sdk.core.ad.splash.SplashAdLoader#loadAd
一起吞了(不 proceed、返回默认值)。百度开屏正是等这条回调往下走的,
回调永远不来 → 开屏流程永远收不了尾,屏幕还留一层不消失的暗色蒙层。

修法:凡是开屏链路(类名或方法名含 splash / kaiping)的加载方法一律不吞,
原方法照常执行。开屏广告不需要在这一层拦 —— 视图层已经用 alpha=0 兜底,
零曝光且完全不影响开屏自己的收尾节奏。

修复:百度开屏广告被 GONE 掉同样会掐死收尾

视图层原来对开屏广告根做 setVisibility(GONE)。真机实证:GONE 之后
「跳过 5s」倒计时与收尾回调一起死,同样表现为卡开屏。
改成 setAlpha(0f) —— 视图照常 measure/layout/跑动画/收回调,只是看不见。
真机实证:日志从 hidden 变 hidden(alpha0),倒计时 5s→4s 正常走,
百度冷启动 1 秒内进入 MapsActivity,无蒙层、无广告曝光。

修复:首页「去幸福路步行街」快捷卡被压成半张(用户报「半遮住、很难看」)

根因:那张卡里也有一个写着「打车」的按钮,ascendSmallCell 照样爬到了它的容器
(161x95,父容器 1006x210),于是它被当成工具宫格的一格;packRow 随后
按工具格尺寸(158 宽)把整张卡重排 —— 卡片文字被压成 84px 宽,
「去幸福路步行街」只剩「去幸」两个字。

真机日志证据:TOOL-HIDE 打车 [801,57 161x95] + TOOL-REPACK [0,0 1006x210] cells=4。

修法:两道形状闸门。工具格实测 158x147 / 158x164,所以

  • applyTools 里先问 looksLikeToolCell():宽 120220 且高 120200 才算宫格格子;
  • packRow() 入口再加一道同样的闸门,任何被误判的容器都不会被重排。

真机实证:TOOL-HIDE 打车 [636,0 158x164](真格子),
卡片文案恢复 w=617(与停用模块时的基线完全一致),TOOL-REPACK 不再误伤。

修复:「设置家 / 设置单位 / 常去地点」不再连带整张卡

这一排和「去XX」快捷卡常常在同一个 AJX item 里,原来走 collapseHost
会把整张 item 一起收掉。现在 hideChipsRowOnly() 只摘那一排
(最小、且子树里挂着 ≥2 个 chips 文案的祖先),真机日志 CHIPS-HIDE。

修复:「更多工具」页白屏 + 收藏夹看不见(严重)

两个症状同一个根因:搜索页金刚区的规则跑到「更多工具」页上去了。

applySearchCats() 按设计跑在首页闸门之前(搜索页没有底部标签栏),
而「更多工具」页的「服务」区里全是同一批分类词 —— 美食 / 洗车养车 / 洗牙 /
休闲玩乐 / 订酒店… 于是整页被当成金刚区收掉,用户点进去就是一片白。

同一个根因还让「收藏夹」看着像没生效:那一页的入口全被收没了,
开关开不开当然都看不见(开关本身一直是好的)。

另外标签级即时隐藏(消闪烁那段)以前不分页面:只要文案命中就盖掉,
于是「更多工具」页里的「代驾 / 旅游度假 / 景点游玩…」变成"有图标没字",
就是用户说的「偶尔跳出其他工具出来」。

修法(两道):

  • 金刚区规则加结构护栏:命中的容器祖先链上必须有 HorizontalScroller
    —— 搜索页金刚区是分页横向滚动条里的一排,「更多工具」页的分类宫格不是;
  • 标签级即时隐藏加归属护栏:工具键必须真的是宫格格子(looksLikeToolCell),
    规则键必须真的在首页(homeCtx)。

真机实证(A/B 对照):

停用模块:更多工具页 30 条文案正常渲染,「最近使用」里 收藏夹 / 驾车 / 租车 都在
启用模块:同样 30 条文案,收藏夹在,白屏消失
模块动作全部落在首页(TOOL-HIDE 几何全是 158x147 / 158x164)
搜索页:SEARCHCAT-HIDE Container [31,13 1017x223] 照常命中

新增:首页运营推广卡槽位开关(「去XX」/ AI叫车 / 顺风车…)

首页底部那个槽位是高德的轮播推广位,标题一天能换好几张。实测同一台机器上
连着几十分钟就换了五张:

去幸福路步行街    / 有座不拥挤 · 行程有保障     / 打车
帮我预约车辆      / 通勤高峰担心拥堵、叫不到车 / AI叫车
帮我叫一辆空气清新的车 / 怕叫到臭车?试试个性化叫车 / 去打车
预约顺风车,一口价超便宜 / …                 / 去预约
顺路搭模式上线了  / 拼座7折起 · 乘客邀请直接拼入 / 去预约

盯文案永远追不上,所以最后落到结构上。真机 uiautomator 实测这五张卡版式完全一致:

标题  [185,2093] w≈580~617 h=55
副标  [185,2161] w=150~179 h=39   (两个 chip)
按钮  [845,2130] w=112 h=47       (右侧药丸)

判据:整屏宽(≥90%)+ 高 180320 + 一个 ≥5 字的标题 + 一个 27 字的短按钮,
并且这个节点本身就是列表 item(父级是 AjxList2)。

三条护栏:

  • 宫格 item 是 1080x508,高度直接出界;
  • 「我的」页那些整屏宽的行里必有 MY_* 文案,一律排除;
  • 天气 / 限行卡形状也撞得上,按「°C / 天气 / 限行 / 气温 / 降雨」排除。

两个实现要点(都踩过):

  1. 扫文案时直接读视图(AJX 的 Label 把文字挂在 contentDescription 上),
    不能查 anchors 索引 —— 索引里只有"被规则认领过"的文案,新面孔永远等不到;
  2. 绑定那一刻 item 还是 0x0,判不了几何 —— 所以除了 bind 钩子,
    每一轮 applyPass 在布局稳定后还会再找一遍(PROMO-HIDE)。

真机实证:BIND-HIDE home_quick_card [0,0 0x0] —— 命中的正是没写进任何文案表的
「顺路搭模式上线了 / 去预约」那一版。

新增:「去XX」快捷打车卡单独开关

首页底部那张「去幸福路步行街 / 有座不拥挤 / 行程有保障」的智能目的地卡,
设置页新增独立开关(默认显示)。

判定用的是「标题形状 + 旁证」两条:标题以「去」开头、长度 2~16、不是工具键也不是
chips 键;并且往上 8 层内能找到挂着「有座不拥挤 / 行程有保障 / 打车…」的小块。
只有形状命中就乐观登记,旁证由每一轮 applyPass 再判 —— 因为标题 setText 的时候,
旁边那行小字往往还没写进去,当场判定必然落空。

真机实证:BIND-HIDE home_quick_card [37,507 1006x242],卡片整条消失,
页面收得干净,不留空带。

增强:常驻重申心跳

resume 时只排 6 轮 APPLY(最晚 4.2s),之后 applyPass 停手;而 AJX 在滚动 /
重渲染时会把被压掉的 item 复活。现在加了一条只跑 reassert() 的 300ms 心跳,
并在 onBindViewHolder 里对已判定要收的 item 立刻重新按回去。

修复:隐藏不再写 lp.height = 0

AJX 重绑时会 setVisibility(VISIBLE) 但保留我们写的 height=0,
那张卡就变成"半张、文字被切"的残片。改成只 GONE:GONE 的节点根本不会绘制,
从机制上不可能产生残片。

其它

  • 页面闸门同时让「我的」页之外的误伤面归零;
  • versionCode 7 → 8。

Assets

1

v1.0.6

Stable

9/13/2026, 8:09:47 AM

v1.0.6 (2026-09-13)

新增:广告 SDK 自动检索 + 学习 + 持久化

不再只靠内置的厂商前缀表 —— 内置表永远只能找到已经写进去的厂商。现在:

  • 自动发现:扫描目标 App 自身 APK 里的 dex 字符串表(纯 Java 解析 string_ids,
    只读短字符串、不遍历全文件,无 DexKit / 无 native 依赖),既匹配内置前缀,
    也按广告特征词找出可疑类,再从类名反推厂商根包名;
  • 安全闸门(重要):广告特征词必须落在类名前 4 段命名空间内 + 基础设施根黑名单。
    否则会误学 —— 实测高德曾被学出 com.alipay / com.google / com.huawei /
    com.taobao / com.alibaba 等 15 个非广告包,真拦下去会把登录、支付、地图本体一起打死;
  • 持久化:hook 侧拿到的 RemotePreferences 是只读实现
    (UnsupportedOperationException: Read only implementation),
    且超时/广播跨进程唤起在 HyperOS 上会被拦 → 改用 ContentProvider 通道
    (ContentResolver.call() 按需唤起设置 App 进程)把学到的东西交给 App 侧落盘,
    并加了一层本地 prefs 暂存兜底;
  • 下次直接拦:学到的厂商前缀跨进程保存,三家地图下次启动读到即生效。

设置页新增「已捕获广告 SDK:N 个」一行,点开可看清单、可一键清空重新学习。

修复:框架类被全局 hook 导致百度闪退 / 腾讯 ANR(严重)

SDK 自动 hook 最初沿父类链往上走,从 SDK 类一路升到 android.view.View /
android.app.Dialog / android.content.ContextWrapper 并挂上了钩子:

SDK BLOCK android.app.Dialog#show          ← 全局 Dialog 被拦
SDK CTX   android.app.Activity#startActivityIfNeeded
SDK CTX   android.content.ContextWrapper#startService
→ ANR in com.tencent.map / 百度地图闪退

这与 v1.0.2 白屏事故同源,是本模块第一红线。已改为只处理声明在 SDK 类自己身上的
方法,并加框架包硬闸门(android. / java. / dalvik. / androidx. / kotlin 一律不动)。
实测三家 App FATAL=0 / ANR=0,框架类 hook 残留 0。

修复:状态显示与实际不符

原来用 StatusCheck.amEnabled() 自检 —— 它依赖"模块被注入自己的进程",
实测 LSPosed 不会这么做,于是明明已激活却显示未激活。
改为两个可验证的真实信号,并配红/绿点:

● 已激活 · LSPosed 2.1.1                 (LSPosed 服务可达)
● 作用域已勾选 · 高德 / 百度 / 腾讯(3/3) (向服务查询 getScope())

修复:设置 App 启动即崩

NoClassDefFoundError: io.github.libxposed.api.XposedInterface$Hooker
  at Config.prefs → SdkAutoBlock.loadLearned → MainActivity.sdkSummary

io.github.libxposed.api.* 是只编译不打包的 stub,App 进程里没有这个包。
已加 hookSide 闸门:App 侧一律不触碰 H / Config.prefs()。

优化:百度开屏广告隐藏提速 3 倍

原来只有等"跳过"文字出现才认得出广告,广告先亮 1 秒。补上实测命中的 token
(qumeng / advlib / splashcountdown)并加 onPreDraw 探针:

旧: BMAP splash ad hidden t=1000ms hit=skip-btn:...SplashCountdownView
新: BMAP splash ad hidden at=350ms hit=qumeng:com.qumeng.advlib...

优化:高德首页内容流

信息流卡片改为挂列表适配器的 onBindViewHolder,在绑定完成的同一帧内判定并隐藏;
并补挂 onPreDraw 复查 —— 新帖的文字往往在 onBindViewHolder 返回后才写入,
只在绑定时刻判会漏。实测滚动过程中 100+ 次 BIND-HIDE,几何全为 0x0(从未被绘制)。

其他

  • 品牌统一:设置页标题 MapAdKiller,分类标题标明作用域(高德 · 首页工具宫格 等)
  • 修复「已捕获广告 SDK」计数不刷新(onCreate 时的空快照 vs 点开时的实时值不一致)
  • 替换模块图标

Assets

1

v1.0.5

Stable

9/11/2026, 1:22:06 PM

v1.0.5 (2026-09-11)

新增:高德首页 / 「我的」页 UI 自定义(并入原 AmapEnhancer 引擎)

把独立模块 AmapEnhancer 的整套 UI 引擎合并进本模块(包名仍是
io.github.ldxm666.mapadkiller,百度 / 腾讯 hook 原样保留)。模块 App 现在带有设置页,
改动写入 LSPosed RemotePreferences,Hook 侧同名 group 读取,写入即生效。

可配置项:

  • 主页标签栏:逐 tab 显示/隐藏(首页 / 探索 / 长按说话 / 打车 / 我的),
    剩余 tab 自动均分重排,不变形
  • 首页工具宫格:10 个工具逐格显示/隐藏,剩余格子行内左对齐补空;
    另加「扩展工具页」开关(景点游玩 / 离线地图 / 通行费助手 / 收藏夹 / 旅游度假,默认隐藏)
  • 首页推荐内容:天气卡 / 周边景区 / 榜单帖 / 距离卡(公里与米)/ 精选榜单 /
    攻略内容流 / 问问 AI / 推荐频道栏 / 设置家等 chips
  • 「我的」页:订单栏 / 车辆服务栏 / 达人任务 / 运营卡栏 / 猜你喜欢 / 资质信息与协议中心

关键修复:一条推荐区规则把整个工具宫格抹掉

旧引擎让「文本锚点」直接决定「收缩到哪个祖先」。宫格第 3 行轮播出的 景点游玩
命中了推荐区锚点里的「景点」子串 → 被当成 feed_scenic → 沿父链爬到 AJX 列表 item
——而那个 item 就是整个工具宫格 → GONE + 高度归零。整排工具因此消失。

修复:先判定归属面,再执行动作;工具格/行/宫格登记为受保护节点,
任何「收缩 item」的爬升路径一旦穿过受保护节点立即中止。

关键修复:排版重叠错乱

曾尝试跨行把 更多工具(宫格第 3 行)搬进第 1 行的空槽,
实测会被 AJX 自有模型的下一次布局覆盖,两套几何叠在一起 → 标签重叠。
现已退回安全实现:只做行内左对齐压实 + 空行压 0 高,绝不改格子的父节点。

根治:信息流卡片改为「绑定即隐藏」,不再渲染后再删

实测 AJX 列表适配器 ...ajx3.widget.view.list.a 是混淆的,字段只有
IAjxContext / zr / nv0 —— native 侧不存在条目数据列表,数据在 JS 引擎里,
Java 层没有可直接过滤的数据结构。因此改为挂载该适配器的 onBindViewHolder,
在条目绑定完成的瞬间(仍在本次 layout pass 内、这一帧还没绘制)判定并隐藏:

  • 真机实测 29 次 BIND-HIDE,几何全是 0x0 —— 卡片一次都没有被绘制出来
  • 不再依赖「下一帧再扫全树」,也不再 600ms 常驻轮询

其他修复

  • 配置不保存:edit().apply() 是异步落盘,切完开关立刻退出设置页会丢写入 → 改 commit()
  • 设置页开关显示错:LSPosed 服务是异步绑定的,绑定前 readState() 只能回退默认 true,
    重开设置页会看到「全开」→ 现在绑定成功后按真实存储重刷,绑定前开关禁用
  • 频道栏摘不掉:它的文案既不走 Label.setText(String) 也不走 Label.setAttribute("text",…),
    文本锚点完全失效 → 改为结构识别(HorizontalScroller + ≥3 个高 60~170、宽 ≤250 的 chip;
    注意要忽略 53x11 的下划线指示条,否则永远匹配不到)
  • 锚点丢事件:车辆服务 这类锚点在 setText 时其 HorizontalScroller 尚未 attach,
    旧实现重试 3.5 秒后放弃 → 改为常驻 WeakHashMap 索引,每轮重试到挂载为止
  • 工具名与实际文案不一致:火车票机票→火车票、高德扫街榜→高德扫街(别名归一)
  • 我的页条目带装饰字符(实际是 -资质信息 / 协议中心-)导致精确匹配永远失败 → 归一后匹配
  • 距离卡只认「公里」,漏掉同城卡的「597米」→ 补上米

性能

  • 每个锚点不再各自 postDelayed(500ms) + 150ms×20 重试,隐藏/重排合并到下一帧执行一次
  • 配置改为每轮 getAll() 快照一次,锚点判定读内存(原先每次判定都走一次 RemotePreferences IPC)
  • 去掉 600ms 常驻全树轮询,改为 resume 后按 100/350/800/1500/2600/4200ms 收敛几轮

其他

  • 替换模块图标
  • module.prop 补齐收录所需标准字段(name / version / versionCode / author / description)

Assets

1

v1.0.4

Stable

9/10/2026, 10:45:14 AM

v1.0.4:与 v1.0.3 代码完全一致的重新发布版本。

v1.0.3 的发布说明曾被收录站点以乱码快照缓存,本版本通过版本号升级(versionCode 5)
强制重新索引。功能内容:

  • 修复 v1.0.2 起 Hooker 接口方法名错误(hook -> intercept)导致的全部 Hook 静默失效(AbstractMethodError)
  • 修复百度 21.20.30 启动白屏/卡开屏(回退未经真机验证的开屏 Hook)
  • 适配百度 21.20.50:自营开屏绕过数据闸门,新增 SplashViewContainer.addView 探测拦截(品牌层/倒计时流程不受影响)
  • hookAll 跳过 abstract 方法;Hook 首次触发记录 HIT 日志

真机回归:高德 17.x / 百度 21.20.50 / 腾讯 11.x(Android 16, LSPosed API 102)

Assets

1

v1.0.3

Stable

9/10/2026, 10:35:07 AM

v1.0.3 关键修复与适配:

  • 修复 v1.0.2 起 Hooker 接口方法名错误(hook -> intercept)导致的全部 Hook 静默失效(AbstractMethodError)
  • 修复百度 21.20.30 启动白屏/卡开屏(回退未经真机验证的开屏 Hook)
  • 适配百度 21.20.50:自营开屏绕过数据闸门,新增 SplashViewContainer.addView 探测拦截(品牌层/倒计时流程不受影响)
  • hookAll 跳过 abstract 方法;Hook 首次触发记录 HIT 日志

真机回归:高德 17.x / 百度 21.20.50 / 腾讯 11.x(Android 16, LSPosed API 102)

Assets

1

1.0.2

Stable

9/8/2026, 10:34:17 AM

v1.0.2: libxposed API 102 refactor; sync Amap 17.00 / Baidu 21.20.30 / Tencent 11.5.0; cached SDK splash (SplashViewContainer) kill; in-app ad expansion (POI/route/floating promo); ad-badge ViewKiller.

Assets

1

1.0.1

Stable

9/4/2026, 5:20:46 AM

v1.0.1: 高德 14 / 百度 34 / 腾讯 8 hook 点 + ViewKiller 兜底。换用 io.github 命名空间包名。

Assets

1