HMSPush源码架构解析:三模块设计(app、common、xposed)的巧妙之处
2026/7/21 16:20:57 网站建设 项目流程

HMSPush源码架构解析:三模块设计(app、common、xposed)的巧妙之处

【免费下载链接】HMSPush让非华为设备支持 HMS 推送,同时避免唤醒目标应用项目地址: https://gitcode.com/gh_mirrors/hm/HMSPush

HMSPush是一个创新的Android模块,它让非华为设备也能支持HMS推送服务,同时避免唤醒目标应用。这个项目的巧妙之处在于其清晰的三模块架构设计:app模块提供用户界面,common模块封装共享逻辑,xposed模块实现核心Hook功能。本文将深入解析HMSPush的架构设计,揭示其如何通过模块化设计实现高效的系统级推送支持。

模块化架构概述

HMSPush采用经典的模块化设计,将不同功能职责清晰地分离到三个独立模块中:

app模块 - 用户界面层

app模块是HMSPush的用户界面部分,基于Android应用架构构建。它负责提供配置界面、应用管理、设备伪装设置等用户交互功能。该模块位于app/目录下,包含完整的Android应用组件。

主要文件结构:

  • app/src/main/java/one/yufz/hmspush/app/MainActivity.kt - 主活动入口
  • app/src/main/java/one/yufz/hmspush/app/home/ - 主页相关组件
  • app/src/main/java/one/yufz/hmspush/app/fake/ - 设备伪装功能

common模块 - 共享逻辑层

common模块是整个项目的核心共享库,包含所有模块都需要使用的通用工具类、数据模型和常量定义。这个模块的设计体现了代码复用的最佳实践。

关键文件:

  • common/src/main/java/one/yufz/hmspush/common/Constant.kt - 定义所有常量
  • common/src/main/java/one/yufz/hmspush/common/model/ - 数据模型定义
  • common/src/main/java/one/yufz/hmspush/common/content/ - 内容提供相关工具

xposed模块 - Hook实现层

xposed模块是HMSPush的技术核心,通过Xposed框架实现对系统服务和HMS Core的Hook操作。这个模块实现了推送转发、设备伪装、通知处理等关键功能。

核心文件:

  • xposed/src/main/java/one/yufz/hmspush/hook/XposedMod.kt - Xposed模块入口
  • xposed/src/main/java/one/yufz/hmspush/hook/hms/ - HMS核心Hook实现
  • xposed/src/main/java/one/yufz/hmspush/hook/fakedevice/ - 设备伪装功能

模块间依赖关系

HMSPush的模块依赖关系设计得非常巧妙:

  1. app模块common模块:app模块依赖common模块,使用其中定义的常量、模型和工具类
  2. xposed模块common模块:xposed模块同样依赖common模块,共享核心逻辑
  3. app模块xposed模块相互独立:这两个模块通过common模块间接通信,保持了良好的解耦

这种依赖关系在settings.gradle.kts中明确配置,确保了构建系统的清晰性。

核心工作原理解析

推送转发机制

HMSPush的核心功能是通过Hook技术拦截HMS Core的推送请求,并将其转换为系统通知。在xposed/src/main/java/one/yufz/hmspush/hook/hms/HookHMS.kt中,项目Hook了HMS Core的关键方法:

class HookHMS { fun hook(lpparam: XC_LoadPackage.LoadPackageParam) { // Hook PendingIntent.getActivity方法 PendingIntent::class.java.hookMethod("getActivity") { doBefore { // 拦截特定Activity的创建 } } // Hook DexClassLoader加载过程 DexClassLoader::class.java.hookAllConstructor { doAfter { // 检测并处理推送相关的Dex加载 } } } }

设备伪装系统

为了让非华为设备能够使用HMS推送,HMSPush实现了完整的设备伪装系统。在xposed/src/main/java/one/yufz/hmspush/hook/fakedevice/FakeDevice.kt中,项目通过Hook系统属性读取方法,将设备信息伪装成华为设备:

object FakeDevice { fun fake(lpparam: LoadPackageParam) { // 伪装设备制造商为华为 // 伪装设备型号为华为设备 // 伪装系统构建信息 } }

通知处理链

HMSPush实现了一个完整的通知处理链,确保推送通知能够正确显示。在xposed/src/main/java/one/yufz/hmspush/hook/hms/nm/目录下,定义了多个通知处理器:

