v1.0 已发布 · WMPF 独立运行时

把小程序运行时
装进一个 APK

WeAppDev 基于腾讯 WMPF 运行时,把小程序运行环境装进一个可以直接安装的 Android 应用。无需 Root,无需 Xposed,也不需要给运行它的设备装微信 —— 但它能开 DevTools,也能装你自己的插件。

Android 7+单 APK · 无框架扫码登录小游戏可用车机可用GitHub 下载
23:49
WeAppDevWMPF RUNTIME
最近使用20 个
跳一跳
店门店点单
票票务服务
行出行打车
购积分商城
餐外卖到家
车停车缴费
更全部服务
快捷调试
网络调试
Native调试
插件
GitHub RYF5584 微信 RSCompanyCEO
首页
开发者工具
我的
0Root / Xposed 依赖
1个 APK 搞定
9400本地 CDP 网关
120同时启用插件
3插件运行上下文
WHAT YOU CAN DO

你拿到手,能做什么

不用先学 Android 开发,也不用先配环境。六个最常见的用法,照着做就行。

01

手机上直接跑小程序

不用装微信,输入 AppID 就能打开;最近使用、多账号都在。

首页 → 输入 AppID → 打开
02

像调网页一样下断点

电脑 Chrome 连上 9400,给业务代码打断点、看闭包和调用栈。

设置开启调试 → adb forward → Chrome
03

看到明文请求

方法、URL、状态码、请求头、响应体、耗时,一条都不少。

网络调试 → 点开任意一条
04

把接口 mock 掉

一条 Network 规则,把 39.9 改成 0.01,不改小程序一行代码。

Network 规则 → 修改响应
05

做一个自己的插件

一个 HTML 就能改页面文字、接管定位、监控 token。

插件 → + → 粘贴 HTML
06

装进车机

车机不方便登录微信?装个 APK,横屏直接跑小程序。

设置 → 横屏模式
CORE CAPABILITIES

一个 APK,装下整套调试台

跑起来、停下来、看清楚、改得动。DevTools、Native 调试、抓包、 脚本与重写、插件,都在一个 APK 里。

RUNTIME

独立运行时

内置 WMPF 运行时。登录、最近使用、多账号切换、 按 AppID 打开 —— 一整套宿主能力,不依赖微信客户端。

WMPF RUNTIME · 已连接
DEVTOOLS

原生 DevTools

逻辑层 V8 inspector 直连标准 CDP。Chrome 里下断点、看闭包、走调用栈。

8var opt = 'order';
9debugger;
10return send(id, opt);
NETWORK

网络 + 脚本

双路捕获、WebSocket 帧,外加 ProxyPin 风格脚本与 5 种重写规则。

GETapi.weapp.dev/v2/user200
POSTapi.weapp.dev/v2/order201
GETapi.weapp.dev/v2/coupon404
脚本重写WebSocket
PLUGINS

三上下文插件

一个 HTML,三段脚本。面板、逻辑层、渲染层各跑各的,跨层由宿主转发。

面板逻辑层渲染层
GATEWAY

标准 CDP 网关

:9400 同时说 CDP 与 REST,Chrome 多标签可以并行接入。

