Pine 引擎:藏在 FPA 底层的另一个 Hook 库
FPA 的底层署名是「LSPlant + Pine」。LSPlant 有 LSPosed 项目背书(见LSPlant 是什么),另一位成员 Pine 的曝光度低一些,但在 Hook 生态里同样是有来历的角色。
Pine 是什么
Pine 是一个开源的 Java 方法 Hook 库,面向安卓 ART 运行时,提供在应用进程内拦截与替换 Java 方法调用的能力。它与 LSPlant 属于同一工具类——区别在于实现细节与适配侧重。在 Xposed 生态的语境里,这类库是「框架的框架」:LSPosed 之于系统、FPA 之于应用包,最底层干活的都是它们。
为什么 FPA 要两个引擎
官方介绍把 FPA 的底层写成「基于 LSPlant 与 Pine 两个 hook 引擎」,这个组合的意义在于互补:
- 覆盖面互补:不同系统版本、不同设备上,两个引擎的可用性表现不同,组合起来提高「哪个环境都能跑」的概率;
- 场景互补:Hook 涉及的方法类型多样(普通方法、内联优化过的方法、native 混合场景),不同引擎各有擅长;
- 风险分摊:单一引擎在某次系统更新后失效时,框架还有第二条腿。
对使用者的实际影响只有一句话:这层复杂度不需要你操心——引擎选择是 FPA 内部的事,你只管选应用、patch、勾模块。
精简实现的整体图景
FPA 只实现了部分 Xposed Hook API(取舍见开源与底层),两个引擎负责把实现了的这部分做稳。模块能不能跑,最终取决于「模块调用的接口是否落在实现面内」——这也是本站反复强调实测优先的原因(判定规则见哪些模块能挂)。
理解了引擎层,可以把整条链路串起来看:免 Root 注入的原理。