告别实体卡!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%。特别是在验证国际漫游场景时通过脚本快速切换十几种运营商配置大幅缩短了测试周期。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2537573.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!