Back

面向评估开源 eSIM 工具链的 Android 与 Linux 用户,覆盖全球。

开源 eSIM LPA

关于去 Google 化手机能不能用 eSIM 的每一场争论,说到底都是在争论同一个组件。它叫本地配置文件助手,也就是 LPA。理解了它,一个含糊的问题就变成了一个可以动手验证的问题。

$25
  • LPA 是下载并安装 eSIM 配置文件的那个系统组件
  • AOSP 不带通用 LPA,所以它必须被逐个加进每一个编译版本
  • Android 按权限和清单里声明的优先级选出唯一一个 LPA
  • OpenEUICC 是 Android 上的开源 LPA,特权版本可以管理内置 eSIM
  • 非特权变体只能访问把它的证书列入白名单的可插拔芯片
  • lpac、libeuicc、EasyLPAC、lpa-gtk 和 hermes 覆盖桌面、Linux 移动设备和 ChromeOS
加密货币即时 QR

手机里存放 eSIM 配置文件的那块芯片叫 eUICC,它自己什么也做不了。必须有东西去读取激活码,判断激活码指向哪台开通服务器,对着这台服务器跑一遍 GSMA 协议,再把拿回来的配置文件写进芯片的安全存储区。这个东西就是本地配置文件助手,即 LPA。全部关键都在这里:芯片是标准的,激活码是标准的,服务器是标准的,唯一的变量是有没有一个 LPA,以及它能不能够到那块芯片。

Google 的 Android 文档把 LPA 描述成一个应当包含在 Android 编译镜像里的独立系统应用,并说明设备厂商可以实现自己的 LPA,再把它接到 Android 的 eUICC API 上。把这句话读仔细,整个去 Google 化的 eSIM 局面就都从里面推出来了。AOSP 不会给你一个。必须有人把它放进编译版本。当没有人放的时候,这台手机就有一块能用的 eSIM 硬件,却没有任何办法使用它。

Android 如何决定由哪个 LPA 负责

应用使用的公开接口是 EuiccManager,位于 android.telephony.euicc 包里。在它后面,实现配置文件处理的一方要继承 EuiccService,并在自己的清单文件里声明这个服务。框架随后向包管理器查询:哪些应用持有 WRITE_EMBEDDED_SUBSCRIPTIONS 权限,并且声明了响应 android.service.euicc.EuiccService 的服务,然后选出清单里声明优先级最高的那一个。同一时间只能有一个成为真正工作的 LPA。

这里面捆绑着一条硬性要求。LPA 应用必须是系统应用、包含在系统镜像里,才能调用相关的系统 API。与其说这是 Google 设卡,不如说这是这个组件本身的性质决定的:它要往一个存放运营商凭据的安全元件里写数据。但它确实意味着,缺少 LPA 这件事没法靠下载点什么来解决,而这正是这个领域里最常见的一个误解。

真实存在的开源实现

比多数人以为的要多,而 Osmocom 的 eUICC 与 eSIM 开发者手册维护着最接近权威索引的一份清单。在 Android 这一侧,重要的是 OpenEUICC,作者把它描述为面向 Android 设备的一个完全自由、完全开源的本地配置文件助手实现,提供两个变体。特权变体必须作为系统应用安装,用平台证书签名并放进系统分区,项目也为 ROM 构建者提供了特权应用白名单文件。取得特权之后,它可以管理内置 eSIM、外置 eSIM,以及通过 USB CCID 读卡器接入的芯片。

第二个变体 EasyEUICC 以普通的非特权应用身份运行,它的限制值得弄清楚,因为它经常被传错。它碰不到焊在你手机里的 eUICC。它只能访问那些通过 ARA-M 字段主动向它的签名证书授权的可插拔 eSIM 芯片,也就是说必须由芯片厂商把它列入白名单。离开 Android,还有 lpac,一个 C 语言库加命令行工具,核心是 libeuicc;EasyLPAC 是桌面前端;lpa-gtk 面向 Linux 移动设备;hermes 则是 Chromium OS 使用的 eSIM 守护进程。其中几个是跨平台的。但它们都不改变那条规则:在 Android 上,够到内置芯片需要系统级权限。

哪些编译版本带 LPA,以及怎么判断

点名具体版本正是多数同类文章翻车的地方,因为答案会随发布而变,而且即使在同一个项目里也因机型而异。可以可靠地说的是:在支持 eSIM 的硬件上,厂商原生版本通常包含 LPA,而且往往是厂商或 Google 的闭源实现。跑在同样硬件上的加固 Android 系统常常能让它继续工作,有时藏在一个默认关闭的开关后面。派生自 LineageOS 的社区版本历来是薄弱环节,官方版本上有过添加 eSIM 的控件干脆不存在、或者存在却完全没有反应的报告。一个 ROM 要带上 OpenEUICC,必须是有人主动选择这么做,而这是逐个版本的决定。

所以与其相信一份清单,不如测这台设备。一个能走通、一直走到二维码扫描界面或手动输入激活码输入框的添加 eSIM 流程,就是某个 LPA 已安装并正常工作的直接证据,无论它是哪一个、由谁编写。反过来,这个流程不存在,或者控件点下去毫无反应,同样是方向相反的直接证据。这个测试不花钱,而且比任何页面都新。

这件事在商业上为什么重要,以及我们能承诺什么

