Release Notes — X AdFree 2.0.2(versionCode 21)
中文
从 1.5.1 到 2.0.2:一次架构换代
1.5.1 是绑定 X 12.3.1 类名的单版本模块——X 每发一个小版本,模块就会失效并等待人工适配。2.0.x 把这层"版本绑定"整个换成了运行时动态适配:
- 安装时按"特征指纹 + 形状校验 + 运行时见证"在 X 进程内自动定位过滤点,不维护任何逐版本类名表;
- 普通 X 小版本更新(混淆名漂移)由 DexKit 指纹梯子自动吸收,多数情况下无需等模块更新;
- 解析结果按安装身份缓存,日常启动几十毫秒内生效;
- 任何时候解析或验证失败,模块都会以失效安全(fail-open)方式放弃过滤,X 本身保持完全可用。
功能与体验
- 去除首页时间线(For You / Following)、帖子详情页与评论区的广告;
- 广告识别基于数据模型语义(promoted 元数据 / entryId 前缀 / 应用自身判定)三态评分:只有确定性广告会被移除,不确定内容一律放行,以此尽量避免误删正常帖子(不承诺绝对零误删);
- 无设置页:开关、作用域、还原内联钩子全部通过 LSPosed GUI 管理。
纯净运行时
- 模块自身零联网:无更新检查、无远程配置、无遥测,APK 甚至未声明 INTERNET 权限;
- 无后台服务、无轮询、无 WakeLock;解析线程空闲后自动退出,只保留随 X 进程存在的过滤钩子。
兼容性与验证
- 面向 X 12.x 小版本动态适配;当前真机验证 12.17.0-release.0(12.3.1 仅作为历史兼容种子保留,未在 2.0.x 架构上重新实测);
- Android 9.0(API 28)及以上;需支持 libxposed Modern API 102 的官方 LSPosed;
- 遇到 X 大版本架构换代导致指纹全部失效时,模块会安全退避(不去广告但 X 正常),等待版本更新。
升级说明
- 直接安装覆盖升级(签名不变);
- 确认 LSPosed 中模块已启用、作用域仅 X(
com.twitter.android); - 保持 LSPosed"设置 → 还原内联钩子"中勾选 X(
libpairipcore.so需要); - 强制停止 X 后重新打开。首次启动进行一次性解析(约 1 秒),之后启动直接命中缓存。
已知限制
- 非 12.17.0 的未来小版本尚未实测(架构上可自适配,但不承诺零维护);
- X 若删除全部已知业务指纹,模块 fail-open 放弃过滤直至版本更新。
English
1.5.1 → 2.0.2: an architecture change
1.5.1 was bound to X 12.3.1 class names — every minor X update broke it until manually re-patched. 2.0.x replaces that binding with runtime dynamic adaptation:
- Filter points are located inside the X process via feature fingerprints, shape verification and a runtime witness — no per-version class tables;
- Ordinary X minor updates (obfuscation drift) are absorbed automatically by the DexKit fingerprint ladder in most cases;
- Resolved targets are cached per install identity; everyday launches take effect within tens of milliseconds;
- Whenever resolution or verification fails, the module fails open — X itself keeps working unfiltered.
Features
- Removes ads from the Home timeline (For You / Following), post detail pages and replies;
- Detection scores semantic data-model evidence (promoted metadata / entryId prefixes / the app's own ad predicate) with tri-state verdicts: only confirmed ads are removed, uncertain items always pass through, minimizing the chance of normal posts being dropped (not an absolute guarantee);
- No settings screen: everything is managed through the LSPosed GUI.
Pure runtime
- The module itself makes zero network connections: no update checks, no remote config, no telemetry — the APK does not even declare the INTERNET permission;
- No background services, no polling, no wake locks; the resolver thread exits when idle, leaving only the filter hook that lives with the X process.
Compatibility
- Dynamically adapted to X 12.x minor versions; currently verified on 12.17.0-release.0 (12.3.1 is retained only as a historical compatibility seed, not re-tested on the 2.0.x architecture);
- Android 9.0 (API 28)+ with official LSPosed supporting libxposed Modern API 102;
- On a generational X redesign that invalidates every fingerprint, the module fails open until an update.
Upgrade
- Install over the previous version (same signing key);
- Confirm the module is enabled in LSPosed with scope limited to X (
com.twitter.android); - Keep X selected under LSPosed Settings → Restore inline hooks (required by
libpairipcore.so); - Force-stop X and reopen. The first launch performs a one-time resolution (~1s); later launches hit the cache.
Known limitations
- Future minor versions beyond 12.17.0 are not yet tested (the architecture self-adapts, but zero maintenance is not promised);
- If X removes all known business fingerprints, the module fails open until updated.