这里是演示hookui 安卓应用 插件 分析另外一个应用首先需要启动这个应用,mcp测试就能调通了完整文档: http://hookui.lozn.top
支持的核心功能总览
管理前端支持功能
- ✅ 应用Hook状态管理和批量配置
- ✅ MCP AI功能配置和连接管理
- ✅ 全局Hook开关和分类配置
- ✅ 系统状态监控和日志查看
- ✅ 应用端口分配显示和管理
- ✅ 白/夜间主题现代化界面
注入后端支持功能
- ✅ 8大分类Hook功能管理界面
- ✅ MCP AI助手集成和工具调用
- ✅ Native内存搜索、读取、写入功能
- ✅ 字符串Hook和方法追踪
- ✅ 网络Hook和系统级调试
- ✅ Activity生命周期管理
- ✅ JavaScript插件系统
- ✅ 界面分析和布局调试工具
开发支持功能
- ✅ 统一UI生成工具链
- ✅ 双端配置同步机制
- ✅ 模块化Hook管理系统
- ✅ 错误隔离和日志系统
- ✅ 热重载和实时调试
- ✅ MCP工具扩展框架
- ✅ 性能监控和优化工具
这里是用的模拟器进行测试 每个应用都能产生一个mcp服务器:端口[图片上传失败...(image-eaca38-1760691311063)]
可以直接局域网打开获取 mcp能力列表[图片上传失败...(image-be5020-1760691311063)]
使用claude目前只支持sse, 应用中显示的是/mcp 应调整为/sse添加命令
claude mcp add --transport sse hookui http://192.168.1.154:8970/sse
用这个命令就可以检查mcp是否正常,应用内同样可以检查
PS D:\dev> claude mcp list
有98个能力

QQ_1760695587927.png

QQ_1760691454907.png
如下图 可以切换多应用分析,这里成功的切换了另外一个应用 能获取到界面是什么组成

QQ_1760691496155.png
也可以获取应用信息来验证这一点,这是另外一个应用的mcp server

QQ_1760691564128.png
切换前台后继续获取

QQ_1760692396030.png
成功提取界面信息

QQ_1760691804424.png
可以看出来分析非常正确,能快速知道当前界面的act还能知道继承哪个类,丝毫不需要用逆向工具解包分析

QQ_1760691884406.png

QQ_1760691973179.png
继续深入他推测出了model

QQ_1760691928106.png

QQ_1760692017811.png
最后直接生成 结构图了

