# mockwx **Repository Path**: code_87/mockwx ## Basic Information - **Project Name**: mockwx - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-08 - **Last Updated**: 2026-09-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mockwx 从连接手机的微信 **8.0.77(3160)** APK 提取聊天界面资源,在独立 Android 应用中绑定本地 mock 消息。包名 `com.jimo.mockwx`,不会覆盖微信。 已移植原 XML 消息布局、颜色和尺寸、24 份 PNG / Nine-patch、原 SVG Canvas 路径、45 个 WXGF 表情,以及原 NeatTextView 排版字节码与 `liblinebreak.so`。不是按截图重新绘制聊天气泡。资源对应关系和适配记录见 [docs/resource-map.json](docs/resource-map.json),过程及限制见 [docs/reverse-engineering.md](docs/reverse-engineering.md)。 支持文字、语音、图片、表情、名片、转账、红包、文件、链接、位置、系统提示、引用、视频。右上角 `… → 添加 mock 消息` 可选择类型和收发方向,也可切换单聊 / 群聊。输入、发送、表情、更多面板、复制、删除、撤回为本地交互;聊天发送仍为本地 mock;截图识别使用网络权限。 ```sh ./gradlew assembleDebug adb install -r app/build/outputs/apk/debug/app-debug.apk adb shell am start -n com.jimo.mockwx/.MainActivity ``` 当前包含 arm64 原生库,适用于本次连接的 Android 15 手机。使用 JDK 21、项目 Gradle Wrapper 和本机 Android SDK 构建。 ```sh ./gradlew connectedDebugAndroidTest lintDebug python3 scripts/verify_resources.py # 单独查看一种消息的两个方向 adb shell am force-stop com.jimo.mockwx adb shell am start -n com.jimo.mockwx/.MainActivity --es fixture QUOTE ``` 当前是真实资源和排版组件的移植版本,尚未证明所有状态与微信逐像素一致。原自定义控件中的业务层被移除;部分容器、系统提示、弹窗及面板交互由本项目承接。不能把自动化测试通过等同于所有 UI 状态完全一致。 ## 视觉模型与截图导入 聊天右上角 `… → 视觉模型设置 / 导入截图`: 1. 配置 HTTPS 服务地址(Base URL 或完整 `/chat/completions` 地址)、API Key、支持图片输入的模型名称,保存配置。 2. 从系统图片选择器选择相册里的微信聊天截图,点击“识别截图”。这一步才会把截图发送给配置的模型服务。 3. 核对文字、图片裁剪和左右方向,可修改文字、标题、方向或移除误识别项。 4. 选择“替换当前聊天”或“追加到当前聊天”,识别记录使用现有微信消息布局渲染,图片取自截图中的实际区域。 模型配置支持 OpenAI 兼容 Chat Completions 协议,尚不支持 Anthropic / Gemini 等原生协议。模型必须支持图片输入和 JSON 文本输出;不自动选择模型、不内置密钥。接口结构参考[视觉输入官方文档](https://www.alibabacloud.com/help/en/model-studio/qwen-api-via-openai-chat-completions)。 API Key 由 Android Keystore 加密保存,配置、导入聊天和裁剪图片放在应用不备份的私有目录。选择截图本身不会联网;普通聊天发送也不会调用模型。识别包含文字、图片、左右方向、可见昵称及系统提示;其他卡片目前转录成带类型说明的文字。截图看不见的内容和原图细节无法恢复,识别结果可以在导入前校对。 `VisionImportTest` 覆盖兼容请求 / 响应、异常与取消、图片裁剪、加密配置、本地保存与追加、预览跨 Activity 重建及点击导入。测试使用合成图片和模拟服务响应,没有向真实模型服务发送截图。需要配置真实服务后验证该服务的识别质量。 ## 聊天头像 聊天右上角 `… → 设置聊天头像`,分别选择自己的头像(右侧)或对方的头像(左侧)。从系统图片选择器选图后,应用居中裁成方形并按聊天头像圆角显示;头像保存在本机,重启后恢复,不发送到视觉模型。左侧当前共用一个对方头像,尚不支持逐群成员分别设置。 ## 删除消息 长按消息内容,在菜单中选择“删除”。文字、图片和时间/系统提示都支持删除,删除后立即保存本地聊天,重启不会恢复被删除的记录。 ## 语音消息表现 添加 mock 语音时可输入 1—60 秒。气泡长度采用原 `lq.c` 分段规则,结合 `jk.a` 的屏幕逻辑宽度缩放;播放图标采用原 `AnimImageView` 的三个 SVG 帧,每帧 300 ms 循环。点击后按消息时长播放视觉动画,再次点击或离开页面停止,点击其他语音会切换播放对象,时长文字不变。当前只有 mock 播放效果,没有真实音频内容。 本轮构建与 Lint 通过,Android 15 真机共 13 项测试通过;新增覆盖头像居中裁剪和双向保存、文字与系统消息删除后的持久化、原语音宽度边界、三帧时序、点击停止及按时长结束后恢复静止图标。