🎯 一句话总结: PixelIMS 是一个开源 Android 应用,通过 Instrumentation 框架绕过 Google 运营商白名单,无需 Root 即可在 Pixel 设备上启用 5G、VoLTE、VoWiFi、VoNR 等全部 IMS 特性。
图 1:PixelIMS 整体架构——Shizuku 提供非 Root 权限,PixelIMS 通过 Instrumentation 框架修改运营商配置
📌 项目概览
| 项目 | 参数 |
|---|---|
| 项目名称 | PixelIMS |
| 开发语言 | Java |
| 最低系统 | Android 12 (API 31) |
| 支持设备 | Google Pixel 6 及以上(Tensor 芯片) |
| 核心依赖 | Shizuku v13+ |
| Root 要求 | ❌ 无需 |
| 开源协议 | 遵循上游 vvb2060/TurboIMS 相关许可 |
功能清单
| 功能 | 说明 |
|---|---|
| 5G NR (NSA/SA) | 非独立组网与独立组网全部支持 |
| VoLTE | 4G 高清语音通话 |
| VoWiFi | WiFi 环境下的语音通话 |
| VoNR | 5G 网络上的语音通话 |
| 视频通话 (VT) | IMS 视频呼叫 |
| 跨 SIM 通话 | 多 SIM 卡场景覆盖 |
| UT 补充业务 | 呼叫等待、呼叫转移等 |
🔍 问题背景
Google 运营商白名单机制
Google Pixel 设备的调制解调器固件中维护一份运营商白名单(Carrier Whitelist)。如果当地运营商未被 Google 列入批准名单,Pixel 会拒绝连接 5G 网络,同时隐藏 VoLTE 设置选项。即使运营商已经在物理上部署了 5G 基站,用户仍然无法使用。
传统解决方案如刷入修改版固件或使用 Magisk 模块都需要 Root 权限,这会带来安全风险和保修失效的问题。
绕过技术演进时间线
图 2:绕过技术从 ADB 直接调用 → TurboIMS Root 方案 → CVE 补丁封堵 → Instrumentation 绕过 的演进路径
⚙️ 核心绕过原理
Instrumentation 框架绕过
2025 年 10 月,Google 修复了 CVE-2025-48617,封堵了从 ADB Shell 直接调用 CarrierConfigManager.overrideConfig() 的路径。PixelIMS 改用 Android 的 Instrumentation 框架进行间接调用:
图 3:Instrumentation 绕过流程——从 Shizuku 到最终调用 overrideConfig 的完整链路
整个流程可以概括为:
- ShizukuProvider 接收 Shizuku 框架返回的 Binder 对象
- 调用
IActivityManager.startInstrumentation(),携带INSTR_FLAG_NO_RESTART标志和自身 PID - 系统以 Instrumentation 上下文启动 PrivilegedProcess(继承自
Instrumentation) - PrivilegedProcess 内部调用
startDelegateShellPermissionIdentity()提升当前 UID 权限 - 调用
CarrierConfigManager.overrideConfig()修改运营商配置——系统在 Instrumentation 上下文中不会触发 CVE 补丁的检测 - 释放委托权限,正常退出
安全门控:PrivilegedProcess 会校验传入 PID 与自身 PID 一致,防止被恶意应用滥用。
canPersistent() — 运行时补丁级别检测
不同 Android 补丁级别对持久化配置覆盖有不同的限制策略。PixelIMS 在运行时探测 com.android.phone.CarrierConfigLoader 类的私有方法来判断当前环境:
| 系统状态 | isSystemApp() | isSdkSandboxUidInternal() | 持久化覆盖 |
|---|---|---|---|
| 旧版系统 | 不存在 | 不存在 | ✅ 安全 |
| 中间版本 | 存在 | 不存在 | ✅ 安全 |
| 最新补丁 | 存在 | 存在 | ❌ 被阻止,改用会话模式 |
showVoLTE() — IMS 配置层绕过
部分运营商在 CarrierConfigManager 之上还有第二层 IMS 配置保护。即使运营商配置被成功覆盖,KEY_VOIMS_OPT_IN_STATUS 标志可能仍被设为禁用。PixelIMS 通过直接调用 ITelephony.setImsProvisioningInt() 绕过这层限制——这是 TurboIMS 从未覆盖的层面。
版本指纹机制
应用将 vvb2060_config_version = VERSION_CODE 写入运营商配置包。下次 Shizuku 连接时读取该键值,如果配置已是最新版本则自动跳过重新应用,避免不必要的重复操作。
📱 使用教程
前提条件
| 要求 | 说明 |
|---|---|
| 设备 | Google Pixel 6 及以上(Tensor 芯片) |
| 系统版本 | Android 12 (API 31) 及以上 |
| Shizuku | v13+,从 Google Play 免费安装 |
第一步:启用无线调试
- 打开 设置 → 关于手机
- 连续点击 版本号 7 次,激活开发者选项
- 进入 设置 → 系统 → 开发者选项
- 启用 无线调试
第二步:配置 Shizuku
- 从 Google Play 安装 Shizuku
- 打开 Shizuku 应用
- 点击 「无线调试配对」
- 按照配对向导完成设置(全程无需电脑)
- 确认 Shizuku 状态显示为 "Running"
第三步:安装 PixelIMS
- 安装
PixelIMS.apk - 打开应用
- 首次启动时授予 Shizuku 访问权限
- Shizuku 状态应显示 ✅ Ready
- 根据需要关闭不需要的功能开关
- 点击 「Apply to All SIMs」
- 成功后点击 「Open Network Settings」
- 在 SIM 卡设置中启用 5G 和 VoLTE 选项
第四步:重启后操作
每次重启后,无线调试会自动关闭:
- 前往 设置 → 开发者选项 → 无线调试 → 重新打开
- 打开 Shizuku → 点击 Start
- 打开 PixelIMS → 点击 Apply
如果显示 Persistent mode: Yes,配置会在后续重启中自动保持,无需重复操作。
📊 三代工具对比
| 特性 | vvb2060 v3.1 | TurboIMS v3.0 | PixelIMS v1.0 |
|---|---|---|---|
| 2025 年 10 月补丁绕过 | ✅ | ❌ 已失效 | ✅ |
| 图形界面 | ❌ 无头模式 | ✅ | ✅ |
| 功能独立开关 | ❌ | ✅ | ✅ |
| 按 SIM 单独选择 | ❌ | ✅ | ✅ |
| 中英文语言切换 | ❌ | ✅ | ✅ |
| showVoLTE() IMS 配置层 | ✅ | ❌ | ✅ |
| canPersistent() 补丁检测 | ✅ | ❌ | ✅ |
| 版本指纹跳过机制 | ✅ | ❌ | ✅ |
| UI 显示配置状态 | ❌ | ❌ | ✅ 新增 |
| UI 显示持久化状态 | ❌ | ❌ | ✅ 新增 |
| Shizuku 连接自动应用 | ✅ | ❌ | ✅ |
| SDK 沙箱支持 (Android 14+) | ✅ | ❌ | ✅ |
| 最低 Android 版本 | API 34 | API 33 | API 31 |
从对比表可以看出,PixelIMS 在保持与 v3.1 相同绕过能力的同时,填补了 TurboIMS 在最新补丁下完全失效的空白,并以图形界面大幅降低了使用门槛。
🔧 源码构建
环境要求
| 依赖 | 版本 |
|---|---|
| Android Studio | Hedgehog (2024.1.1)+ |
| JDK | 17 |
| Android SDK | API 35 |
构建步骤
# 1. 克隆仓库
git clone https://github.com/VinujaHerath/PixelIMS.git
cd PixelIMS
# 2. 构建(首次自动下载 Gradle 和依赖)
./gradlew assembleRelease
# 3. 签名
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
zipalign -v 4 app/build/outputs/apk/release/app-release-unsigned.apk aligned.apk
apksigner sign --ks my-release-key.jks --out PixelIMS.apk aligned.apk
# 4. 安装
adb install PixelIMS.apk
⚠️ 常见问题
Shizuku 重启后显示 "Not Running"?
无线调试在重启后默认关闭。前往开发者选项重新启用,然后打开 Shizuku → Start。
点击 Apply 后仍然显示 "Not yet applied"?
Instrumentation Runner 需要几秒钟完成。等待 5 秒后下拉刷新。如果仍然失败,强制停止应用后重试。
SIM 设置中没有出现 5G 选项?
确认运营商套餐包含 5G 服务且你处于覆盖范围内。以斯里兰卡为例,截至 2026 年 5 月,Dialog 在科伦坡、康提、加勒等主要城区提供 5G 覆盖。
出现 SecurityException?
说明系统补丁已封堵当前绕过路径。关注 GitHub Issues 查看是否有新的绕过方法发布。
🏗️ 项目结构
PixelIMS/
├── app/
│ ├── build.gradle.kts
│ ├── proguard-rules.pro
│ └── src/main/
│ ├── AndroidManifest.xml
│ └── java/io/github/pixelims/
│ ├── MainActivity.java # 主界面
│ ├── SplashActivity.java # 启动屏
│ ├── PrivilegedProcess.java # 核心绕过引擎
│ ├── ShizukuProvider.java # Shizuku 集成
│ └── LocaleHelper.java # 多语言切换
│ └── res/
│ ├── layout/
│ └── values[-zh]/
├── stub/ # Hidden API 存根
│ ├── build.gradle.kts
│ └── src/main/java/
│ ├── android/app/
│ │ └── IActivityManager.java # INSTR_FLAG 常量
│ └── com/android/internal/telephony/
│ └── ITelephony.java
├── build.gradle.kts
├── settings.gradle.kts
└── README.md
🎯 总结
PixelIMS 的核心价值在于:在不 Root、不刷机的前提下,通过 Android 框架层面的 Instrumentation 绕过机制,让被 Google 白名单排除在外的 Pixel 用户也能享受完整的 5G 和 IMS 体验。 结合 Shizuku 的免 Root 权限提升和 vvb2060 的成熟绕过引擎,再加上图形化的操作界面,使得这项原本需要深度技术背景的操作变得触手可及。
对于经常前往斯里兰卡等运营商未被官方支持地区的用户来说,这可能是目前唯一可行的 Pixel 5G 解决方案。
