开发工作流
大约 2 分钟
开发工作流
这一页把 JSXHook 的常见日常流程串起来。你可以把它理解成“从建项目到出包”的最短路径。
1. 建一个项目
项目模式最适合长期维护。创建后通常会生成下面两个文件:
// init.js
module.exports = {
name: "DemoProject",
description: "My JSXHook project",
author: "you",
icon: "rocket",
launcher: "main.js",
scope: ["com.example.target"]
};
// main.js
log("Hello from DemoProject");
这里的 scope、launcher、name 会被 ProjectManager 和 ProjectScriptParser 读出来,用于运行、展示和导出。
2. 先把运行环境确认通
最低限度建议先确认这些对象可用:
log(`package=${lpparam.packageName}`);
log(`process=${lpparam.processName}`);
log(`loader=${classLoader}`);
log(`context=${context}`);
如果这一步不通,优先检查:
- 目标应用是否已被加入 Scope。
- 当前脚本是不是运行在你想要的进程里。
- Xposed 框架服务是否已连接。
3. 写最小 Hook
hook({
class: "android.app.Activity",
classloader: lpparam.classLoader,
method: "onCreate",
params: ["android.os.Bundle"],
after(it) {
log(`activity=${it.thisObject}`);
}
});
建议先从系统类或你非常确定会命中的类开始,避免一上来就把问题堆在类加载器、重载匹配和时机判断上。
4. 逐步拆分文件
项目一变大,就尽量把逻辑拆到模块里:
const hookLogin = require("./hooks/login");
const hookVip = require("./hooks/vip");
hookLogin();
hookVip();
这样做的好处是:
- 调试时更容易局部定位。
- 导出成独立模块时结构更稳定。
- 后面给团队写文档也更自然。
5. 用日志、HTTP、ImGui 增强调试
- 简单调试:
log()、printStackTrace() - 临时接口:
httpServer.start()+httpServer.get()/post() - 可视化:
imgui.window("debug") - 静态检索:
openDexKit()/DexFinder - APK 工具链:MCP 服务 +
core/apkanalysis
6. 准备导出
当项目稳定后,可以走独立模块导出链路:
- 在
init.js中写好name、scope、launcher、作者等信息。 - 如果有插件依赖,确认插件打包目录和选择项。
- 执行项目导出,
StandaloneModuleProjectExporter会把项目复制到模板工程中。 - 模板补丁、脚本加密、图标写入、scope 列表和 README 会一并生成。
相关源码入口见 导出与插件。
