AADisplay 在 Android 15 上不工作?为什么是 LSPosed 坏了——以及仍在维护的替代方案
如果你的 AADisplay 配置最近不再往 Android Auto 上显示 App——尤其是在一次 Android 15 更新之后——原因几乎从来不是 AADisplay 本身。是它 下面那一层:LSPosed。这里讲清楚什么坏了、为什么坏,以及一条 完全不依赖 Xposed 这套栈、仍在维护的路线。
简短版
- AADisplay 是一个 Xposed/LSPosed 模块。如果 LSPosed 在你的 Android 版本上加载不起来,AADisplay 就跑不了——你在 AADisplay 内部怎么改都没用。
- LSPosed 已不再被积极维护。在 Android 15 上,它只能靠社区 分支续命,而这些分支很脆弱。
- 一种不用 Xposed 的 root 投屏方案,绕开了整条 依赖链。KoalaMirror 就是这样一个选项——而且它沿袭了 AADisplay 的 VirtualDisplay 来路,这值得诚实地讲清楚。
为什么 AADisplay 现在会坏
AADisplay 的工作方式是 hook 进 Android 系统框架,以扩展 Android Auto 愿意 显示的内容。这份 hook 的能力来自 Xposed,而在现代 Android 上 Xposed 运行时由 LSPosed 提供。
LSPosed 实际上已停止开发——原项目停了,对更新的 Android 版本的支持只活在社区分支里。当那一层 Xposed 缺失或 不稳定时,架在它之上的每一个模块都会跟着一起垮掉,AADisplay 也不例外。 再加上 Xposed 检测和部分 ROM 的怪癖,"去年还好好的,现在更新完就是 一块黑屏"就成了可以预见的结果。
AADisplay 是什么——以及值得了解的来龙去脉
该说的得说:AADisplay,由 Nitsuya 开发,是一个开源(GPL-3.0) 模块 它通过一种嵌套的 VirtualDisplay 技术,开创性地在 Android Auto 上 显示任意 Android App。这是个巧妙的思路,也是这整个品类在概念上的根源。
KoalaMirror 从同一个思路生长出来,但它是一次 独立的、净室重写(clean-room rewrite):它沿用 VirtualDisplay 这个概念,而不是 AADisplay 的代码。这种切分是刻意的——它让两个项目干净地 分开,也尊重 AADisplay 的开源许可证,而不是在它之上 搭一个产品。
仍在维护的路线:要 root,但不要 Xposed 这套栈
关键洞见在这里:让 AADisplay 坏掉的那个依赖,是 Xposed/LSPosed——而不是 root 本身。一种用 root 和 Zygisk 运行时(Magisk、KernelSU 或 APatch)、不用 Xposed 的投屏方案,从头到尾都不碰 LSPosed。
KoalaMirror 就是这么运行的:装上 APK,点 Deploy——它替你 配好 Zygisk 模块,如果你的 root 方案不自带 Zygisk 运行时还会一并装上 ReZygisk——重启一次,然后连上你的车。这里 没有 LSPosed 作用域要配置,也没有 Xposed 模块要跨 Android 更新持续维护它的存活。
哪些一样,哪些不同
- 同一家族。 两者都用 VirtualDisplay 的思路,通过 Android Auto 渲染出一块独立的显示面,所以你拿到的是真实的 App、真实的布局,而不是 Google 那张模板清单。
- 形态不同。 AADisplay 是一个需要你手动配置的裸 LSPosed 模块 ——启用作用域、注册一个启动器包。KoalaMirror 是一个打包好、有支持的 产品,一键部署、且持续跟住 Android Auto 兼容性。
- 一个诚实的提醒。 任何搭着 Android Auto 的方案,都依赖于 跟上 Android Auto 的变化。AADisplay 和 KoalaMirror 只是依赖 不同的层——Xposed 相对于一个 root + Zygisk 模块。两者都无法对 Android Auto 自身的变化免疫。