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

UICC 架构与卡状态机详细设计

description: “SIM卡/UICC模块的核心架构设计,剖析从底层 HAL 状态上报到 Framework 层的对象树建立、卡状态流转、eSIM MEP 支持以及 Google 的核心设计技巧。”本篇文档聚焦于SIM卡/UICC模块(Universal Integrated Circuit Card)。主要讲解当用户将一张 SIM 卡插入手机后,Android Telephony 框架是如何感知、建立卡状态树,并管理这张卡的生命周期的。设计理念: Google 在 UICC 模块的设计中体现了多项经典软件工程实践:全局单例控制、分层对象树建模、观察者模式事件分发、双缓存(内存+SharedPrefs)快速卡识别、以及完善的关机保护机制。1. 核心职责UICC 模块是 Telephony 运行的基石,它的核心职责包括:状态监听:接收底层 HAL (Radio) 的SIM_STATUS_CHANGED等事件,并解析为 Framework 可读的状态。卡对象树维护:在内存中构建和维护一套反映物理卡片层次结构的对象树(UiccSlot-UiccCard-UiccProfile-UiccCardApplication)。安全与认证:处理 PIN/PUK 码校验,读取卡上的文件系统(EF,Elementary File)获取 IMSI、ICCID 等核心参数。eSIM/MEP 支持:支持 eUICC(嵌入式 SIM)及 MEP(Multiple Enabled Profiles)特性,实现单卡多 Profile 的管理。2. 核心类与源码锚点 (Source Code Anchors)当前工作区内的核心类均位于frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/目录下:[UiccController.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccController.java):UICC 模块的"总司令",全局单例。负责监听所有 RIL 实例的卡状态变化事件。[UiccSlot.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccSlot.java):代表手机上的物理卡槽或 eUICC(eSIM)卡槽。[UiccCard.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccCard.java):代表插在卡槽里的物理卡片。如果卡槽为空,则该对象为 null。[UiccProfile.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccProfile.java):代表卡片上激活的配置文件。对于传统的实体 SIM 卡,一张卡对应一个 Profile;对于 eSIM,一张卡可以包含多个 Profile,但同一时刻只有一个被激活。[UiccCardApplication.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java):代表 Profile 中的具体应用(如 USIM 应用负责 3G/4G 网络认证,CSIM 应用负责 CDMA 网络认证,ISIM 负责 IMS 认证)。[IccCardStatus.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/IccCardStatus.java):从底层 HAL 上报的卡状态原始数据结构模型。[EuiccCard.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/euicc/EuiccCard.java):继承自UiccCard的 eSIM 卡片实现,支持 Profile 下载、切换等 eUICC 特有操作。[PinStorage.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/PinStorage.java):PIN 码安全存储模块,负责 PIN/PUK 码的加密持久化存储。3. UICC 对象树模型 (Object Hierarchy)Android 框架通过严格的层级关系在内存中模拟了真实的物理卡片结构。"1 对 多""1 对 1""1 对 多 (MEP)""1 对 多""eSIM 扩展"«Singleton»UiccController-UiccSlot[] mUiccSlots-int[] mPhoneIdToSlotId-CommandsInterface[] mCis-ArrayListString mCardStrings-int[] mSimCardState-int[] mSimApplicationState-int mDefaultEuiccCardId+getUiccSlot(int phoneId)+getUiccProfile(int phoneId)+getUiccCardForPhone(int phoneId)UiccSlot-UiccCard mUiccCard-boolean mActive-boolean mIsEuicc-int[] mPortToActiveAppIndexUiccCard-UiccProfile[] mUiccProfiles-int mCardId
http://www.rkmt.cn/news/1383913.html

相关文章:

  • NsEmuTools:5分钟搭建NS模拟器环境的终极免费工具
  • LongLLMLingua 核心原理:对比困惑度实现提示词压缩
  • 对比按量计费与Token Plan,我的月度成本管理心得
  • Java语法进阶篇
  • 开源权重、商业闭源、衍生模型——DeepSeek知识产权边界全解析,一文厘清5类侵权陷阱
  • Python 3、VS Code、PyCharm 安装常见问题及解决方案大全(Windows/Mac/Linux)
  • 如何突破百度网盘下载限制:Python解析工具完整指南
  • 如何在3分钟内为任何活动搭建专业级滚动抽奖系统?Magpie-LuckyDraw全平台开源方案深度解析
  • 全球文字的数字桥梁:Noto字体项目的技术解析与实践指南
  • 5分钟搭建Windows虚拟显示器:游戏串流与远程工作的终极方案
  • ARM SME2 FMAX指令:浮点向量运算优化指南
  • LaTeX公式一键转Word:3步告别数学公式编辑烦恼
  • 打造XBEE封装BLE112蓝牙模块:硬件设计、射频布局与调试全攻略
  • 2026年北京朝阳搬家公司多维度精选推荐四家正规公司 - 余小铁
  • 1688运营培训/询盘成本从500元降到63.9!1688运营培训还原1688真实玩法
  • 告别Postman!用APIfox搞定接口测试+自动化,这份保姆级教程带你从环境配置到报告生成
  • 【安全加固】Claude Code v2.1.149 发布:堵截 PowerShell 越权路径漏洞,账单明细精准透视
  • 【Linux:文件】Linux 动静态库详解:动态链接与动态库加载深度解析
  • 大模型应用开发入门指南:从基础到实践
  • 十年以上经验的建站公司推荐|策划强、落地稳的网站制作公司盘点
  • 番禺区搬家公司电话 高效快速搬家服务全攻略 - 从来都是英雄出少年
  • 终极指南:5步快速定位Windows热键冲突元凶
  • 私有化视频会议解决方案/智能会议管理系统EasyDSS筑牢企业远程培训核心技术底座
  • 告别DLL缺失烦恼!Visual C++运行库合集一键搞定Windows应用依赖问题
  • Transformer大揭秘:ChatGPT背后的秘密,普通人也能看懂!
  • 179个核心职位,50个公司分类,中国大模型产业全栈
  • 解决方法:庐山派K230接串口没识别到端口问题
  • 长期使用Taotoken聚合接口对项目运维复杂度的实际影响观察
  • DMA Buffer Cache同步的批处理优化及高通平台的实践
  • [Dify实战] 从 Docker Compose 起步,怎么先搭出一个可验证的 Dify 本地环境?