Skip to content

2.0.2

Latest

Choose a tag to compare

@yylsping yylsping released this 21 Aug 05:58

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 正常),等待版本更新。

升级说明

  1. 直接安装覆盖升级(签名不变);
  2. 确认 LSPosed 中模块已启用、作用域仅 X(com.twitter.android);
  3. 保持 LSPosed"设置 → 还原内联钩子"中勾选 X(libpairipcore.so 需要);
  4. 强制停止 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

  1. Install over the previous version (same signing key);
  2. Confirm the module is enabled in LSPosed with scope limited to X (com.twitter.android);
  3. Keep X selected under LSPosed Settings → Restore inline hooks (required by libpairipcore.so);
  4. 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.