
android 应用无法直接通过普通 sdk api 安装 esim;必须依赖系统级组件 local profile assistant(lpa),且需预置或集成 aosp 源码构建的 lpa 服务,普通第三方应用无权限调用核心 euicc 管理接口。
android 应用无法直接通过普通 sdk api 安装 esim;必须依赖系统级组件 local profile assistant(lpa),且需预置或集成 aosp 源码构建的 lpa 服务,普通第三方应用无权限调用核心 euicc 管理接口。
在 Android 平台上实现 eSIM 的编程化安装,本质并非一个“应用层调用即可完成”的功能,而是一项深度依赖系统架构与硬件权限的底层能力。自 Android 9(Pie)起,Google 引入了 eUICC(嵌入式通用集成电路卡)支持框架,其核心控制逻辑由系统服务 EuiccManager 提供,但该 API 仅对签名认证的系统应用(如预装 LPA)开放,普通第三方 App 即使声明 android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS 权限,也无法获得实际调用资格。
✅ 正确路径:构建并集成系统级 LPA 应用
Local Profile Assistant(LPA)是 Android 官方定义的 eSIM 管理前端,负责与底层 EuiccService 交互,执行下载、启用、删除配置文件等操作。要实现“编程化安装”,你必须:
获取并定制开源 LPA 实现
推荐参考 openEUICC —— 一个遵循 Android eSIM 规范、可编译进 AOSP 的成熟 LPA 开源项目。它封装了EuiccManager调用、QR 码解析、SM-DP+ 认证流程等关键逻辑。-
基于 AOSP 构建完整系统镜像
应用内触发安装(仅限 LPA 自身或同签名系统 App)
一旦 LPA 成功部署为系统应用,可通过标准 Intent 启动安装流程(例如扫描 SM-DP+ 提供的 QR 码):
// 示例:从 QR 码字符串启动 eSIM 下载(需在 LPA 应用内执行) String qrCodeContent = "LPA:1234567890ABCDEF..."; // 符合 GSMA SGP.22 格式 Intent intent = new Intent(EuiccManager.ACTION_DOWNLOAD_SUBSCRIPTION); intent.putExtra(EuiccManager.EXTRA_QR_CODE, qrCodeContent); startActivity(intent);
⚠️ 注意事项:
-
EuiccManager所有方法(如downloadSubscription()、deleteSubscription())均要求调用者具备android.uid.system或与EuiccService同签名; - 设备 Bootloader 必须已解锁,且基带固件(Modem Image)明确支持 eUICC 功能;
- 商用场景中,eSIM 配置文件(ES2+)需经运营商 SM-DP+ 服务器授权下发,不可自行生成;
- Android 12+ 新增
EuiccManager#isSwitchToSubscriptionsSupported()等校验接口,建议运行时判断兼容性。
简言之,所谓“在应用中安装 eSIM”,实则是构建一个拥有系统特权的 LPA 容器,并在其内部调用受控 API。脱离 AOSP 编译与系统签名,任何 APK 独立方案均不符合 Android 安全模型,也无法通过 Google Play 审核。如面向终端用户交付,应引导其使用厂商预装 LPA(如 Google Fi、Samsung eSIM Manager),而非尝试绕过系统限制。



