QQ_1760692038178.png
1️⃣ LoginActivity (View层)
继承自: BaseActivity
字段:
- binding: ActivityLoginBinding - ViewBinding,访问UI控件
- loginViewModel: LoginViewModel - ViewModel实例
- _checkUpdateCallPair: PairX - 检查更新回调
- INTENT_FROM: String - 静态常量
核心方法:
- onCreate(Bundle) - 初始化界面
- submitLogin() - 提交登录
- callLoginBtn() - 登录按钮逻辑
- showLoginFailed(String) - 显示登录失败
- onBackPressed() - 返回键处理
- toLogin(Context, String) - 静态跳转方法
---
2️⃣ LoginViewModel (ViewModel层)
继承自: androidx.lifecycle.ViewModel
字段:
- loginFormState: MutableLiveData - 表单验证状态
- loginResult: MutableLiveData - 登录结果
- compositeDisposable: CompositeDisposable - RxJava订阅管理
核心方法:
🔐 登录相关
// 核心登录方法
login(boolean rememberMe, String username, String password, String serverUrl)
// 取消登录
cancelLogin()
// 登录成功后生成会话信息
static SessionInfo doLoginSuccGenereateSessionInfo(
String username,
String param2,
JSONObject serverResponse,
String token,
boolean rememberPassword
)
✅ 表单验证
// 数据变化验证
loginDataChanged(String username, String password, String field3)
// 用户名验证
private boolean isUserNameValid(String username)
// 密码验证
private boolean isPasswordValid(String password)
⚙️ 配置管理
// 初始化应用配置
static void initAppConfig(JSONObject config) throws JSONException
📡 网络请求
// 检查登录URL是否失败
private boolean fetchLoginUrlIsFail(ObservableEmitter emitter, String url)
📊 LiveData访问
LiveData getLoginResult()
LiveData getLoginFormStateLiveData()
---
3️⃣ SessionInfo (Model层)
用户会话信息模型
字段(17个):
// 用户信息
int userid // 用户ID
String name // 用户名
String nickname // 昵称
String face // 头像
String group // 用户组
// Token相关
String token // 登录Token
String accessToken // 访问Token
long expirationTime // 过期时间
long refreshMinute // 刷新时间
// 权限相关
String permissionStr // 权限字符串
String permissionDetailJSON // 权限详情JSON
int[] modules // 模块数组
ArrayList moduleGroup // 模块组
// 其他
int allow // 允许标志
int unreadcount // 未读消息数
int supportPrint // 打印支持
boolean useWebReport // 使用Web报表
核心方法:
boolean isLogin() // 是否已登录
boolean isSupportPrint() // 是否支持打印
boolean isUseWebReport() // 是否使用Web报表
// 37个getter/setter方法
---
🔄 完整登录流程
┌─────────────────────────────────────────────────────┐
│ 用户界面 │
│ ┌───────────────┐ ┌───────────────┐ │
│ │ 用户名: lozn│ │ 密码: **** │ │
│ └───────────────┘ └───────────────┘ │
│ │ │
│ ↓ 实时验证 │
│ loginDataChanged(username, password, ?) │
│ ├─ isUserNameValid() ✓ │
│ └─ isPasswordValid() ✓ │
│ │ │
│ ↓ 点击登录按钮 │
│ ┌─────────────────┐ │
│ │ [登录] │ │
│ └─────────────────┘ │
└───────────┬─────────────────────────────────────────┘
│
↓
┌───────────────────────────────────────────────────┐
│ LoginActivity.callLoginBtn() │
│ 检查表单是否填写完整 │
└───────────┬───────────────────────────────────────┘
│
↓
┌───────────────────────────────────────────────────┐
│ LoginActivity.submitLogin() │
│ 调用ViewModel执行登录 │
└───────────┬───────────────────────────────────────┘
│
↓
┌───────────────────────────────────────────────────┐
│ LoginViewModel.login(rememberMe, username, │
│ password, serverUrl) │
│ ├─ fetchLoginUrlIsFail() - 检查URL │
│ ├─ RxJava3网络请求 │
│ └─ CompositeDisposable管理订阅 │
└───────────┬───────────────────────────────────────┘
│
↓
┌─────────┴─────────┐
│ │
成功 ↓ 失败 ↓
┌─────────────┐ ┌──────────────────┐
│ 解析响应数据 │ │ showLoginFailed()│
│ ↓ │ │ 显示错误提示 │
│ doLoginSucc │ └──────────────────┘
│ Genereate │
│ SessionInfo │
│ ↓ │
│ initApp │
│ Config() │
│ ↓ │
│ 保存Session │
│ ↓ │
│ 跳转主界面 │
└─────────────┘
---
🔑 关键技术点
1. MVVM架构 - 清晰的职责分离
2. ViewBinding - 类型安全的视图访问
3. LiveData - 响应式数据观察
4. RxJava3 - 异步网络请求处理
5. Material Design - 使用Material组件
6. 会话管理 - SessionInfo存储用户状态
7. Token认证 - 双Token机制(token + accessToken)
8. 权限系统 - 基于模块和权限字符串的权限控制
当然还能让它编写脚本 本来是打算让它修改界面的,这个修改界面 目前我还没开发完全 ,但是可以通过ui图标操作修改的

QQ_1760692327774.png
他的思路是js api js api的文档还没告诉他 他写的是有出入的.
但是 他写入的js 在界面上是可以管理编辑的

QQ_1760692453429.png
最后为爱发电,你能发电多少呢?后续有激情的时候更新 支持更多的 mcp能力, 目前演示的mcp 能力有限,其它能力都需要 借助手动 操作ui,然后打开logcat查看日志 进行结合分析, 而后续有激情的话我打算 实现真正的 不需要任何编程,也能让ai 快速分析应用 只需要 手机和对应设备在同一个网 和 对应具备mcp连接的 手机或者pc端应用 就能分析.