宇树科技 APP架构分析报告

宇树科技 APP 技术架构分析报告

基于 UnitreeGo.zipUnitree_Explore.zip 解包后的 Manifest、DEX、so 库与 assets 静态对比;UnitreeGo 模拟器另经 ADB 运行时交叉验证。未做二进制逆向。

目录

  • 一、核心结论
  • [二、两款 App 对比概览](#二、两款 App 对比概览)
  • [三、UnitreeGo 分析](#三、UnitreeGo 分析)
    • [3.4 Go2 模拟器:WebView 实现](#3.4 Go2 模拟器:WebView 实现)
  • [四、Unitree Explore 分析](#四、Unitree Explore 分析)
  • 五、共有技术底座
  • [六、WebView 与混合开发](#六、WebView 与混合开发)
    • [6.4 模拟器加载链路](#6.4 模拟器加载链路)
    • [6.5 dist 工程概览](#6.5 dist 工程概览)
    • [6.6 目录结构与分包](#6.6 目录结构与分包)
    • [6.7 功能页面与操控 UI](#6.7 功能页面与操控 UI)
    • [6.8 3D / SLAM / 编程技术栈](#6.8 3D / SLAM / 编程技术栈)
    • [6.9 原生桥接与通信](#6.9 原生桥接与通信)
    • [6.10 Go 与 Explore 前端差异](#6.10 Go 与 Explore 前端差异)
  • [七、Blockly 可视化编程](#七、Blockly 可视化编程)
  • 八、原生库技术栈
    • [8.2 共有 so 详解](#8.2 共有 so 详解)
    • [8.3 Explore 独有 so 详解](#8.3 Explore 独有 so 详解)
    • [8.4 汇总:已知库 vs 自研](#8.4 汇总:已知库 vs 自研)
  • [九、第三方 SDK 集成](#九、第三方 SDK 集成)
  • 十、应用架构特点
  • 十一、技术架构总结
  • 十二、总结

一、核心结论

宇树科技旗下 UnitreeGo 与 Unitree Explore 均采用 Kotlin/Java 原生 Android + WebView 混合架构,共享同一 H5 资源底座与大部分原生库,未使用 Flutter、React Native、Hippy 等跨端 UI 框架。UnitreeGo 面向 Go2 四足机器狗,侧重 BLE 控制、3D 仿真与 SLAM;Unitree Explore 面向多产品线(B2/G1/H2/R1/A2),扩展 AR8030 无线图传与更完整的机型运维能力。

技术栈概览

  1. 原生开发 --- Kotlin 1.8 + Android Gradle Plugin 8.0.2 + Java 17
  2. 模块化 --- ARouter 路由,按产品线拆分 doggo2 / godog / g1 / h2 / r1 / a2 等模块
  3. 混合 H5 --- Vite + Vue + TypeScript,内嵌 assets/dist/大量操控 UI(遥控、编程、SLAM/地图、图传窗口)在 WebView 内实现
  4. 机器人编程 --- 自研 Blockly → Python(high_level_api + rt/api/sport/request
  5. 3D 仿真(WebView) --- Go2 模拟器由 WebActivity 加载 simulator.html;Three.js + Ammo + PCD/SLAM Worker + Go2 GLB(Go 版更重,非 Unity 等原生引擎)
  6. 连接 --- BLE(lib_ble);Explore 额外集成 AR8030 图传链路
  7. 语音 --- 科大讯飞 MSC(libmsc.so + assets/iflytek/
  8. 媒体 --- FFmpegKit(libffmpegkit.so + libav*)
  9. 存储 --- MMKV(libmmkv.so
  10. 加固与监控 --- 百度加固 + 阿里 EMAS + Firebase Crashlytics

二、两款 App 对比概览

维度 UnitreeGo Unitree Explore
包名 com.unitree.doggo2 com.unitree.b2dog
版本 1.12.9 2.0.0
APK 体积(zip) ~165 MB ~182 MB
DEX 4 个(约 22.3 MB) 4 个(约 23.7 MB)
原生 so 20 个 27 个(多 7 个 AR8030 相关)
主业务模块 doggo2(Go2) godog(B2 壳) + 多机型
支付 含微信/支付宝
H5 dist 同源度 68 个相同路径中 66 个 MD5 一致 同左
3D 模拟器 有(WebView + simulator.html 无独立 simulator 入口
定位 Go2 消费控制 + 3D 仿真 多机型探索/运维 + 图传

关系判断: 二者为宇树自研、同源双 App 策略;Explore 可视为面向 B2 与多产品线的「超集」版本,Go 聚焦 Go2 体验与仿真能力。


三、UnitreeGo 分析

3.1 架构定性

UnitreeGo 为原生 + WebView 混合架构:

  • 无 Flutter :未发现 libflutter.so
  • 无 React Native :未发现 libreactnativejni.solibhermes.so
  • 无 Hippy / Weex 运行时:DEX 中无 Weex 核心类引用
  • 4 个 DEX:代码规模中等

3.2 业务模块

模块 职责
com.unitree.doggo2 主界面、自检、固件升级、Web、设置等
com.unitree.lib_ble 蓝牙绑定、连接、遥控
com.unitree.login 登录
com.unitree.pay 支付(含 WXPayEntryActivity
com.unitree.a2 A2 人形机器人设置/数据

典型 Activity:

  • com.unitree.doggo2.ui.activity.main.MainActivity
  • com.unitree.lib_ble.ui.remote.RemoteActivity
  • com.unitree.lib_ble.ui.dog.DogBluetoothActivity
  • com.unitree.doggo2.ui.activity.web.WebActivity
  • com.unitree.doggo2.ui.activity.update.HardwareUpdate2Activity

3.3 Go 版 H5 特点

入口:

  • assets/dist/index.html --- 主 H5(main bundle ~8.2 MB)
  • assets/dist/simulator.html --- 独立 3D 仿真页(Explore 无此入口)

Go 独有或更完整的 3D/仿真资源:

复制代码
models/Go2.glb, Go2Root.glb, environment.glb
assets/ammo-CP2eG2rD.js                    # Ammo.js 物理引擎
js/PCDLoader/PCDLoader.*.js               # 点云加载
js/slam/Slam.*.js, slam.worker-*.js       # SLAM 模块
111.pcd                                     # 示例点云
assets/libvoxel-*.wasm                      # 体素 WASM
models/forestGround*.jpg, grass_*.png       # 环境贴图

分析: Go 版 H5 更重仿真与 SLAM 可视化,适合 Go2 遥控、建图与环境预览。

3.4 Go2 模拟器:WebView 实现

结论:UnitreeGo 内的 Go2「模拟器」不是原生 OpenGL/Unity 页面,而是由原生 WebActivity 作为容器,加载本地 H5 页 assets/dist/simulator.html 实现;3D 渲染发生在 WebView 内的 WebGL + JS Worker,而非独立原生游戏引擎。

3.4.1 静态证据(APK 解包)
证据 说明
独立 H5 入口 assets/dist/simulator.htmlassets/simulator-*.js(Vite 独立 build target)
与主 H5 同工程 同目录下还有 index.html / main-*.js,模拟器是第二入口而非单独 App
3D 资源全在 assets Go2.glbammo-*.jsPCDLoaderslam.workerthree.worker 等均在 assets/dist/
无原生 3D 引擎 so lib/arm64-v8a/ 中无 Unity/Unreal 等库,仅有 FFmpeg、语音、加固等通用 so
原生容器类 DEX 存在 com.unitree.doggo2.ui.activity.web.WebActivity
本地加载方式 DEX 字符串含 file:///android_asset/WebContainerImpl loadUrl
H5 桥接 com.unitree.provider.router.IWebEventService --- 原生与 H5 事件通信

simulator.html 结构(节选):

html 复制代码
<script type="module" crossorigin src="/assets/simulator-DCwy8tEZ.js"></script>
<link rel="modulepreload" href="/js/store/store.C-MxpaM3.js">
<link rel="modulepreload" href="/js/PCDLoader/PCDLoader.CtejSKyB.js">
3.4.2 运行时验证(ADB)

在真机(USB 调试)打开 UnitreeGo 模拟器页后,通过 ADB 确认:

bash 复制代码
adb devices
adb shell "dumpsys activity activities"

观测结果:

检查项 结果
前台 Activity topResumedActivity = com.unitree.doggo2/.ui.activity.web.WebActivity
进程 com.unitree.doggo2(非独立模拟器进程)
WebView 实现 系统 WebView com.google.android.webview 148.0.7778.178
Release 包 run-as com.unitree.doggo2package not debuggable
WebView 远程调试 进程无 webview_devtools_remote_<pid> socket,chrome://inspect 通常看不到该 WebView

分析: 静态结构与运行时行为一致------用户进入模拟器即进入 WebActivity;logcat 中可见 WebActivity 持续 RenderInspector 输出,符合 WebGL 页面刷新特征。Release 包未开放 WebView 调试,不影响「模拟器 = WebView H5」的判断,仅影响 DevTools attach。

3.4.3 架构示意
复制代码
用户打开「模拟器」
    → WebActivity(原生壳)
    → loadUrl("file:///android_asset/dist/simulator.html")
    → Vite/Vue 应用 + Three.js/Ammo/SLAM Worker
    → WebGL 在 WebView 内渲染 Go2 模型
    ↔ IWebEventService / BLE(必要时与真机或遥控数据交互)

与 Explore 对比: Explore 解包无 simulator.html,模拟器为 UnitreeGo(Go2)特有能力


四、Unitree Explore 分析

4.1 架构定性

Unitree Explore(包名 com.unitree.b2dog,主模块 godog)在 UnitreeGo 共有栈基础上扩展:

  • AR8030 无线图传 --- 7 个专属 so
  • 多机型原生模块 --- G1/H2/R1/A2 等
  • G1 资源包 --- g1_description.tar.xz(~17 MB)
  • H5 编程页 --- 独立 Programming 模块
  • 无支付模块

4.2 多产品线模块

模块 典型能力
godog 主壳:Main、Function、DataBill、DogAudio、DogFollow、HardwareUpdate
g1 / g1_d G1 人形:BaseInfo、RobotSetting、RemoteBind、LogReport、Limb/Motor/Imu
h2 H2 系列:BaseInfo、Battery、Log、Limb、Motor
r1 R1 系列:BaseInfo、Log、Limb
a2 A2 人形:设置/数据页(与 Go 版部分共用)
lib_ble 与 Go 相同的 BLE 连接/遥控

godog 典型 Activity:

  • com.unitree.godog.ui.activity.main.MainActivity
  • com.unitree.godog.ui.activity.function.FunctionActivity
  • com.unitree.godog.ui.activity.dataBill.DataBillActivity
  • com.unitree.godog.ui.activity.dogAudio.DogAudioActivity
  • com.unitree.godog.ui.activity.dogFollow.DogFollowActivity

4.3 AR8030 无线图传(Explore 独有)

仅 Explore 存在的 so:

复制代码
libar8030_client.so
libar8030_helper.so
libar8030_helper_jni.so
libar8030_ota.so
libar8030_ota_upgrade.so
libsky_ar8030_comm.so
libsky_serialport.so

配套 assets:

  • assets/ar8030_helper_socket
  • assets/data_stream

分析: AR8030 常见于无线 HD 图传/数传模组;结合 DogAudioActivity 与更大包体,Explore 面向 B2 等需远程音视频/数据链路的场景,Go 版更偏本地 BLE 控制与仿真。

4.4 Explore 版 H5 差异

项目 UnitreeGo Unitree Explore
主 Bundle main-*.js (~8.2 MB) index-*.js (~3.9 MB)
仿真页 simulator.html
编程页 Blockly 资源 + 共用逻辑 独立 Programming-*.js/css
3D 环境 完整 forest/grass 大贴图 共享 Go2 模型,环境资源更少
G1 描述 g1_description.tar.xz
调试 无 vConsole 内置 vconsole.min.*.js

五、共有技术底座

5.1 构建信息

两份 APK 构建配置一致:

复制代码
androidGradlePluginVersion=8.0.2
Kotlin 1.8.0
Java source/targetCompatibility=17

5.2 DEX 架构

App DEX 文件 大小
UnitreeGo classes.dex ~ classes4.dex 7.13 + 7.18 + 6.16 + 1.87 MB
Unitree Explore classes.dex ~ classes4.dex 6.94 + 6.02 + 3.15 + 7.62 MB

5.3 跨端框架排除

框架 UnitreeGo Unitree Explore
Flutter 未发现 未发现
React Native 未发现 未发现
Hippy 未发现 未发现
Weex 运行时 未发现 未发现

六、WebView 与混合开发

本章是操控体验的核心: 宇树 App 中用户可见的大部分机器人交互界面,均来自 assets/dist/ 内的 Vite/Vue 工程;原生层提供连接与桥接。

6.1 前端技术栈

assets/dist/ 为 Vite 构建产物,HTML 标题为 「Vite + Vue + TS」 ,同时包含 legacy 与现代双构建(polyfills-legacy-*.jsmain-legacy-*.js)。

共有 Worker:

  • slam.worker-*.js --- SLAM 计算
  • three.worker-*.js --- Three.js 渲染
  • videoTransform.worker-*.js --- 视频变换

Explore 额外包含 workerSolver.worker-*.js

6.2 原生桥接

DEX 中存在:

  • com.unitree.doggo2.ui.activity.web.WebActivity / godog 同名 Web 页
  • com.unitree.provider.router.IWebEventService --- H5 与原生事件桥接
  • AgentWeb --- Web 容器(Manifest 字符串)

6.3 dist 同源分析

  • 相同相对路径:68 个
  • MD5 完全一致:66 个(joystick、Go2.glb、polyfills 等)
  • 说明:同一前端工程多 target 构建,Go/Explore 已开始业务 Bundle 分化

6.4 模拟器加载链路

UnitreeGo 模拟器是混合架构的典型实例:

层级 实现
原生入口 WebActivity 启动,Intent 携带 H5 路径(推断为 simulator.html 或等效 URL)
H5 入口 assets/dist/simulator.html
主逻辑 simulator-*.js + 共享 js/store/js/PCDLoader/
3D/物理 three.worker-*.jsammo-*.jsmodels/Go2.glb
SLAM js/slam/slam.worker-*.js111.pcd
调试 Go 版无 vConsole;Release 包 chrome://inspect 多不可用,可依赖 ADB 看前台 Activity

排除项: 非 Flutter/RN 页面;非 Unity/Unreal 原生仿真;Explore 无同名 simulator 入口。

6.5 dist 工程概览

assets/dist/ 是宇树 App 最核心的前端交付物 :原生 WebActivity 加载本地 HTML 后,用户看到的遥控、编程、建图、图传预览等交互,基本都运行在这一目录内的 Vue 应用里;原生层主要负责 WebView 容器、BLE/图传连接、以及 H5↔机器狗的数据桥接

UnitreeGo Unitree Explore
文件数 107 99
H5 版本(time.json v1.2.43(2026-05-11 构建) 同左(两 App 同源)
APK 版本 1.12.9 2.0.0
总体积(dist) ~80 MB+(含大贴图/模型) ~70 MB+(含 g1_description.tar.xz

工程特征:

  • 构建工具: Vite(HTML 标题「Vite + Vue + TS」,产物带 content hash)
  • 框架: Vue 3 + TypeScript(scoped CSS 中大量 [data-v-xxx]
  • 兼容性: modern + legacy 双构建(polyfills-legacy-*.js + @vitejs/plugin-legacy 典型结构)
  • 多页应用(MPA): 非单页唯一入口,至少 3 个 HTML entry
  • 状态/依赖: 独立 js/store/ chunk(~700 KB),被 index.html / simulator.html 预加载

三个 HTML 入口:

入口 主 Bundle 用途推断
index.html main-*.js(Go)/ index-*.js(Explore) 主操控应用:遥控、编程、雷达/地图、音视频、聊天等
simulator.html simulator-*.js Go 专用 3D 仿真(见 §3.4)
blank.html 无脚本 空壳页,可能供原生动态注入 URL 或占位

6.6 目录结构与分包

复制代码
assets/dist/
├── index.html | simulator.html | blank.html   # MPA 入口
├── time.json                                  # H5 版本与构建时间
├── assets/                                    # Vite 主 chunk(JS/CSS/worker)
├── js/
│   ├── store/          # 公共状态与框架依赖(两 App 预加载)
│   ├── pages/          # 路由懒加载页(如 Bluetooth)
│   ├── PCDLoader/      # 点云加载(Go 仿真/雷达)
│   ├── slam/           # SLAM 模块(Go)
│   └── Programming/    # Blockly 编程页(Explore 独立 chunk)
├── models/             # Go2.glb、环境贴图、HDR、PCD 等
├── imageBlockly/       # 可视化编程块图标(~35 个)
├── imageRemoteControl/ # 遥控摇杆 UI 素材
└── sprites/            # 通用图标(photo/video/volume 等)

Vite 分包策略(从 preload / 体积推断):

Chunk 体积级 职责
main / index ~4--8 MB 主应用 + 大部分业务 Vue 页面
store ~700 KB 全局 store、路由、公共依赖
simulator ~70 KB 仿真入口壳(重逻辑在 store/PCDLoader/slam)
Programming ~420 KB Explore 编程子应用
PCDLoader ~1.1 MB 点云解析
slam ~130--240 KB SLAM 前端模块
ammo-*.js ~1.8 MB Ammo.js 物理(Go)
*.worker.js 4--51 KB Three / SLAM / 视频 / 求解器(Worker 线程)

Explore 额外:g1_description.tar.xz(~17 MB,G1 机器人描述/模型资源包)、vconsole.min.*.js(H5 调试面板)。

同源关系: 68 个相同相对路径、66 个 MD5 一致 → 同一 monorepo/前端仓库、按 App 打不同 target;Go 多仿真资源,Explore 多任务/地图/编程分包。

6.7 功能页面与操控 UI

JS 经压缩混淆后,字符串中的路由名不易直接提取;但从 scoped CSS 组件类名(Vue SFC 编译产物)可还原主要功能页:

UnitreeGo main 应用(main-*.js + CSS)
CSS / 页面特征 功能推断
joystick-componentleft/right-joystick-component 双摇杆遥控
control-bodycontrol-cont 遥控操作区布局
remote_data_wrapper 遥控数据展示/状态
programme-wrapperprogramming_top_bar_wrapperblockly_field_wrapper Blockly 可视化编程
lidar_page 雷达/点云相关页
three-dimensional-map 三维地图视图
video-wrappervideo_windowphoto-bar-component 图传/拍照/录像
chat_wrapperbtn_chataudio_player_page 语音/聊天/音频播放
bolt 快捷动作(「闪电」类操作按钮)
disconnect_mark 断连状态提示
UnitreeGo simulator 应用(simulator-*.js + CSS)
特征 功能
lidar_preview_page 雷达预览
simulatoroperation-wrapperopera-bar-body 仿真主界面与操作栏
mode_switch_btn 模式切换
joystick-component 仿真内遥控
three-dimensional-map 3D 场景(配合 Go2.glb + Ammo)
Unitree Explore index 应用

在 Go 共有遥控/视频/音频基础上,CSS 显示 更强的巡检/建图/Task 能力

特征 功能
map_pagemap_listbtn_add_map 地图管理
slam_pageslam_modelslam_top_bar_wrapper SLAM 页
task_listtask_itembtn_taskbtn_add_route 任务/路线
all_task_listcurr_selected_task 任务列表与选中态
joystick-component 同样含双摇杆遥控
show_video_type 图传类型切换

Explore 的 Blockly 编程在 独立 js/Programming/Programming.*.js(CSS 中对应组件较少暴露在 index 主 CSS,编程为懒加载/独立子路由)。

结论: 用户对机器狗的大部分 交互式操控(摇杆、动作、编程块、地图/SLAM、图传 UI)都在 dist 的 Vue 应用内完成;这与「WebView 很重要」的体感一致。

6.8 3D / SLAM / 编程技术栈

技术 证据 作用
Three.js three.worker-*.js WebGL 3D 渲染(Worker offload)
Ammo.js ammo-CP2eG2rD.js(Go) 物理仿真
PCD 点云 PCDLoader.*.js111.pcd 雷达/点云可视化
SLAM js/slam/slam.worker-*.js 建图/定位前端计算
WASM libvoxel-*.wasm(Go) 体素/占用网格加速
3D 资产 Go2.glbGo2Root.glbenvironment.glb、立方体贴图 Go2 模型与环境
Blockly imageBlockly/ 图标 + programme-wrapper CSS + assets/program_text_1.txt 可视化编程 UI;生成 Python 下发机器狗(§7)
DDS 字样 main/index bundle 中出现 DDS 字符串 与宇树机器人 DDS 中间件 命名一致;H5 侧可能通过 原生桥间接使用,而非浏览器直连 DDS

Explore 额外:workerSolver.worker-*.js(求解器 Worker,可能用于路径/任务规划)。

6.9 原生桥接与通信

H5 不能直接访问 BLE;操控指令需经原生转发。DEX 中的桥接结构:

复制代码
WebActivity
  └─ AgentWeb / WebContainerImpl.loadUrl("file:///android_asset/dist/...")
       ├─ setWebViewClient / setWebChromeClient
       ├─ setWebClientProxy / setWebEventProxy
       └─ IWebEventService
            ├─ UnitreeGo: WebEventServiceImpl (doggo2)
            └─ Explore: GlobalWebEventServiceImpl (godog)
组件 说明
WebActivity 全屏 WebView 容器,承载 dist 各入口
AgentWeb 增强 WebView 封装(文件访问、ChromeClient 等)
IWebEventService H5 ↔ Native 事件协议(ARouter IProvider
AppRouteService 与 Web 路由/跳转相关的原生服务

通信分层(推断):

复制代码
Vue 操控 UI(摇杆/编程/地图)
    │  JS 调用 / WebEvent 桥
    ▼
Native(WebEventServiceImpl、lib_ble、AR8030...)
    │  BLE / WiFi / DDS / rt/api/sport/request
    ▼
机器狗 onboard(Python high_level_api 等)

Bundle 内 未见 postMessage / webkit.messageHandlers 等典型字符串(可能被压缩或封装在 store 内),但 DEX 侧 WebEventProxy 体系明确,说明 官方路径是 Unitree 自研 H5 桥,而非通用 JSBridge 框架

js/pages/Bluetooth.*.js 体积极小(懒加载占位),蓝牙列表/配对 UI 可能仍在主 bundle,连接 establishment 在原生 lib_ble,H5 只发「已连接/指令」类事件。

6.10 Go 与 Explore 前端差异

维度 UnitreeGo Unitree Explore
主入口 JS main-*.js(~8 MB) index-*.js(~4 MB)
仿真 MPA simulator.html
3D 环境资源 forest/grass 大贴图、environment.glb 精简,共享 Go2 模型
编程 合入 main 应用 CSS 独立 Programming.*.js chunk
地图/任务/SLAM 页 lidar_page 为主 map_pageslam_page、完整 task/route UI
调试 无 vConsole 内置 vConsole
G1 资源 g1_description.tar.xz
独有 dist 文件 ~39 个(仿真/PCD/ammo 等) ~31 个(Programming/vConsole/g1 等)

产品化解读:

  • UnitreeGo: 前端重心 = Go2 消费遥控 + 仿真预演 + 内嵌 Blockly 编程 + 雷达/3D 地图
  • Unitree Explore: 前端重心 = 多机型运维 + 地图/任务/SLAM 工单流 + 独立编程模块 + 图传,仿真弱于 Go

七、Blockly 可视化编程

7.1 核心证据

  • assets/dist/imageBlockly/ --- Blockly 图标资源(两 App 均有)
  • assets/program_text_1.txt --- 示例程序,含 Blockly JSON + 生成 Python
  • Explore 独立 js/Programming/Programming.*.js(~420 KB)

7.2 生成代码与机器人 API

示例 program_text_1.txt 显示调用链:

python 复制代码
from high_level_api import *
processAction('rt/api/sport/request', 1016, '');  # 握手等动作
poseDynamic(...);  # 姿态控制

Blockly 块类型示例:

  • shakeHands_commandjumpForward_commandhappy_command
  • pose_dynamic_command --- 姿态动态控制(roll/pitch/yaw/height)
  • my_procedure_def / my_procedure_call --- 自定义过程

分析: App 内 Blockly 编辑器生成 Python,通过 rt/api/sport/request 等接口下发至机器狗 onboard 运行时(programming_actuator),而非纯本地模拟。

7.3 语音语法资源

复制代码
assets/call.bnf              # 科大讯飞语法:打电话场景
assets/grammar_sample.abnf   # ABNF 语法样例
assets/userwords             # 用户词表
assets/iattest.wav           # 语音测试音频

八、原生库技术栈

两 App 在 lib/arm64-v8a/ 中共打包 20 个相同 so ;Unitree Explore 额外多 7 个 AR8030 图传相关库。绝大多数可对应到已知开源或国内常见 SDK;无 Unity/Flutter/React Native/OpenCV/TensorFlow 等业务向原生引擎 so。

8.1 so 清单(按类别)

共有(20 个): FFmpeg 系 9 个 + 讯飞 MSC 1 个 + MMKV 1 个 + 百度加固 1 个 + 崩溃/监控 8 个。

Explore 独有(7 个): AR8030 模组 SDK 5 个 + 宇树 sky 封装 2 个。

8.2 共有 so 详解

媒体 / FFmpeg(9 个)
so 已知库 在 App 中的作用
libavcodec.so FFmpeg 编解码 H.264/H.265 等音视频解码
libavformat.so FFmpeg 封装格式 mp4、rtsp 等容器读写
libavutil.so FFmpeg 工具库 基础数据结构、日志
libavfilter.so FFmpeg 滤镜 缩放、裁剪等
libavdevice.so FFmpeg 设备 采集/输出设备抽象
libswresample.so FFmpeg 重采样 音频采样率/声道转换
libswscale.so FFmpeg 缩放 视频分辨率/像素格式转换
libffmpegkit.so FFmpegKit Android 上对 FFmpeg 的封装,供 Java/Kotlin 调用
libffmpegkit_abidetect.so FFmpegKit 附属 运行时检测 CPU ABI,选择对应 FFmpeg 实现

分析: 用于视频预览、录播、图传相关解码/转码等,与 assets/standard_h1.mp4 及媒体场景一致。

语音(1 个)
so 已知库 在 App 中的作用
libmsc.so 科大讯飞 MSC(Mobile Speech Client) 语音识别、合成、语法理解

配套 assets/iflytek/call.bnfgrammar_sample.abnf 等。

存储(1 个)
so 已知库 在 App 中的作用
libmmkv.so 腾讯 MMKV 高性能 key-value 本地存储(配置、缓存、用户偏好)
加固(1 个)
so 已知库 在 App 中的作用
libbaiduprotect.so 百度加固(Baidu Protect) APK 壳、反调试、防篡改(非业务功能库)

Release 包不可 run-as、WebView 难以 chrome://inspect,与加固策略一致。

崩溃 / 性能监控(8 个)
so 已知库 在 App 中的作用
libcrashlytics-anr.so Firebase Crashlytics ANR(主线程卡死)检测
libcrash-analysis.so 阿里 EMAS 崩溃分析 采集 native/Java 崩溃
libcrash-analysis-common.so EMAS 公共模块 崩溃上报基础设施
libcrash-analysis-handler.so EMAS 信号处理 捕获 SIGSEGV 等
libcrash-analysis-trampoline.so EMAS 跳板 崩溃 hook 跳转
libemas-hprof-dump.so 阿里 EMAS 内存 hprof dump,OOM 排查
libxhook-emas.so 阿里 xHook(EMAS 版) PLT/GOT hook,监控/插桩
libtbmarsxlog.so 腾讯 Mars xlog 高性能日志(常与 EMAS 监控配合)

8.3 Explore 独有 so 详解

so 类型 在 App 中的作用
libar8030_client.so AR8030 模组 SDK 无线图传/数传协议栈客户端
libar8030_helper.so AR8030 辅助层 连接、会话管理
libar8030_helper_jni.so AR8030 JNI 桥 Java/Kotlin ↔ native
libar8030_ota.so AR8030 OTA 图传模组固件升级
libar8030_ota_upgrade.so AR8030 OTA 升级流程 同上
libsky_ar8030_comm.so 宇树/Sky 自研封装 AR8030 之上的通信封装(命名带 sky
libsky_serialport.so 宇树/Sky 自研 串口读写(连图传模组或外设)

分析: AR8030 常见于无人机/机器人无线 HD 图传模组;Explore 面向 B2 等需远程音视频/数传的场景。配套 assets:ar8030_helper_socketdata_stream。UnitreeGo 上述 7 个 so,更偏 BLE + 本地 WebView 仿真。

8.4 汇总:已知库 vs 自研

类型 数量 代表
开源 / 国际常用 8 FFmpeg 全家桶(libav*libsw*
国内常见 SDK 11 MMKV、讯飞 MSC、百度加固、Firebase Crashlytics、阿里 EMAS/xHook、Mars xlog、FFmpegKit
硬件厂商 + 宇树封装 7(仅 Explore) AR8030 系列 + libsky_*

未发现的业务向库: libflutter.solibreactnative*.so(跨端)、libunity.so / libil2cpp.so(Unity)、libopencv*.solibtensorflow*.so 等------Go2 模拟器为 WebView + Three.js,非 Unity 原生引擎。

功能对应(一句话):

复制代码
FFmpeg 系     → 视频/音频处理
libmsc        → 语音控制
libmmkv       → 本地配置缓存
libbaiduprotect → 防逆向
EMAS/Crashlytics/Mars → 线上监控
AR8030 + sky  → Explore 远程图传(Go 无)

8.5 加固配套(assets)

复制代码
assets/baiduprotect-sec.dex
assets/baiduprotect1~5.jar
assets/baiduprotect1~5.i.dex
assets/libbaiduprotect_x86_64

九、第三方 SDK 集成

9.1 共有 SDK

类别 选型 证据
路由 阿里 ARouter DEX com/alibaba/android/arouter
网络 Retrofit + OkHttp DEX + okhttp3/ 资源
JSON Fastjson DEX
图片 Glide DEX
数据库 Room DEX
异步 RxJava + Coroutines DEX + kotlinx.coroutines META-INF
事件 EventBus DEX
Web 容器 AgentWeb Manifest 字符串
屏幕适配 AndroidAutoSize Manifest autosize-init-provider
工具库 UtilCode Manifest utilcode.provider
崩溃监控 Firebase + 阿里 EMAS so + DEX
存储 MMKV libmmkv.so
语音 科大讯飞 MSC libmsc.so + assets/iflytek/
媒体 FFmpegKit libffmpegkit.so
加固 百度加固 libbaiduprotect.so + assets

9.2 UnitreeGo 独有 SDK

类别 选型
支付 微信 OpenSDK(WXPayEntryActivity)+ 支付宝
业务 com.unitree.pay 支付模块

9.3 权限与能力(综合 Manifest + DEX)

Manifest 可见(部分): 蓝牙、相机、录音、电话、网络、振动、Wake Lock 等。

DEX 额外引用: 精/粗定位、存储读写、通知、网络状态等。

与 BLE 连狗、语音控制、相机/图传、固件升级等场景一致;需关注 Android 12+ BLE 与新存储权限适配。


十、应用架构特点

10.1 架构分层

复制代码
┌─────────────────────────────────────────┐
│  Android 原生层 (Kotlin)                 │
│  ARouter │ lib_ble │ doggo2/godog │ 多机型 │
│  AR8030 图传 (仅 Explore)                │
├─────────────────────────────────────────┤
│  WebView + assets/dist (Vite/Vue/TS)     │
│  Blockly │ 3D 仿真/SLAM │ 编程页          │
├─────────────────────────────────────────┤
│  机器狗/人形 onboard                      │
│  Python high_level_api │ sport/request   │
└─────────────────────────────────────────┘

10.2 双 App 策略

  1. 底座复用 --- 20 个 so、66/68 个 H5 资源完全一致,降低维护成本
  2. 按产品分化 --- Go 强化 3D 仿真;Explore 强化图传与多机型
  3. 原生握连接 --- BLE/AR8030 在 native,实时性有保障
  4. H5 承载复杂 UI --- 3D、Blockly、仿真可独立迭代

10.3 潜在挑战

  1. 包体积大 --- 3D 资源、G1 描述包、JS legacy/modern 双构建
  2. H5 分叉 --- dist 已开始分化,长期需防 Go/Explore 前端债务
  3. 加固 --- 百度加固增加逆向与自动化测试难度
  4. 跨平台 --- 纯 Android 原生,iOS 需独立开发

十一、技术架构总结

11.1 架构特点

  1. 原生 + WebView 混合 --- 硬件控制走原生,复杂 UI/3D/编程走 H5
  2. 无跨端 UI 框架 --- 未使用 Flutter/RN,机器人类 App 重 BLE/图传 SDK
  3. 模块化清晰 --- ARouter + 多 product module,Explore 覆盖 G1/H2/R1/A2/B2
  4. 可视化编程 --- 自研 Blockly → Python,对接 onboard API
  5. 双 App 同源 --- 共享底座,按产品线拆分客户端

11.2 技术选型分析

技术领域 选型 原因
整体架构 原生 + WebView 混合 连接与实时控制走 native;3D/编程快速迭代
跨端 未使用 RN/Flutter 重 BLE/图传/原生 SDK,H5 只包局部
模块化 ARouter + 多 module 多机型共用底座
编程 Blockly → Python 降低编程门槛,对接 onboard
3D 模拟器 WebView + Three + Ammo + WASM Go 版 simulator.html 在 WebActivity 内 WebGL 渲染
图传 AR8030 native(Explore) B2 远程音视频/数据
语音 科大讯飞 MSC 语音识别与语法
媒体 FFmpegKit 视频编解码
存储 MMKV 高性能 KV
安全 百度加固 保护控制逻辑
监控 EMAS + Crashlytics 崩溃与性能

11.3 两款 App 一句话总结

App 总结
UnitreeGo Go2 专用:BLE + Blockly + WebView 3D 模拟器(simulator.html)+ 支付,v1.12.9
Unitree Explore 多机型平台:AR8030 图传 + G1/H2/R1/A2 + 编程页,v2.0.0,无支付

十二、总结

宇树科技 UnitreeGo 与 Unitree Explore 均为自研、同源双 App ,采用 Kotlin 原生 + Vite/Vue H5 混合 架构,在 BLE 连接、Blockly 编程、FFmpeg 媒体、科大讯飞语音等方面高度共享。UnitreeGo 聚焦 Go2 消费体验与 WebView 3D 模拟器WebActivity + simulator.html);Unitree Explore 扩展 AR8030 图传与多产品线运维,是面向 B2 及 G1/H2/R1/A2 的平台型客户端。

核心优势:

  • 原生把控 BLE/图传,实时性有保障
  • H5 承载 3D、Blockly 等复杂交互,迭代灵活
  • 双 App 底座复用率高,多产品线扩展清晰
  • 可视化编程降低机器狗使用门槛

改进方向:

  • 优化包体积(3D 资源、双构建 JS、G1 描述包)
  • 统一 Go/Explore 前端工程,减少 dist 分叉
  • 完善 Android 12+ 权限声明与适配
  • 评估 iOS 端能力对齐(当前仅 Android 分析)

附录:分析环境与数据来源

  • 样本路径 (解包目录,略):
    • UnitreeGo/UnitreeGo.zip
    • Unitree_Explore/Unitree_Explore.zip
  • 主要依据: AndroidManifest.xml(UTF-16 字符串提取)、classes*.dexlib/arm64-v8a/*.soassets/dist/(含 time.json、CSS 组件类名、Worker 分包)、kotlin-tooling-metadata.jsonassets/program_text_1.txt
  • 模拟器运行时验证(UnitreeGo): ADB dumpsys activity activities(前台 WebActivity)、run-as(Release 不可调试)、/proc/net/unix(无 WebView devtools socket);真机 USB 调试,App v1.12.9
  • 说明: 静态结论来自可读包结构;模拟器 WebView 判定由静态 + ADB 交叉印证;加固与混淆部分类名可能不完整

分析基于 UnitreeGo(v1.12.9)与 Unitree Explore(v2.0.0)解包样本;模拟器链路经 ADB 运行时验证