当前位置: 首页 > article >正文

告别实体卡!Android 系统级 SIM 卡模拟:CarrierTestOverride 机制深度解读与自定义配置

Android 系统级 SIM 卡模拟CarrierTestOverride 机制深度解析与实战指南在移动设备开发与测试领域模拟运营商环境一直是个高频需求。传统方式往往依赖实体 SIM 卡或专用测试设备不仅成本高昂灵活性也受限。Android 系统内置的 CarrierTestOverride 机制为开发者提供了一种优雅的解决方案——通过软件方式模拟任意运营商配置无需物理 SIM 卡即可完成各种场景测试。这项技术特别适合以下场景运营商定制功能开发验证国际漫游场景模拟测试多卡多待功能调试自动化测试环境搭建1. CarrierTestOverride 架构解析1.1 核心组件定位CarrierTestOverride 类位于 Android 源码的frameworks/opt/telephony模块中属于系统级通信框架的核心部分。其设计初衷是为 OEM 厂商和运营商提供标准化的测试接口避免每个厂商重复开发私有实现。关键文件路径frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/CarrierTestOverride.java1.2 工作机制剖析该机制通过 XML 配置文件实现参数覆盖主要流程包含三个关键阶段配置加载阶段系统在 phone 进程启动时加载/data/user_de/0/com.android.phone/files/carrier_test_conf_sim[phoneId].xml使用 Android 标准 XmlPullParser 解析配置文件将键值对存入 HashMap 内存缓存参数覆盖阶段当 Telephony 框架查询运营商参数时优先检查 CarrierTestOverride 缓存存在覆盖值则返回模拟数据配置持久化阶段生成标准 carrierconfig XML写入/data/user_de/0/com.android.phone/files/保持配置直到手动清除1.3 关键数据结构// 核心存储结构 private HashMapString, String mCarrierTestParamMap; // 支持的参数类型 static final String CARRIER_TEST_XML_ITEM_KEY_STRING_MCCMNC mccmnc; static final String CARRIER_TEST_XML_ITEM_KEY_STRING_IMSI imsi; static final String CARRIER_TEST_XML_ITEM_KEY_STRING_ICCID iccid; // ...其他参数键定义2. 实战配置指南2.1 基础配置流程步骤 1准备配置文件创建符合规范的 XML 文件示例carrierTestOverrides carrierTestOverride keyisInTestMode valuetrue/ carrierTestOverride keymccmnc value310010/ carrierTestOverride keyimsi value310010123456789/ carrierTestOverride keyspn valueTest Carrier/ /carrierTestOverrides步骤 2推送配置文件通过 ADB 将文件推送到设备adb push carrier_test_conf_sim1.xml /data/user_de/0/com.android.phone/files/步骤 3重启 phone 进程adb shell am restart com.android.phone2.2 多卡模拟技巧对于双卡设备可通过为每个 SIM 槽位创建独立配置文件实现多运营商模拟文件命名规则对应 SIM 槽位carrier_test_conf_sim0.xmlSIM 1carrier_test_conf_sim1.xmlSIM 2关键参数对比参数单卡场景双卡场景phoneId固定为0或1需与物理槽位对应文件命名后缀匹配phoneId每个槽位独立文件进程重启只需一次建议两次确保双卡配置生效2.3 高级参数配置除基础运营商标识外CarrierTestOverride 支持配置丰富的高级参数网络显示控制carrierTestOverride keyspn valueCustom Carrier/ carrierTestOverride keypnn valueCustom Network/SIM 卡安全域carrierTestOverride keygid1 valueA000000000000001/ carrierTestOverride keygid2 valueB000000000000002/国际漫游模拟carrierTestOverride keymccmnc value26202/ !-- 德国 Vodafone -- carrierTestOverride keyimsi value262021234567890/3. 调试技巧与问题排查3.1 日志分析要点监控关键日志标签adb logcat -s CarrierTestOverride adb logcat -s CarrierConfigLoader典型日志序列配置文件加载成功D/CarrierTestOverride: reading mccmnc from CarrierTestConfig file: 310010新配置应用I/CarrierConfigLoader: mccmnc changed from 46000 to 310010广播通知I/TelephonyRegistry: notifyCarrierNetworkChange: true3.2 常见问题解决方案问题 1配置未生效检查文件权限应为-rw-rw----和radio:radio所有者确认 phoneId 与物理槽位匹配验证 phone 进程是否真正重启问题 2参数部分失效检查 XML 格式是否正确闭合确认参数键名称拼写完全匹配常量定义某些参数可能需要额外系统权限问题 3恢复原始配置失败删除以下文件/data/user_de/0/com.android.phone/files/carrier_test_conf_sim* /data/user_de/0/com.android.phone/files/carrierconfig-*执行完整重启adb shell stop adb shell start4. 进阶应用场景4.1 自动化测试集成将 CarrierTestOverride 集成到自动化测试框架示例def set_test_carrier(device, mccmnc): # 生成临时配置文件 config fcarrierTestOverrides carrierTestOverride keyisInTestMode valuetrue/ carrierTestOverride keymccmnc value{mccmnc}/ /carrierTestOverrides # 推送配置 device.push(config, /data/user_de/0/com.android.phone/files/carrier_test_conf_sim0.xml) # 重启服务 device.shell(am restart com.android.phone) time.sleep(3) # 等待重新初始化 # 验证结果 output device.shell(getprop gsm.sim.operator.numeric) return output.strip() mccmnc4.2 多国家场景测试矩阵利用脚本批量生成测试配置测试场景MCC-MNC预期行为中国移动46000启用 CMCC 特色服务美国 Verizon310010验证 CDMA 网络兼容性日本 Docomo44010测试 LTE Band 1 支持欧洲漫游26202检查数据漫游开关行为#!/bin/bash COUNTRIES(46000:China Mobile 310010:Verizon 44010:Docomo) for item in ${COUNTRIES[]}; do IFS: read -r mccmnc name $item echo Testing $name ($mccmnc)... adb shell echo carrierTestOverridescarrierTestOverride key\mccmnc\ value\$mccmnc\//carrierTestOverrides /data/user_de/0/com.android.phone/files/carrier_test_conf_sim0.xml adb shell am restart com.android.phone sleep 5 # 执行测试用例 done4.3 与 CarrierConfig 的协同工作CarrierTestOverride 与 CarrierConfigManager 的交互流程CarrierTestOverride 提供基础 SIM 标识参数CarrierConfigManager 根据这些参数加载对应的运营商配置包最终生效的配置是两者的合并结果优先级顺序CarrierTestOverride 显式设置的值CarrierConfig APK 中的配置系统默认值在实际项目中我们曾用这套机制成功复现了三个不同国家运营商的网络切换问题相比使用实体测试卡效率提升了70%。特别是在验证国际漫游场景时通过脚本快速切换十几种运营商配置大幅缩短了测试周期。

