ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Carrier IMS for Pixel 隐藏 API 实战:ITelephony、ISub 桩与 Shizuku 权限提升全解

Carrier IMS for Pixel 隐藏 API 实战:ITelephony、ISub 桩与 Shizuku 权限提升全解 【免费下载链接】carrier-ims-for-pixelCarrier IMS for Pixel (TurboIMS): multilingual (中文/English) pixel ims / ims / carrierconfig / volte / vowifi / 5G toolkit for Google Pixel.项目地址https://gitcode.com/gh_mirrors/ca/carrier-ims-for-pixel点击查看免费下载在 Google Pixel 上开启 VoLTE、VoWiFi、5G 显示往往被系统级权限卡住。本文带你拆解Carrier IMS for Pixel如何用ITelephony、ISub 隐藏 API 桩加上Shizuku shell 权限提升让一个普通 App 也能安全读写运营商 IMS 配置实现一键调优 5G 与网络功能。项目定位基于 TurboIMS 的持续维护分支面向中国大陆与跨区使用场景让普通用户也能低门槛完成 IMS 功能调优与问题排查。核心能力集中在 app/src/main/java/io/github/vvb2060/ims/ 目录。为什么普通 App 改不了运营商配置Android 把「运营商配置CarrierConfig」、「IMS 注册状态」、「SIM 信息」这些敏感能力都锁在系统框架层外部应用直接调用会抛出SecurityException。传统做法是 Root但门槛高、风险大。Carrier IMS for Pixel 的思路是不越狱而是借助 Shizuku 提供的 shell 权限把「身份」临时委托过去再回调系统内部接口。这就是整篇文章要讲的核心链路ITelephony负责 IMS 注册、重置、运营商测试覆盖。ISub负责读取 SIM 卡Subscription信息。Shizuku负责把普通 App 的进程「提升」到 shell 权限身份。下面拆开看每一环。ITelephony 隐藏 API 桩读 IMS 状态的钥匙ITelephony是系统电话服务的一个内部接口普通 SDK 里看不到所以项目把它「打桩」成编译期可引用的接口。桩文件定义在这里接口声明stub/src/main/java/com/android/internal/telephony/ITelephony.java它只暴露 5 个真正用到的方法方法作用setCarrierTestOverride(...)覆盖运营商测试身份MCC/MNC 等setImsProvisioningInt/getImsProvisioningInt读写 IMS 配置项resetIms(int slotIndex)重置某张卡的 IMS 会话isImsRegistered(int subId)查询某张卡 IMS 是否已注册注意Stub.asInterface被声明为nativepublic native static ITelephony asInterface(IBinder binder);这是「桩」的关键技巧——运行时由真实的系统 AIDL 方法接管编译期只保证签名一致避免直接依赖系统内部类导致打包失败。实战读取 IMS 注册状态时ImsStatusReader 会把系统服务 binder 包一层ShizukuBinderWrapper再调isImsRegistered(subId)返回值直接映射到 UI 上的「已注册 / 未注册」。这套能力在 docs/plans/2026-06-20-ims-registration-status-fix.md 里还专门做过结果类型串错的修复。ISub 桩无权限读取 SIM 卡清单要让用户选择「应用到哪张 SIM 卡」就得拿到SubscriptionInfo列表。ISub接口负责这件事AIDL 声明stub/src/main/aidl/com/android/internal/telephony/ISub.aidl它提供两个方法getActiveSubscriptionInfoList与getSlotIndex。对应的SubscriptionInfo也被打成 parcelable 桩stub/src/main/aidl/android/telephony/SubscriptionInfo.aidl。在 SimReader 里逻辑是「优先走 ISub失败回退到公开的 SubscriptionManager」val binder serviceRegisterer?.get() ?: return null val sub ISub.Stub.asInterface(ShizukuBinderWrapper(binder)) sub.getActiveSubscriptionInfoList(null, null, true)这个「双路回退」是整项目稳健性的缩影——高风险路径失败时自动降级到安全路径。Shizuku shell 权限提升整条链路的引擎上面两个桩接口都调不动真正的「开关」是 Shizuku。核心动作就一行见 ImsModifieram.startDelegateShellPermissionIdentity(Os.getuid(), null)它把当前进程身份临时委托为 shell 权限于是ServiceManager.getService(...)能拿到系统服务 binder回调ITelephony/ISub不再被安全策略拦截操作完成后必须stopDelegateShellPermissionIdentity()立刻归还身份。项目把「等待 binder 就绪」封装成 waitForShizukuBinderReady最多重试 20 次、间隔 100ms避免 Shizuku 还没热起来就调用而报错。完整的「发起调用」由 ShizukuProvider 统一编排它通过am.startInstrumentation(...)把一个特权Instrumentation跑起来用一个IInstrumentationWatcher回调收集结果并用 15 秒超时保护防止卡死。所有特权操作都经 app/src/main/aidl/android/app/IInstrumentationWatcher.aidl 这套 AIDL 桩完成通信。双路径容错Broker 回退机制写 CarrierConfig 时「持久化覆盖persistent」对非系统应用受限可能抛SecurityException。项目为此设计了主路径 Broker 回退双保险主路径ImsModifier反射调用overrideConfigpersistent 失败自动降级为 non-persistent。回退路径BrokerInstrumentation当主路径返回含persistenttrue、SecurityException等关键字时由 ShizukuProvider.tryOverrideWithBroker 再次发起。这套「先安全路径、失败可回退」的策略正是项目比早期版本更稳的关键。从代码到功能一张图看懂调用链路用户点击开关 │ ▼ ShizukuProvider.overrideImsConfig │ am.startInstrumentation(...) ▼ ImsModifier特权 Instrumentation │ startDelegateShellPermissionIdentity ▼ ServiceManager.getService → ShizukuBinderWrapper │ ├── ITelephony.Stub.asInterface(...) → 读写 IMS / 覆盖 ├── ISub.Stub.asInterface(...) → 读 SIM 信息 └── CarrierConfigManager.overrideConfig → 写运营商配置 │ ▼ stopDelegateShellPermissionIdentity归还身份关键源码速查表模块文件作用ITelephony 桩stub/src/main/java/com/android/internal/telephony/ITelephony.javaIMS 注册/重置/覆盖ISub 桩stub/src/main/aidl/com/android/internal/telephony/ISub.aidl读 SIM 信息系统服务桩stub/src/main/java/android/os/ServiceManager.java系统服务 binder 代理身份委托桩stub/src/main/java/android/app/IActivityManager.javashell 权限委托权限编排app/src/main/java/io/github/vvb2060/ims/ShizukuProvider.kt统一发起特权调用配置写入app/src/main/java/io/github/vvb2060/ims/privileged/ImsModifier.kt写 CarrierConfig IMS状态读取app/src/main/java/io/github/vvb2060/ims/privileged/ImsStatusReader.kt读 IMS 注册状态适用环境与注意事项 ⚠️设备Pixel Tensor 平台Pixel 6 / 7 / 8 / 9 / 10、Fold、Tablet。系统Android 13 及以上建议 Android 14 / 15 / 16。前置需先安装并启动 Shizuku在 App 内完成授权。本应用会修改系统运营商相关配置仅用于学习、测试与自有设备调优。请自行评估风险并对操作结果负责。想深入原理或复刻这套「隐藏 API 桩 Shizuku 提权」方案建议从 stub/ 模块的 AIDL 与桩定义读起再对照 app/src/main/java/io/github/vvb2060/ims/privileged/ 下的各个Instrumentation实现就能完整还原整条权限链路。赞分享【免费下载链接】carrier-ims-for-pixelCarrier IMS for Pixel (TurboIMS): multilingual (中文/English) pixel ims / ims / carrierconfig / volte / vowifi / 5G toolkit for Google Pixel.项目地址https://gitcode.com/gh_mirrors/ca/carrier-ims-for-pixel点击查看免费下载相关推荐如何看懂 Carrier IMS for Pixel从 UI 到 Shizuku 特权 Instrumentation 的四层架构拆解如何看懂 Carrier IMS for Pixel从 UI 到 Shizuku 特权 Instrumentation 的四层架构拆解 Carrier IMSPixel的IMS未注册怎么办Carrier IMS for Pixel一键触发IMS注册完整指南Pixel的IMS未注册怎么办Carrier IMS for Pixel一键触发IMS注册完整指南 Carrier IMS for PixelTurboIMAndroid 高版本限制 overrideConfig看 Carrier IMS for Pixel 如何用 BrokerInstrumentation 兜底Android 高版本限制 overrideConfig看 Carrier IMS for Pixel 如何用 BrokerInstrumentation 兜创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进