:9400/json/list/devtools/*/v1/*
CHROME DEVTOOLS

像调网页一样
调小程序

小程序的业务代码跑在独立的 V8 里,不是网页,右键检查那套在这里用不上。 WeAppDev 把 WMPF 自带的 inspector 接出来,翻译成标准 CDP —— Chrome 那头只当它是一台普通浏览器。

  • 断点与单步行内断点、单步、跳出,暂停时查看闭包与 this
  • 调用栈与作用域精确到文件:行:列,Scope 展开即改
  • 渲染层 ElementsXWeb 真实 DOM,可选中、可改样式、可截图
  • 多客户端同一逻辑层可同时接多个 Chrome 标签页
查看调试指南→
Chrome DevTools — appservice127.0.0.1:9400/devtools/appservice
ConsoleSourcesNetworkPerformanceMemory1
{ } VM217 wmpf-net-probe.js Paused in debugger
1// wmpf-net-probe.js · 逻辑层注入
2(function () {
3 if (f.__wmpf) return '1';
4
5 var w = function (opt) {
6 var id = 'wmpf_' + (++seq) + '_';
7 try {
8 var o = opt || {};
9 collect(o, stack());
10 return send(id, o);
11 } catch (e) {
12 report(e);
13 }
14 };
1 处断点 · 已暂停在 collect() 调用前
ConsoleWhat's newWxaCtx-6d98 ▾
› o = { url: "https://api.weapp.dev/v2/order", method: "POST" }
at collect (wmpf-net-probe.js:1:1401)
at exports.request (appservice.app.js:1763:523)
at usr (appservice.app.js:2143:1535)

界面重绘 · 断点命中后的作用域与调用栈

DEBUG WORKBENCH

三条链路,一个工作台

JSAPI 中转层、Network 抓包、脚本与重写,都在 App 里,不用装模块。

JSAPI LAYER

看清 wx.* 在 中转层做了什么

小程序调 wx.getLocation、wx.login、wx.requestPayment,最终都会走 js-operatewxdata 中转。Native 页把请求与响应配对展示,连业务 JSON 一起给你。

  • 请求 / 响应成对按 seq 配对,请求体和响应体并排看
  • JSAPI 名称还原从 body 解析业务名,不再是清一色 operateWXData
  • 可被插件改写订阅 nativeReq / nativeResp,直接改请求与响应
Native 调试指南→
‹
Native 调试JSAPI · 中转层监听中
捕获中
搜索接口、小程序、请求/响应内容
全部请求响应我关注的
5 组 · 捕获中实时
operateWXData已完成
getLocation15:04:22
请求 1.2 KB响应 860 B#512
operateWXData已完成
login15:04:19
请求 640 B响应 1.8 KB#511
operateWXData等待响应
requestPayment15:04:11
请求 2.4 KB响应 —#510
operateWXData已完成
getUserProfile15:03:58
请求 412 B响应 1.1 KB#509
operateWXData已完成
chooseAddress15:03:41
请求 308 B响应 942 B#508
捕获中
12¥
已发布跳一跳 · v112

真机 UI 重绘 · 跳一跳运行界面

MINI GAMES

小游戏,
也能直接启动

不只小程序。跳一跳这类小游戏,也能在 WeAppDev 里打开; 抓包、断点、插件,同样适用。

  • 同一个运行时小程序与小游戏共用 WMPF 运行时,不用装微信
  • 直接启动输入 AppID 或从最近使用进入,和打开小程序一样
  • 调得动Network / Native / DevTools 都能用,插件同样能挂
查看小游戏说明→
PLUGIN SYSTEM

一个 HTML,就是一枚插件

不用打包,不用签名。一个文件里写三段脚本:面板浮窗、逻辑层(有 wx)、 渲染层(有 DOM)。跨层那一段,交给宿主总线。

plugin.htmlwad sdk 2.0
单文件 · 粘贴即安装 · meta + 面板 + 逻辑层 + 渲染层
<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="wad:package" content="my-first">
  <meta name="wad:name" content="我的第一个插件">
  <meta name="wad:version" content="1.0.0">
</head>
<body>
  <!-- 面板:浮窗里运行,有 wad SDK -->
  <button id="go">点我</button>
  <script src="/ui/plugin-sdk.js"></script>
  <script>
    wad.ready.then(() => {
      go.onclick = () => wad.logic.call('add', 1, 2)
        .then(sum => wad.ui.toast('1 + 2 = ' + sum));
    });
  </script>

  <!-- 逻辑层:有 wx,没有 DOM -->
  <script type="text/wad-logic">
    wad.register('add', (a, b) => a + b);
  </script>

  <!-- 渲染层:有 DOM,没有 wx -->
  <script type="text/wad-render">
    wad.render.dom(doc => {
      const el = doc.createElement('div');
      el.textContent = '插件已注入';
      doc.body.appendChild(el);
    });
  </script>
</body>
</html>
安装前做 Chromium 语法预检≤ 2 MB / 文件
页面文字编辑v1.0.0
APPID wxa150af5d22bd6e00
↻✕

页面文字编辑

开启后页面中所有文字会加绿色虚线框。点击文字直接编辑,Enter 保存,Esc 撤销。

编辑模式
已开启 · 页面文字可编辑
已标记文字
12 处
已开启
禁用原点击事件
编辑时点击文字不再触发页面跳转
使用提示

· 虚线框只用于提示可编辑,不会出现在最终页面里
· 修改立即写回 DOM,适合快速改文案
· 切换页面后会自动在新页面重新开启

已接管 12 处文字,点击任意文字开始编辑。
面板 / 逻辑层 / 渲染层 已连接
进入插件开发文档→
120同时启用插件
256 KB单条总线消息
6 sRPC 超时
3运行上下文
CAR & HEAD UNIT

把小程序装进车机

很多车机不方便登录微信,甚至装不了微信。WeAppDev 是一个普通 APK, 装上去就能跑小程序和小游戏;车机默认横屏,大屏自动放大。

WeAppDevWMPF RUNTIME · 已连接
最近使用12 个
跳一跳
店门店点单
停停车缴费
会会员中心
餐外卖到家
票票务服务
购积分商城
更全部服务
影电影演出
递快递查询
宿酒店预订
账发票助手
跳一跳已发布 · v112
打开
快捷调试
网络调试
Native 调试
插件
运行时就绪1 个小游戏 · 9400
车机模式 · 横屏自适应
无需安装微信
普通 APK车机只要能装 APK,就能装 WeAppDev
横屏优先车机默认横屏;竖屏小游戏居中显示
不依赖微信车机不登录微信,也能打开小程序
ARCHITECTURE

四层,三段接缝

Chrome 那头什么都不用装,把一个地址指到手机上就行。改动全在 APK 自己身上, 系统分区没动 —— 所以不需要 root。

PC
Chrome DevTools / 浏览器控制台
WebSocketCDP零安装
GATEWAY
主进程 · 本地网关 :9400
/json/list/devtools/*/v1/*REST
APP
APK · 内置运行时 + 调试网关 + 本地服务
运行时调试网关本地服务
RUNTIME
:container · WMPF 运行时
V8 逻辑层XWeb 渲染层Cronet 捕获
三段接缝:浏览器 WebSocket → App 本地通道 → 运行时。
QUICK START

三步,从安装到跑起来

不需要编译,不需要配置代理,也不需要证书。

01

安装 APK

Android 7 及以上。桌面出现 WeAppDev 图标,可与官方微信共存,互不影响。

02

扫码登录

微信扫一次二维码完成授权。会话保存在本地,有效期约 24 小时,过期重扫即可。

03

打开小程序

输入 AppID 或原始 ID 查询并打开,也可以直接点「最近使用」里的一条。

weappdev — zsh

想直接连 Chrome?

把端口转到本地后,在 Chrome 地址栏粘贴下面这条地址即可。 网关兼容 /json/list 与 /devtools/*, chrome://inspect 也能直接发现页面。

完整调试步骤 →
FAQ

先把丑话说在前面

能力边界、会话时效、以及为什么不那么做。

需要 Root 或 Xposed 吗?

不需要。所有能力都内置在 App 里,不修改系统分区,也不依赖任何框架环境。

手机上必须装微信吗?

装 WeAppDev 的那台设备不需要。它自带 WMPF 运行时,登录只是用另一台手机上的微信扫一次码,换一个本地会话;不装微信也能打开小程序。

一定要用 adb 吗?能不能 Wi-Fi 调试?

不一定。网关默认绑 0.0.0.0:9400,手机和电脑在同一网段时直接访问 http://<手机IP>:9400 即可。adb forward 只是最省事、不受网络策略影响的方式。

为什么关闭调试后插件就失效了?

插件的逻辑层与渲染层注入都依赖 CDP 调试通道。关闭后宿主零注入:面板仍可打开,但 logic / storage / network 不运行。这是有意的边界——随时可以退回到「什么都没发生」的状态。

能抓到系统流量或别的 App 的请求吗?

不能。捕获点在当前小程序的 WMPF 运行时内部,只能看到这个小程序自己发出的请求。系统级抓包请继续用 Charles / mitmproxy。

支持小游戏吗?

支持。跳一跳这类小游戏可以直接在 WeAppDev 里启动,和普通小程序共用同一套运行时;Network、Native、DevTools 同样适用。

一个 App,小程序 + Devtools 全面覆盖!

独立 WMPF 运行时 · Chrome DevTools · 明文网络 · 插件系统。
没有框架,没有 root,装完就能跑。

weappdev.top

仅供学习与研究使用,请勿用于商业用途或未授权的小程序。