Repository navigation
Releases: ldxm666/MapAdKiller
Release list
MapAdKiller v2.0.2
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。 - 首页:搜索框为默认词、左上角无气泡。
MapAdKiller v2.0.1
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 一致,未改动。
MapAdKiller v2.0.0
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摘掉 - 真机结果:我的页只剩 头像 / 足迹卡 / 客服中心,无留白、无误伤
- 数据层:改写 Talos JS 网络响应(
修复
- 百度「我的」页必崩:拦截器读完响应体必须无条件换新 body,否则
NetworkingModule$c.onResponse二次string()抛IllegalStateException: closed,
OkHttp Dispatcher 线程 FATAL(真机栈为证,已修)。 - 分页一次滑动只翻一页(松手时按拖动起始页判断,不再叠加)。
安装 / 更新
- 覆盖安装即可(同签名、同包名):
adb install -r -d MapAdKiller-v2.0.0.apk - 无代理镜像下载页:https://gh-proxy.com/https://github.com/ldxm666/MapAdKiller/releases/latest
- 更新后建议强停三家地图 App 再重新打开;「我的」页开关改完重开该页即生效
- Telegram 群:https://t.me/+2rqisPe5tJxjNTk1
MapAdKiller v1.1.0
MapAdKiller v1.1.0(versionCode 110)
版本口径统一:从本版起,模块对外版本恒为 1.1.0 / versionCode 110,
module.prop» / AndroidManifest.xml» / 设置页 / Release tag 全部一致。
新增开关(默认开 = 已处理,可随时关)
- 关闭首页搜索框热词轮播(文字流动 / 运营广告词) —— `hotword_off»
- 关闭首页「去XXX 打车」打车浮窗(打车运营卡) —— `ride_card_off»
本次修复
- 首页搜索框里的字会自己流动,有时还是广告:反编译
BaseSearchBar» 确认, 写txt_hotword» 的出口只有setHotWordTxt(..)» /setPreWordTextView(..)» 两个私有方法;
新增HotWordGuard» 挂这 4 条重载,把第一个 String 参数换成 App 自己的string/title_search_hint»,热词品牌图标一并 GONE。
真机日志:`HOTWORD-FREEZE '灌县古城' -> '查找地点、公交、地铁'»。 - 首页总会冒出「去幸福路步行街 / 有座不拥挤 · 行程有保障 / 打车」打车浮窗:
真机树实证是 AJX 卡片(列表 item 根 =AjxAbsoluteLayout(1006x242)»), 文案服务端下发(dex / resources / assets 全量扫描均无此串), 按「卡内文案锚点 + AJX 列表 item 结构」双判据整卡摘除(首帧之前 + 锚点兜底复扫)。 真机日志:RIDE-CARD-SWEEP '有座不拥挤' [37,391 1006x242]»。
其他
- 搜索页去广告(`search_ad»)、首页/我的页 UI 自定义、三家开屏断源等历史能力全部保留
- 详细证据与 hook 设计:`docs/FIX-v1.1.0-hotword-and-ridecard.md»
安装:需要 root + LSPosed(libxposed API 102)。更新模块后建议卸载重装再强停目标 App。
三个地图的包名作用域:com.autonavi.minimap» /com.baidu.BaiduMap» / `com.tencent.map»。
MapAdKiller v1.0.9
更新
新增
- 榜单/特色推荐卡统一开关(发现好去处/尝尝这里等板块,覆盖首页/我的/路线/目的地,结构识别)
- 液态玻璃设置页:抽屉导航、配置管理(保存/恢复/导入/导出)、联系作者入口、深色模式自适应
- 隐藏桌面图标后 LSPosed 管理器入口常驻(CATEGORY_INFO 通道)
- 顶部运营横幅 / 悬浮推广球强制清除
- 「秒送」工具识别
修复
- 工具格隐藏改为「幽灵格」:隐藏格不再被点击穿透,AJX 重建不再复活(乱闪修复)
- 搜索页快捷入口整排隐藏修复
- 更多工具页白屏修复
SHA-256: cbecdaeb31836c4ab2ffe9271b47148810d1335f3a70782dc9d2d29d986554ed
v1.0.8
v1.0.7
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 / 天气 / 限行 / 气温 / 降雨」排除。
两个实现要点(都踩过):
- 扫文案时直接读视图(AJX 的 Label 把文字挂在 contentDescription 上),
不能查 anchors 索引 —— 索引里只有"被规则认领过"的文案,新面孔永远等不到; - 绑定那一刻 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。
v1.0.6
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 点开时的实时值不一致) - 替换模块图标
v1.0.5
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)
v1.0.3
关键修复 v1.0.2 起 Hooker 接口方法名错误(hook -> intercept)导致的全部 Hook 静默失效,并适配百度地图 21.20.50。
- 修复 AbstractMethodError:v1.0.2 编译期 stub 的 XposedInterface.Hooker 方法名误写为 hook,真实 API 102 为 intercept,导致所有 Hook 运行时静默失败(高德无效 / Android 17 反馈均为此因)
- 百度 21.20.30/21.20.50 启动白屏/卡开屏修复:回退未经真机验证的开屏 Hook(v1.0.2 实际误 Hook 了 android.view.View 的全局 attach),放开开屏必经路径的吞调用
- 百度 21.20.50 自营开屏(淘宝闪购等)绕过数据闸门:新增 SplashViewContainer.addView 探测,命中 AD SDK 特征(优量汇/穿山甲/sigmob/kwai)或「跳过」按钮时隐藏广告子树,品牌层与倒计时流程不受影响
- hookAll 跳过 abstract 方法;每个 Hook 首次触发记录 HIT 日志便于诊断
真机回归:高德 17.x / 百度 21.20.50 / 腾讯 11.x(Android 16, LSPosed API 102)