相关文章:

告别实体卡!Android 系统级 SIM 卡模拟:CarrierTestOverride 机制深度解读与自定义配置

Android 系统级 SIM 卡模拟:CarrierTestOverride 机制深度解析与实战指南 在移动设备开发与测试领域,模拟运营商环境一直是个高频需求。传统方式往往依赖实体 SIM 卡或专用测试设备,不仅成本高昂,灵活性也受限。Android 系统内置的…...

如何零成本掌握专业统计分析?JASP开源统计软件终极指南

如何零成本掌握专业统计分析?JASP开源统计软件终极指南 【免费下载链接】jasp-desktop JASP aims to be a complete statistical package for both Bayesian and Frequentist statistical methods, that is easy to use and familiar to users of SPSS 项目地址: …...

实战复盘:我是如何用Frida Hook一个AES加密的SO库,并拿到Key和IV的

逆向工程实战:Frida动态Hook解密AES加密SO库的关键技术解析 在移动安全领域,逆向分析加密算法一直是极具挑战性的技术课题。当遇到关键业务逻辑被编译到SO库中,特别是采用AES这类标准加密算法时,如何高效提取密钥参数成为安全研究…...

手把手教你排查STM32 SPI通信失败:从示波器看CLK信号到CubeMX代码审查

STM32 SPI通信故障深度排查:从硬件信号捕获到CubeMX配置陷阱 引言 当你在深夜调试一块新设计的STM32板卡,SPI外设无论如何都无法正常通信时,那种挫败感足以让任何嵌入式工程师抓狂。SPI作为嵌入式系统中最常用的串行通信协议之一,…...

如何在5分钟内免费拥有专属音乐播放器:开源酷狗客户端完整配置秘籍

如何在5分钟内免费拥有专属音乐播放器:开源酷狗客户端完整配置秘籍 【免费下载链接】MoeKoeMusic 一款开源简洁高颜值的酷狗第三方客户端 An open-source, concise, and aesthetically pleasing third-party client for KuGou that supports Windows / macOS / Linu…...

