LSPatch 中文文档 下载 App

自定义签名:让多个修补 App 之间能互调

为什么需要自定义签名

Android 系统在应用间通信时(通过 Intent、Provider、Service 等)会校验调用方的签名:

LSPatch 默认给每次修补生成一个全新的随机签名。如果修补了两个 App,它们的签名是不同的——互相调用就会被拒绝。

解法:用同一个自定义签名修补所有需要互相配合的应用。

签名文件是什么

Android 应用签名用 Java 的 keystore 格式(.jks 或 .keystore)。一个 keystore 里包含:

LSPatch 修补时需要这三个东西:keystore 文件路径、密码、证书别名(alias)。

生成自己的签名文件

电脑上用 Java 自带的 keytool(JDK 里有,JRE 不一定带):

keytool -genkeypair \
  -v \
  -keystore my_lspatch.jks \
  -alias lspatch_key \
  -keyalg RSA \
  -keysize 2048 \
  -validity 36500

参数解释:

执行时会让你输入 keystore 密码、名字、组织等信息——前两个必填,后几个随便填。

重要:签名文件生成后备份好——丢了的话用新签名修补的 App 和旧签名修补的 App 签名又不一样了,还是不能互调。

在 CLI 里用自定义签名

java -jar lspatch.jar input\wechat.apk -o output \
  --sign-keystore D:\Tools\sign\my_lspatch.jks \
  --sign-alias lspatch_key \
  --sign-password your_password

三个签名参数每次修补都要带上,而且所有应用用同一个签名文件。

在 Manager App 里用自定义签名

opatch/onpatch 分支的 Manager 设置里有签名相关的配置项。入口通常在:设置 → 签名设置 / 自定义签名。

不同版本叫法略有不同,但原理都是一样的:给 Manager 一个 keystore 文件路径和密码,它修补时就用这个签名。

原版 LSPatch 可能没有自定义签名选项——原版每次修补都生成新随机签名,要自定义签名只能用 CLI 模式。

常见场景

场景一:修补微博 + 修补微信,想让微博能分享到微信

  1. 生成一个签名文件
  2. 修补微博和修补微信都用这个签名(CLI 带 --sign-keystore 等参数,或 Manager 里配好)
  3. 安装两个修补版 → 测试微博分享到微信 → 应该能正常跳转

场景二:修补版微信 + 原版 X

这种情况无论怎么签名都解决不了——原版 X 的签名是官方的,和你的自定义签名永远不一致。要么两个都用你的签名修补,要么接受跨应用通信不工作。

场景三:便携模式分享给朋友

朋友那边如果也修补过其他 App,朋友自己的签名和你的签名不一样。你的便携版 App 发给朋友后,和朋友那边修补的 App 之间还是不能互调。要解决这个问题需要把你的签名文件也给朋友——注意私钥安全,别随便传给陌生人。

签名安全提醒