  • NotificationHandler- 通知处理基类
  • IconHandler- 图标处理
  • LabelHandler- 标签处理
  • GroupNotificationHandler- 分组通知处理

架构设计的巧妙之处

1. 职责分离清晰

HMSPush的三模块设计将用户界面、业务逻辑和技术实现完全分离:

  • app模块专注于用户体验
  • common模块提供通用基础设施
  • xposed模块处理底层Hook技术

2. 代码复用最大化

通过common模块,项目避免了代码重复,确保:

  • 常量定义一致
  • 数据模型统一
  • 工具类共享

3. 可维护性高

模块化设计使得:

  • 每个模块可以独立开发和测试
  • 修改一个模块不会影响其他模块
  • 新功能可以方便地添加到相应模块

4. 扩展性强

架构设计支持轻松扩展:

  • 新增Hook功能只需在xposed模块添加
  • 新UI功能在app模块实现
  • 共享逻辑在common模块集中管理

实际应用场景

应用选择与配置

用户通过app模块的界面选择需要支持HMS推送的应用,配置设备伪装参数。这些设置通过common模块的数据模型持久化存储。

运行时Hook

当目标应用启动时,xposed模块根据配置进行Hook:

  1. 伪装设备信息,让应用认为运行在华为设备上
  2. 拦截HMS推送请求,转发为系统通知
  3. 处理通知图标、标签等显示细节

推送流程

完整的推送流程如下:

  1. 应用向HMS Core请求推送服务
  2. HMS Core准备发送推送通知
  3. HMSPush拦截推送请求
  4. 转换为系统通知并显示
  5. 用户点击通知进入应用

技术亮点总结

跨进程通信

HMSPush通过ContentProvider实现模块间通信,在xposed/src/main/java/one/yufz/hmspush/hook/bridge/BridgeContentProvider.kt中定义了完整的通信协议。

版本兼容性

项目支持多个Android版本,通过条件编译和版本检测确保兼容性。在common/src/main/java/one/yufz/hmspush/common/Constant.kt中定义了版本相关的常量。

错误处理机制

完善的错误处理确保模块稳定性:

  • Hook失败时的回退机制
  • 异常情况的日志记录
  • 用户友好的错误提示

最佳实践借鉴

HMSPush的架构设计为Android模块化开发提供了优秀范例:

  1. 明确模块边界:每个模块有清晰的职责范围
  2. 依赖管理规范:通过common模块避免循环依赖
  3. 接口设计简洁:模块间通过定义良好的接口通信
  4. 配置集中管理:所有配置在common模块统一管理

总结

HMSPush的三模块架构(app、common、xposed)展示了Android模块化开发的精髓。这种设计不仅提高了代码的可维护性和可扩展性,还为类似的技术实现提供了参考模板。通过清晰的职责分离、高效的代码复用和灵活的技术实现,HMSPush成功解决了非华为设备支持HMS推送的技术难题。

对于Android开发者来说,研究HMSPush的源码架构不仅能够学习Xposed框架的高级用法,还能深入理解模块化设计在复杂项目中的应用价值。无论是开发系统级Hook应用,还是构建复杂的Android模块化项目,HMSPush的架构设计都值得借鉴和学习。

通过深入分析HMSPush的源码,我们可以看到优秀的架构设计如何让复杂的功能变得清晰可维护,这也是该项目能够在开源社区获得广泛认可的重要原因之一。

【免费下载链接】HMSPush让非华为设备支持 HMS 推送,同时避免唤醒目标应用项目地址: https://gitcode.com/gh_mirrors/hm/HMSPush

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询