山东楼顶广告字技术白皮书:从选材到安装的完整实践指南

楼顶广告字的行业地位与价值在户外广告领域,山东楼顶广告字作为城市天际线的重要组成部分,不仅承担着商业宣传的功能,更成为区域经济发展的风向标。这类广告字通常安装在建筑物顶部,具有视野开阔、传播范围广的特点。随着城市建设…...

Excel跨表格查找神器:VLOOKUP+粘贴链接实现数据自动同步(附避坑指南)

Excel跨表格动态同步:VLOOKUP与粘贴链接的进阶组合技 每次手动复制粘贴不同表格的数据,不仅耗时费力,还容易出错。想象一下,当源数据更新时,所有关联表格能自动同步变化,这才是高效办公的真谛。今天要分享的…...

AI Agent行动规划算法:动态环境下的最优决策生成

AI Agent行动规划算法:动态环境下的最优决策生成 1. 引言 在人工智能技术飞速发展的今天,AI Agent(智能体)已经成为了连接理论与实践的关键桥梁。从自动驾驶汽车到智能客服机器人,从游戏AI到工业自动化控制,AI Agent正在以前所未有的方式改变着我们的生活和工作方式。然…...

Axure RP中文界面终极配置指南:3分钟实现专业汉化

Axure RP中文界面终极配置指南:3分钟实现专业汉化 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英…...

别再只盯着SENet了!手把手教你用PyTorch复现SKNet和CBAM(附完整代码)

深度学习注意力机制实战:从SKNet到CBAM的PyTorch实现精要 在计算机视觉领域,注意力机制已经成为提升模型性能的关键技术。不同于传统的卷积神经网络平等对待所有特征通道,注意力机制让模型学会"关注"最重要的信息。本文将带您深入…...

SQL盲注技术全解析:布尔盲注、时间盲注与DNSLog带外注入

前言 在之前的学习中,我们掌握了 SQL 注入的基本原理,包括联合查询注入和报错注入技术。这些攻击方式都有一个共同点:需要页面能够显示查询结果或通过报错信息泄露数据。但在实际环境中,Web 应用通常会采取多种防护措施&#xff…...

SQL注入攻击与防御实战:手把手教你挖漏洞

三、防御方案。1.参数化查询:用Prepared Statements,用户输入当数据处理。PHP用PDO,Java用PreparedStatement。2.输入验证:白名单过滤危险字符单引号、分号等。3.使用ORM框架:Laravel、Hibernate等内置防注入。4.最小权…...

Vue3怎么起步入门?

Vue.js 是一个渐进式 JavaScript 框架,主要用于构建用户界面。 刚开始学习 Vue,我们不推荐使用 vue-cli 命令行工具来创建项目,更简单的方式是直接在页面引入 vue.global.js 文件来测试学习。 Vue3 中的应用是通过使用 createApp 函数来创建…...

从集合到点云:深入浅出图解Deep Sets的置换不变性到底在说什么

从集合到点云:深入浅出图解Deep Sets的置换不变性到底在说什么 想象一下,你面前有一堆散落的乐高积木,无论你怎么打乱它们的顺序,最终拼出来的城堡总是一样的。这就是置换不变性(Permutation Invariance)的…...

终极指南:3步解锁百度网盘SVIP高速下载功能(macOS版)

终极指南:3步解锁百度网盘SVIP高速下载功能(macOS版) 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘…...

【Python基础】零基础入门到实战,这一篇就够了!(附详细代码)

前言 大家好,我是jifeng,今天给大家带来一篇全网最贴心的Python保姆级入门教程。 在这个AI与大数据爆发的时代,“人生苦短,我用Python” 早已不仅仅是一句口号。无论是Web开发、数据分析、人工智能还是日常办公自动化&#xff0…...

SiameseUIE模型在网络安全领域的应用:威胁情报抽取

SiameseUIE模型在网络安全领域的应用:威胁情报抽取 网络安全分析师每天都要面对海量的威胁情报报告、安全日志和漏洞公告。这些文本数据里藏着攻击者的IP地址、恶意域名、攻击手法、漏洞编号等关键信息。传统做法是人工逐篇阅读、标记、整理,不仅效率低…...

终极指南:如何用KMS_VL_ALL_AIO一键永久激活Windows和Office系统

终极指南:如何用KMS_VL_ALL_AIO一键永久激活Windows和Office系统 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗?Office文档…...

