豆包输入法 (Doubao IME) APK 分析报告
分析日期: 2026-06-16 | 分析方法: apktool 静态解包分析
一、基本信息
| 属性 | 值 |
|---|
| 应用名称 | 豆包输入法 (Doubao IME) |
| 包名 | com.bytedance.android.doubaoime |
| 版本号 | 1.3.12 (versionCode: 100312006) |
| 构建时间 | 2026-06-15 12:10 (Jenkins: wave_ime_publish_pkg_official_64) |
| 目标SDK | compileSdk: 33, targetSdk: 33, minSdk: 26 (Android 8.0+) |
| 开发者 | 北京字节跳动网络技术有限公司 (ByteDance) |
| 签名方案 | BYTESIGN (APK Signature Scheme v2: X-Android-APK-Signed: 2) |
| 架构支持 | arm64-v8a only (纯64位) |
| 语言实现 | Java + Kotlin + C/C++ (JNI) |
| DEX Smali文件数 | 18,683 个 |
| Native库总大小 | ~73 MB (54个 .so) |
| 解包后总大小 | ~462 MB |
二、整体架构剖析
2.1 包结构概览
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| ├── AndroidManifest.xml # 应用清单(反编译后) ├── apktool.yml # apktool元信息 ├── assets/ # 静态资源(149MB) │ ├── skin/default/ # 皮肤/主题系统 │ ├── dict/ # 输入法词库(24个语言模型文件) │ ├── lottie/ # Lottie动画资源 │ ├── slardar.properties # 构建信息 │ └── grs_sdk_*.json/bks # 华为GRS SDK配置 ├── lib/arm64-v8a/ # Native层(73MB, 54个.so) ├── res/ # Android资源(44MB) ├── smali/ # 主DEX反编译(96MB) ├── smali_classes2/ # 第二DEX反编译(83MB) ├── unknown/ # 未压缩额外文件(~1MB,HMS/ Kotlin元数据等) └── original/ # 原始签名与清单 └── META-INF/ # BYTESIGN.RSA, BYTESIGN.SF, MANIFEST.MF
|
2.2 多进程架构
应用采用多进程架构,从AndroidManifest可见以下独立进程:
| 进程名 | 用途 |
|---|
| 主进程 | 输入法服务 (ImeService)、核心键盘功能 |
:Setting | 设置界面、引导页、WebView、隐私声明、5星好评 |
:push | 推送服务 (WsChannel, NotifyService) |
:pushservice | 小米推送 (XMPushService) |
:smp | 多厂商推送进程(小米SMP、Vivo、Oppo SMP) |
:widgetProvider | 小组件推送处理 |
:upgrade | 应用增量升级下载 |
:feedbacker | 用户反馈系统(浮窗、截图、录屏上报) |
:downloader | 独立下载进程 (SocialBase Downloader) |
:uploadLogProcess | 日志上传 |
多进程使各功能模块隔离,推送SDK崩溃不会影响IEM服务,下载任务独立运行。
三、核心功能分析
3.1 输入法引擎
| 组件 | 说明 |
|---|
| ImeService | 继承 InputMethodService,系统IME入口 |
| KeyboardJni | JNI桥接,连接 Java 层与 Native libkeyboard.so |
| ImeContentProvider | 对外 ContentProvider,提供IME集成接口 |
| SettingsContentProvider | 设置数据共享 ContentProvider |
键盘布局(assets/skin/default/layout/):
| 布局文件 | 键盘类型 |
|---|
input_kbd_pinyin26.xml | 全键拼音26键 |
input_kbd_pinyin9.xml | 九宫格拼音 |
input_kbd_english26.xml | 英文全键 |
input_kbd_bihua.xml | 笔画键盘 |
input_kbd_wubi.xml | 五笔键盘 |
input_kbd_number.xml | 数字键盘 |
input_kbd_symbol.xml | 符号键盘 |
input_kbd_more_symbol.xml | 更多符号 |
input_kbd_number_symbol_cn.xml | 中文数字符号 |
input_kbd_number_symbol_en.xml | 英文数字符号 |
input_more_cand.xml | 候选词展开 |
input_switch_keyboard.xml | 键盘切换面板 |
input_translate.xml | 翻译面板 |
input_toolbar_ai_writing.xml | AI写作工具栏 |
3.2 语音输入
- 权限:
RECORD_AUDIO, MODIFY_AUDIO_SETTINGS - 资源: Lottie语音动画(
ime_asr_recognize.json, listeningIcon.json, VoiceLoadingIcon.json) - 词库:
assets/dict/asr/ 下含2个ASR专用模型文件 - Native支持:
libaudioeffect.so(7.4MB)负责音频处理
3.3 AI/ML 能力
| Native库 | 大小 | 推断用途 |
|---|
libonnxruntime.so | 12.7 MB | ONNX Runtime 推理引擎,运行神经网络模型 |
libbytenn.so | 2.1 MB | 字节跳动自研神经网络推理库 (ByteNN) |
libkeyboard.so | 9.2 MB | 核心输入法引擎(词频、联想、纠错等) |
结合 libonnxruntime.so 和自定义模型文件(assets/dict 下24个hash命名的模型),推断输入法在线/离线集成了深度学习模型用于智能预测、自动纠错、语音识别等。
3.4 AI写作/翻译
- AI写作:
input_toolbar_ai_writing.xml 工具栏专用布局 - 翻译:
input_translate.xml 翻译面板,同时 assets 下有翻译语言文件:default_translation_en.json (英文翻译)default_translation_zh-CN.json (中文翻译)
3.5 皮肤/主题系统
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| assets/skin/default/ ├── 2x/ 3x/ 3.5x/ # 多DPI适配 ├── dark/ # 深色模式 │ └── drawable/ # 深色工具栏图标 ├── floating/ # 悬浮键盘样式 ├── land/ # 横屏样式 ├── drawable/ # 自定义工具栏图片 ├── layout/ # 键盘布局XML ├── input_main.xml # 主输入界面 ├── translate_main.xml # 翻译界面 ├── style.xml # 主样式 └── values/ ├── colors.xml # 颜色定义 ├── dark_colors.xml # 深色颜色 └── transparent_colors.xml # 透明颜色
|
3.6 无障碍服务
- ImeAccessibilityService: 注册为无障碍服务 (
canTakeScreenshot="true") - 功能: 监听
typeAllMask 事件,可截取屏幕内容 - 用途推测: 用于在特定应用场景(如聊天框)中获取上下文以优化输入预测或AI功能
四、权限安全分析
4.1 权限清单
高风险权限
| 权限 | 等级 | 用途分析 | 风险 |
|---|
RECORD_AUDIO | dangerous | 语音输入功能必需 | ⚠️中 |
READ_SMS | dangerous | 读取短信验证码自动填充 | 🔴高 |
RECEIVE_VERIFY_CODE_SMS | internal | 接收短信验证码(系统接口) | 🔴高 |
READ_CONTACTS | dangerous | 读取联系人(可能用于输入法词汇学习) | 🔴高 |
SYSTEM_ALERT_WINDOW | special | 悬浮窗(语音输入悬浮按钮、引导弹窗等) | ⚠️中 |
WRITE_SETTINGS | special | 修改系统设置 | ⚠️中 |
REQUEST_INSTALL_PACKAGES | signature | 应用内更新/下载安装APK | ⚠️中 |
BLUETOOTH / BLUETOOTH_ADMIN | dangerous | 蓝牙连接(可能用于耳机语音输入) | 🟢低 |
DETECT_SCREEN_RECORDING | normal | 检测录屏状态(隐私保护) | 🟢低 |
网络权限
| 权限 | 用途 |
|---|
INTERNET | 网络通讯 |
ACCESS_NETWORK_STATE | 检测网络状态 |
ACCESS_WIFI_STATE | 检测WiFi状态 |
CHANGE_NETWORK_STATE | 切换网络状态 |
自定义权限
| 权限名 | Protection Level | 用途 |
|---|
com.bytedance.android.doubaoime.permission.IME_PROVIDER | signatureOrSystem | IME Provider 访问控制 |
com.bytedance.android.doubaoime.permission.PROCESS_PUSH_MSG | signature | 推送消息处理 |
com.bytedance.android.doubaoime.permission.PUSH_PROVIDER | signature | 推送Provider读取 |
com.bytedance.android.doubaoime.permission.PUSH_WRITE_PROVIDER | signature | 推送Provider写入 |
com.bytedance.android.doubaoime.permission.MIPUSH_RECEIVE | signature | 小米推送接收 |
com.bytedance.android.doubaoime.permission.RECEIVE_KEYBOARD_HEIGHT | normal | 键盘高度通知 |
com.bytedance.android.doubaoime.permission.activity.* | signature | 设置Activity访问控制 |
com.bytedance.android.doubaoime.ACCESS_LOG_COMPRESSION_PROVIDER | signatureOrSystem | 日志压缩Provider |
4.2 网络安全配置
1 2 3 4 5
| <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates overridePins="true" src="system" /> </trust-anchors> </base-config>
|
- CleartextTrafficPermitted=true: 允许HTTP明文流量,存在中间人攻击风险
- overridePins=true: 覆盖了证书绑定(Cert Pinning),进一步降低安全性
- 调试模式下同时信任用户证书,便于开发但存在安全隐患
4.3 查询的第三方应用
应用在 <queries> 标签中声明查询以下类别:
- 社交: 微信 (
com.tencent.mm)、QQ (com.tencent.mobileqq) - 应用商店 (24个): 华为、小米、OPPO、vivo、三星、酷安、应用宝、百度手机助手、360手机助手、豌豆荚等
- 推送服务: 华为HMS Push、Huawei Works
- 相机:
IMAGE_CAPTURE - Lark SSO:
ssoclient (飞书单点登录)
应用商店查询用于引导用户到对应商店完成评分/更新;社交应用查询可能用于特定场景下的输入法功能优化。
五、第三方SDK集成清单
5.1 推送SDK(全厂商覆盖)
| SDK | 厂商 | 相关组件 | APP ID |
|---|
| 华为 HMS Push | 华为/荣耀 | PushReceiver, PushMsgReceiver, HmsMsgService, MessageService | - |
| 小米 MiPush | 小米 | XMPushService, XMJobService, PushMessageHandler, PingReceiver | - |
| Vivo Push | Vivo | CommandClientService, MainCommandClientService | - |
| OPPO/一加 Push | OPPO/一加 | DataMessageCallbackService, CompatibleDataMessageCallbackService, DataMessageReceivingService | - |
| 荣耀 Push | 荣耀 | 独立配置 | - |
| 自建WebSocket | 字节跳动 | WsChannelService, WsClientService, NotifyService | - |
5.2 字节跳动内部SDK
| SDK | 包名/路径 | 用途 |
|---|
| AppLog / Slardar | com.bytedance.applog | 数据埋点与日志上报 |
| APM | com.bytedance.apm, apm6 | 性能监控(CPU、内存、卡顿等) |
| CrashSDK | com.bytedance.crash | 崩溃捕获与上报 |
| Monitor | com.bytedance.monitor | 运行时监控 |
| News (Push) | com.bytedance.news | 推送平台SDK |
| ShadowHook | com.bytedance.shadowhook | 方法Hook框架(性能剖析) |
| ByteHook | com.bytedance.bytehook | PLT Hook库 |
| Sliver | com.bytedance.sliver | 安全检测/加固 |
| IES (Image) | com.bytedance.ies | 图片处理引擎 |
| Lighten | com.bytedance.lighten | 轻量级组件 |
| Lego | com.bytedance.lego | 模块化框架 |
| BDInstall | com.bytedance.bdinstall | 安装/迁移工具 |
| Frameworks | com.bytedance.frameworks | 内部基础框架 |
| FeedbackerLib | com.bytedance.feedbackerlib | 用户反馈SDK(飞书SSO集成) |
| PraiseDialogLib | com.bytedance.praisedialoglib | 应用内五星好评弹窗 |
| RPC / Retrofit | com.bytedance.rpc/retrofit2 | 网络请求封装 |
| Keva | com.bytedance.keva | 内部KV存储 |
| DataPlatform | com.bytedance.dataplatform | 数据中台SDK |
| MobSec | com.bytedance.mobsec | 移动安全 (libmetasec_ml.so) |
| Speech | com.bytedance.speech | 语音识别SDK |
| Tailor | com.bytedance.tailor | 云端配置下发 |
| Ug | com.bytedance.ug | 用户增长/应用内升级 |
5.3 开源/第三方库
| 库 | 用途 |
|---|
| AndroidX / Jetpack | 核心支持库、Lifecycle、Emoji2、Startup等 |
| Kotlin | 标准库、协程 (Coroutines) |
| OkHttp3 | HTTP 客户端 |
| Retrofit2 | REST API 封装 |
| ONNX Runtime | AI模型推理引擎 |
| Fresco | 图片加载与缓存 |
| Lottie | 动画引擎 |
| Material Components | UI组件库 |
| Cronet | 高性能网络库 (libsscronet.so) |
| libcurl | HTTP/网络传输 |
| ThreeTen-BP | 日期时间库 (assets/org/threeten) |
| BoringSSL | 加密/SSL (libttboringssl.so) |
| Zstd | 压缩算法 (libbdzstd.so) |
| MaterialCalendarView | 日历选择组件 |
六、Native层详细分析
6.1 核心Native库(按大小排序)
| 文件名 | 大小 | 推断用途 |
|---|
libonnxruntime.so | 12.7 MB | ONNX Runtime AI推理引擎 |
libkeyboard.so | 9.2 MB | 核心输入法引擎 |
libaudioeffect.so | 7.4 MB | 音频效果处理(语音输入用) |
libshell.so | 6.9 MB | 安全壳/反调试保护 |
libime_net_sdk.so | 6.8 MB | 输入法网络SDK |
libsscronet.so | 6.3 MB | Cronet网络引擎 |
libcurl.so | 5.3 MB | HTTP/libcurl |
libmetasec_ml.so | 4.0 MB | 安全与ML检测 (MobSec) |
libttffmpeg.so | 3.5 MB | FFmpeg 音视频处理 |
libbytenn.so | 2.1 MB | 字节跳动自研NN推理 (ByteNN) |
libttvideouploader.so | 1.3 MB | 视频上传 |
libttcrypto.so | 1.2 MB | 字节加密库 |
libtrack.so | 1.1 MB | 数据追踪/埋点 |
libime_ui_android_platform.so | 1.0 MB | IME UI渲染平台 |
6.2 安全/加固相关
| 文件名 | 大小 | 用途 |
|---|
libshell.so | 6.9 MB | 壳保护 / 反调试 |
libsliver.so | 141 KB | 安全检测 (Sliver) |
libmetasec_ml.so | 4.0 MB | 安全检测 + ML模型 |
libvcn.so | 211 KB | 完整性校验 (VCN) |
libvcnverify.so | 10 KB | VCN验证 |
libttmverify.so | 10 KB | 验证库 |
libttmverifylite.so | 26 KB | 轻量验证 |
libEncryptor.so | 76 KB | 加密模块 |
6.3 性能监控与调试
| 文件名 | 大小 | 用途 |
|---|
libprofiler.so | 471 KB | 性能分析器 |
libmonitorcollector-lib.so | 314 KB | 监控数据采集 |
libnpth.so | 178 KB | NPTraceHook 主库 |
libnpth_*.so | ~500KB | NPTraceHook 各插件 |
libshadowhook.so | 79 KB | 方法级Hook |
libbytehook.so | 59 KB | PLT级Hook |
npth 系列库 (14个) 是字节跳动的 NPTraceHook 框架,用于运行时函数跟踪、内存监控、网络监控等,属于生产环境性能可观测性基础设施。
七、数据采集与隐私分析
7.1 数据上报SDK
| SDK | 采集内容推测 |
|---|
| AppLog/Slardar | 用户行为埋点数据、设备信息、网络状态 |
| APM | 性能数据(CPU/内存/卡顿/启动时间等) |
| CrashSDK | 崩溃堆栈、应用状态快照 |
| Monitor | 系统资源监控数据 |
| Speech | 语音输入数据(可能含音频) |
7.2 敏感数据访问路径
- 短信验证码:
READ_SMS + RECEIVE_VERIFY_CODE_SMS → 自动填充验证码 - 通讯录:
READ_CONTACTS → 可能用于姓名联想学习 - 录音:
RECORD_AUDIO → 语音输入 - 无障碍截图:
canTakeScreenshot="true" → 反馈系统截图上报
7.3 构建溯源
1 2 3
| assets/slardar.properties: release_build: 686f9f1_20260615_121106_7651463597704726547 jekins_name: wave_ime_publish_pkg_official_64
|
2026年6月15日由 Jenkins CI/CD 自动构建,构建名为 wave_ime_publish_pkg_official_64,Git commit hash 686f9f1。
八、安全评估
8.1 正面因素
- ✅ APK签名验证: 使用 BYTESIGN 方案,支持 APK Signature Scheme v2
- ✅ 自定义权限隔离: 核心 Provider 和 Push 组件使用
signature 级自定义权限 - ✅ 多进程隔离: 推送、下载、反馈等模块独立进程,降低单点故障影响
- ✅ 安全检测层:
libshell.so + libsliver.so + libmetasec_ml.so 构成多层安全防护 - ✅ 完整性校验:
libvcn.so + libvcnverify.so 提供运行时完整性检测 - ✅ minSdkVersion 26: 运行在 Android 8.0+,避免了旧版系统的许多安全漏洞
- ✅ 纯64位: 仅arm64-v8a,减少内存相关攻击面
8.2 风险点
| 风险项 | 严重程度 | 说明 |
|---|
| 明文流量允许 | 🔴 高 | cleartextTrafficPermitted=true 允许HTTP,存在中间人风险 |
| 证书绑定被覆盖 | 🔴 高 | overridePins=true 进一步弱化证书安全 |
| 短信读取 | 🟡 中 | READ_SMS + 验证码SDK,可能泄露验证码 |
| 通讯录读取 | 🟡 中 | READ_CONTACTS,隐私风险 |
| 悬浮窗权限 | 🟡 中 | SYSTEM_ALERT_WINDOW 可能被滥用 |
| 无障碍截图 | 🟡 中 | canTakeScreenshot=true 可在任意界面截图 |
| 大量数据采集SDK | 🟡 中 | 内部SDK众多(AppLog/APM/Crash/Monitor),数据流向需关注 |
| 推送全链路 | 🟢 低 | 集成6个推送通道,推送SDK自身可能存在安全风险 |
| 应用安装能力 | 🟢 低 | REQUEST_INSTALL_PACKAGES 用于应用内自升级 |
| 多进程ContentProvider暴露 | 🟢 低 | ImeContentProvider exported=true 但有 signatureOrSystem 保护 |
8.3 加固分析
应用未使用常见第三方加固方案(如360加固、梆梆、爱加密等),但内置了字节跳动自研安全体系:
- libshell.so: 壳保护逻辑
- libsliver.so: 运行时安全检测
- libmetasec_ml.so: 基于ML的安全异常检测
- libvcn.so + libvcnverify.so: 代码完整性验证
- libnpth系列: 用于行为监控,也可用于安全审计
九、总结
9.1 应用画像
豆包输入法 1.3.12 是一款功能完善、架构复杂的AI输入法产品,由字节跳动团队开发。其特点是:
- AI深度融合: 使用 ONNX Runtime + ByteNN 双推理引擎驱动智能预测、纠错、语音识别和AI写作
- 全平台适配: 集成了华为/小米/OPPO/vivo/荣耀等主流厂商的推送SDK,覆盖国内市场
- 多键盘布局: 支持拼音26/9键、笔画、五笔、英文、数字、符号、翻译等多种模式
- 安全的体系: 字节自研安全套件(shell/sliver/vcn/metasec)提供多层保护
- 语音输入: 内置语音识别能力,含音频处理模块
- 模块化设计: 多进程架构、皮肤系统、插件化的功能组织
9.2 代码混淆程度
- 应用核心代码(
com.bytedance.android.doubaoime)进行了类名混淆(a-z字母 + 数字后缀) - 第三方SDK保持原始包名不变
- 存在4个完全混淆的根包(
J, c, d, e in smali; e, f, g in smali_classes2),约800+类 - 总体混淆覆盖率约 85%
9.3 关键发现
- 双AI推理框架: ONNX Runtime (12.7MB) + ByteNN (2.1MB) 并存,暗示同时承载标准模型和字节自研模型
- 语言模型加密存储: assets/dict 下24个模型文件使用hash命名,可能是加密/混淆的模型数据
- 无障碍截图能力: 反馈系统可截取当前屏幕内容,需关注用户隐私
- 网络安全弱配置: 允许明文流量且覆盖证书绑定,建议收紧
- 内部生态强依赖: 大量字节跳动内部SDK(20+个),反映字节技术中台的深度赋能
- 生产级可观测性: npth系列14个库提供全方位的运行时监控
本报告基于apktool静态解包分析,未进行动态运行分析,部分功能推断可能存在偏差。
via Deepseek-v4-pro.