Skip to content

使用说明

NPatch 提供两个东西:

  • jar-v<verName>-<verCode>-release.jar — 跨平台修补工具,纯 Java,Windows / macOS / Linux 任一平台只要有 Java 就能跑
  • manager-v<verName>-<verCode>-release.apk — Android 端的 NPatch 管理器,本地模式才需要

两者通常一起发布。建议先读 什么是 NPatch,理解两种模式的差别,再回来看怎么用。

获取方式

文件名格式

Release 页面上看到的文件名长这样:

jar-v1.0.5-639-release.jar
manager-v1.0.5-639-release.apk

对应规则 <artifact>-v<verName>-<verCode>-<variant>.{jar,apk}

  • verName — 版本名称(例如 1.0.5
  • verCode — 版本号(例如 639
  • variant — 构建类型,release(稳定)或 debug(GitHub Actions 才有)

环境需求

项目需求
修补工具运行环境Java(运行 jar-v<verName>-<verCode>-release.jar
平台Windows / macOS / Linux 任一即可
Android 版本修补后的应用需要 Android 9 (API 28) 以上

两种使用方式

方式一:用管理器 App(推荐)

manager-v1.0.5-639-release.apk 装到设备上,从界面选择要修补的应用,修补完成后直接安装,全程在设备上完成。对大多数用户来说这是最方便的方式。

更多管理器能做的事情看 管理器与 Shizuku

方式二:用 jar 修补

适合批量修补、自动化或 CI 场景。把目标 APK 丢给 jar,产出 <原名>-<NPatch versionCode>-npatched.apk

bash
java -jar jar-v1.0.5-639-release.jar [options] <apks...>

最小可用示例(本地模式,默认签名绕过 Basic):

bash
java -jar jar-v1.0.5-639-release.jar --manager target.apk

集成模式(内嵌一个或多个模块):

bash
java -jar jar-v1.0.5-639-release.jar --embed module1.apk --embed module2.apk target.apk

下面示例使用 jar-v1.0.5-639-release.jar 作为示范文件名,请以你实际下载到的版本为准。

CLI 选项

对应 top.nkbe.npatch.patch.NPatch 中的 @Parameter 声明。

选项说明默认
<apks>要修补的 APK 路径(位置参数,至少一个)
-h, --help显示说明
-o, --output输出目录.(当前目录)
-f, --force覆盖已存在的输出文件
-p, --newpackage修补新包名不改
-d, --debuggable应用可调试
-l, --sigbypasslv签名绕过等级 0–4(见下)1
--injectdex注入加载器 Dex(孤立进程需要,例如浏览器渲染引擎)
--provider注入文件选择器(来自 MT 管理器),管理 data 目录文件
--installerSource设置原始安装来源字符串
--useMicroG强制启用 MicroG 支持,重定向 GMS 请求至社区版 MicroG
--outputLog将 Xposed 与框架启动日志输出到 Media 目录
-k, --keystore自定义签名密钥库,需要 4 个值:path storePass alias aliasPass
-npa, --npatch-keystore用内建 NPatch 密钥库
-fpa, --fpa-keystore用内建 FPA 密钥库
--manager启用本地模式(与 --embed 互斥)
-r, --allowdown覆盖版本号为 1,允许以后降级安装
-v, --verbose详细打包日志
-m, --embed启用集成模式并指定模块 APK,可重复(与 --manager 互斥)

互斥规则

下列规则由 CLI 解析时直接拦截:

  • --manager--embed 不能同时使用
  • -k 不能与 -npa-fpa 同时使用
  • -npa-fpa 不能同时使用
  • Extreme(3)和 Seccomp(4)必须搭配 --manager;集成模式(--embed)下,sigbypass 上限为 High(2)

签名绕过等级

直接引用 NPatch 界面中的官方说明:

等级名称说明集成模式可用
0None不进行任何处理
1Basic增加 Java IO 与 Native openat / openat64 重定向,让签名相关的文件读取改为访问原始 APK
2High基于 Basic,恢复原始 AppComponentFactory,并 hook getPackageArchiveInfohasSigningCertificate 等更严格的校验路径
3Extreme基于 High,hook PackageInfo(Parcel) 构造函数,覆盖 Binder 反序列化获取签名信息的路径否(需 --manager
4Seccomp在 ARM64 上启用 seccomp v2 过滤与 trusted thread 文件重定向,参考 FunPatchApp 的实现方案否(需 --manager

实际使用:先试 1,不行再往上调。等级越高不代表越好,部分应用在高等级下反而会异常。

安装修补后的 APK

由于签名不同,安装前需要先卸载原应用。确保你已备份好个人数据。

WARNING

卸载会清掉应用数据。重要的东西先在原版里备份,或用 ADB 备份。

本地模式的后续步骤

  1. 安装 manager-v*-release.apk(包名 top.nkbe.npatch,如果还没装)
  2. 安装修补后的 APK
  3. 打开管理器,找到该应用,加入要加载的 Xposed 模块与作用域
  4. 启动应用,模块就会生效

集成模式的后续步骤

装完修补 APK 就可以直接用,模块已经放在 assets/npatch/modules/<package>.apk 里。要换模块需要重新修补。

进阶:自定义密钥库

默认会用内建密钥库(不指定时走 -npa 路径)。如果你有自己的密钥库:

bash
java -jar jar-v1.0.5-639-release.jar -k mykey.jks storePass myalias aliasPass --manager target.apk

四个位置参数顺序:密钥库路径、密钥库密码、别名、别名密码。内部使用 BKS 格式加载,并启用 V2 签名。

管理器内也有自定义密钥库设置,界面里可以验证密钥库类型、密码、别名是否正确。

出问题了?

常见问题,或到 Telegram 问。

NPatch 官方介绍页面