SOCD Cleaner:终极键盘优化工具 - 5个关键优势提升游戏操作精度

SOCD Cleaner:终极键盘优化工具 - 5个关键优势提升游戏操作精度 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在竞技游戏的微秒级对决中,你是否曾因同时按下W和S键导致角色卡顿&#x…...

解锁小米EG系列机型的注意事项

springboot自动配置 自动配置了大量组件,配置信息可以在application.properties文件中修改。 当添加了特定的Starter POM后,springboot会根据类路径上的jar包来自动配置bean(比如:springboot发现类路径上的MyBatis相关类&#xff…...

如何在Windows上获得苹果触控板的原生级体验:mac-precision-touchpad完整指南

如何在Windows上获得苹果触控板的原生级体验:mac-precision-touchpad完整指南 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac…...

H5GG:零门槛定制iOS应用,JavaScript引擎开启全新可能

H5GG:零门槛定制iOS应用,JavaScript引擎开启全新可能 【免费下载链接】H5GG an iOS Mod Engine with JavaScript APIs & Html5 UI 项目地址: https://gitcode.com/gh_mirrors/h5/H5GG 在iOS生态系统中,定制化一直是技术爱好者的追…...

YOLO系列算法改进 | C2PSA改进篇 | 融合UPT不确定性先验Transformer模块 | 突破模糊感知瓶颈,动态聚焦困难样本 | CVPR 2026

0. 前言 本文介绍UPT(不确定性先验Transformer模块),并将其集成到ultralytics最新发布的YOLO26目标检测算法中,构建C2PSA_UPT创新模块。UPT是一种基于不确定性感知的注意力机制,源自UCMNet图像复原架构,旨在通过估计特征图的空间不确定性来引导上下文特征的动态检索与聚…...

从VGA到8K:一文读懂HDMI协议进化史与关键版本差异(1.4/2.0/2.1对比)

从VGA到8K:HDMI协议进化史与关键版本差异全解析 2002年12月,当索尼、松下、东芝等七家电子巨头联合发布HDMI 1.0标准时,很少有人能预料到这个接口会在未来二十年彻底改变视听产业的格局。如今,从家庭影院到电竞显示器,…...

Pandas 复制 DataFrame的方法总结

Pandas 复制 DataFrame的方法总结 1.pandas.DataFrame.copy() 方法语法 DataFrame.copy(deepTrue) 它返回 DataFrame 的副本。deep 默认为 True,这意味着在副本中所作的任何更改将不会反映在原始 DataFrame 中。但是,如果我们设置 deepFalse&#xff…...

数据库分库分表方案设计

数据库分库分表方案设计:应对海量数据挑战 随着互联网业务规模不断扩大,传统单库单表的数据库架构逐渐暴露出性能瓶颈。当数据量达到千万甚至亿级时,查询延迟、写入拥堵等问题频发,分库分表成为解决这一难题的核心方案。通过将数…...

3分钟搞定专业照片批量水印:告别繁琐手动操作

3分钟搞定专业照片批量水印:告别繁琐手动操作 【免费下载链接】semi-utils 一个批量添加相机机型和拍摄参数的工具,后续「可能」添加其他功能。 项目地址: https://gitcode.com/gh_mirrors/se/semi-utils 还在为每张照片手动添加水印而烦恼吗&…...

为何要使用虚拟计算机(v0.1.0)

一、术语 【虚拟计算机】 虚拟计算机(Virtual Machine, VM),简称虚拟机,是通过软件模拟出来的、具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统。 你可以把它理解为“电脑里的另一台电脑”。其概念图见图1。[1] …...

从‘浪费生命’到‘轻松驾驭’:我的NRF24L01/SI24L01调试心路与替代方案盘点

从‘浪费生命’到‘轻松驾驭’:NRF24L01/SI24L01调试心路与替代方案盘点 第一次点亮NRF24L01模块时,我天真地以为无线通信的大门就此敞开。直到连续三天的调试中,这个火柴盒大小的模块让我经历了从期待到崩溃的全过程——明明代码和接线都&qu…...

长沙金海中学答题:中天电子实现精准调控

课堂困境与答题需求长沙金海中学在传统教学模式中,面临着诸多答题相关的痛点。每次进行50题的答题测试,教师需要花费30分钟以上的时间进行人工批改,这不仅耗时耗力,还容易出现批改错误。同时,课堂互动参与率不足30%&am…...