任何人卖给你的 eSIM,包括我们的,在这一层都是同一个东西:一段指向开通服务器的 GSMA 激活码。世界上不存在“对更多 LPA 更兼容”的 eSIM,任何声称自己和去 Google 化系统有特殊兼容性的卖家,说的都是规范里根本没有的东西。卖家之间真正的差别,是他们对这条边界诚不诚实。我们这边的说法是:配置文件是我们的,LPA 是你的。

具体来说,我们卖的是一条真实的英国 +44 移动运营商线路,以 eSIM 二维码交付,不是 VoIP,也不是共用号码池,在全球通过漫游无限量接收来电和短信,完全不含移动数据。价格是一次性 25 美元,含前六个月,之后每六个月 15 美元,不会自动续费,因为我们不保存任何支付卡信息。旅行流量是另一款产品,1.99 美元起,覆盖 190+ 个国家和地区,只有数据。付款只收加密货币,共十二种方式,不需要 KYC、不需要账户、不需要邮箱,并配一个 AB12-CDEF 格式的 8 位查询码。英国号码的二维码只能使用一次,永远不会补发,所以下面这套检查不是走过场。另外把上限说清楚:购买时不做 KYC 省掉的是手续,省不掉你的设备 IMEI、你的 IP 地址,也省不掉运营商对一条在用线路的记录。

怎么判断你的编译版本里有什么

  1. 1

    先确认硬件。打开 Settings, Network and internet, SIMs 看 eSIM 那一项,找到属于 eUICC 的 32 位标识 EID;或者拨 *#06#,读 IMEI 旁边的号码。如果你配好了 adb,在带芯片的设备上执行 adb shell pm list features 应当能看到 android.hardware.telephony.euicc。

  2. 2

    找入口。在 Settings, Network and internet, SIMs 里,出现下载 SIM、添加 eSIM 的选项,或者 SIM 条目旁边的加号,就说明这个编译版本暴露了 eSIM 安装入口。

  3. 3

    证明它是活的。点进这个流程,一直走到二维码扫描界面或手动输入激活码的输入框。能到这一步就说明有一个 LPA 已安装并在响应。控件在、点下去却没反应,说明界面存在而后面没有可用的助手,这是一种已知的表现。

  4. 4

    如果你想知道自己用的是哪个 LPA,去已安装的系统应用里找配置文件助手的包。在带开源实现的编译版本上,它会以系统应用而不是你自己装的应用的形式出现;至于它能做什么,项目自己的文档比猜测靠谱得多。

  5. 5

    如果根本没有 LPA,对解决办法要现实一点。特权版的开源助手必须被编译进 ROM、用平台证书签名并列入特权应用白名单,所以这是 ROM 构建者的活,不是用户能装的东西。非特权变体只能够到那些把它的证书列入白名单的可插拔 eSIM 芯片,永远够不到内置的 eUICC。

  6. 6

    只有在这个流程走得通的时候,购买才有意义。我们的英国 +44 号码就是以普通激活码的形式从同一个界面装进去;如果你不确定,请在付款前先问,因为那个二维码只能用一次,而且永远不会补发。

常见问题

eSIM 里的 LPA 是什么?

本地配置文件助手,也就是把一段激活码变成已安装配置文件的那个软件。它解析激活码,连上激活码里指定的开通服务器,跑一遍 GSMA 协议,再把配置文件写进 eUICC 芯片。没有它,芯片再好也无法被访问,而这正是人们在自编译系统上装不了 eSIM 时真正遇到的东西。

Android 上有开源的 LPA 吗?

有。OpenEUICC 自称是面向 Android 设备的一个完全自由、完全开源的本地配置文件助手实现,提供两个变体。特权变体必须作为系统应用安装,用平台证书签名并放进系统分区,之后可以管理内置和外置 eSIM。非特权变体以普通应用身份运行,但无法访问手机内置的 eSIM。

为什么我不能直接从应用商店装一个 LPA?

因为够到 eUICC 需要系统级权限。Android 要求 LPA 必须是包含在系统镜像里的系统应用,才能调用相关 API;而开源的非特权变体按设计只限于那些明确把它的签名证书列入白名单的可插拔芯片。这条限制保护的是一个存放运营商凭据的安全元件,所以不太可能放宽。

Android 之外有开源 LPA 吗?

有好几个。lpac 是一个 C 语言库外加命令行工具,构建在 libeuicc 之上;桌面前端有 EasyLPAC;lpa-gtk 是面向 Linux 移动设备的 GTK 客户端;hermes 是 Chromium OS 使用的 eSIM 守护进程。Osmocom 的 eUICC 与 eSIM 开发者手册维护着一份跨平台的已知实现清单,想了解当前状况,从那里开始最好。

我买的 eSIM 会因为用哪个 LPA 而不同吗?

不会。任何 eSIM 都是一段指向开通服务器的标准 GSMA 激活码,没有哪个卖家能让一个配置文件对某个助手更兼容或更不兼容。如果有卖家声称自己和去 Google 化系统有特殊兼容性,他描述的东西不在规范里。我们能说的是:我们的配置文件以普通激活码发放,不带机型审批名单;而你的编译版本能不能下载它,由你的编译版本决定。

更多主题

开源 eSIM LPA

关于去 Google 化手机能不能用 eSIM 的每一场争论,说到底都是在争论同一个组件。它叫本地配置文件助手,也就是 LPA。理解了它,一个含糊的问题就变成了一个可以动手验证的问题。

购买英国 eSIM - $25