开发平台基本信息
- 芯片型号:MT8766
- 操作系统版本:Android 12
- Kernel版本:msm-4.19
问题描述
客户要求设备支持ESIM功能。初期在高通6125平台上预研ESIM功能时,集成流程较为简单,仅需内置ESIM厂商的APK并开启相应feature及权限即可。然而,由于原ESIM供应商Links field报价过高,我们转而选择了鹏越与紫光两家新供应商。鹏越提供了ESIM芯片,并要求我们按照谷歌标准流程操作,而紫光则提供了包含权限与feature配置的APK。最终,我们决定遵循谷歌LPA(Licensed Profile Assistant)标准流程来实现ESIM功能。
实现流程
1. 准备工作
- 获取LPA资料:从GMS实验室获取包含三份文档及一个APK的资料包,内容涵盖如何集成LPA、实现overlay app以及在开机向导和系统设置中增加ESIM选项。
- 硬件准备:确保设备已安装ESIM芯片(贴片式或拔插式),并能够正常读取到EID(ESIM芯片的唯一标识)。
2. 启用euicc的feature
在设备配置文件中启用euicc的feature,通常只需将相关feature文件拷贝到设备指定目录。
1 | # 示例:将euicc feature文件拷贝到系统权限目录 |
3. 内置谷歌LPA服务
将谷歌提供的LPA服务APK内置到系统的system/priv-app/目录下,并赋予其必要的权限。
1 | # 示例:将EuiccGoogle.apk内置到系统 |
4. 配置权限
为LPA服务增加priv-app权限或关闭权限校验。本文选择关闭权限校验以简化流程。
1 | // 示例:修改PermissionManagerService.java以关闭权限校验 |
5. 增加Overlay App
编写自定义的Overlay App,实现广播接收器以响应谷歌LPA服务的请求,并在res/values/strings.xml中配置SIM卡槽映射关系。
注册广播接收器:
1
2
3
4
5
6
7
8
9<receiver
android:name=".PartnerReceiver"
android:permission="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"
android:directBootAware="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.euicc.action.PARTNER_CUSTOMIZATION" />
</intent-filter>
</receiver>实现广播接收器:
1
2
3
4
5
6
7
8
9
10
11
12package com.tp.euicc.overlay;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class PartnerReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
// 广播接收方法必须为空,实际逻辑通过资源文件配置
}
}配置SIM卡槽映射:
1
2<string name="sim_slot_mappings_json" translatable="false">{"sim-slot-mappings":[{"devices":["custom_go"],"esim-slot-ids":[0],"psim-slot-ids":[1]}]}</string>
<integer name="download_type">3</integer>
6. 调起LPA服务下载ESIM卡号
在系统设置中,通过特定路径调起LPA服务以下载并启用ESIM卡号。也可通过ADB命令调起。
1 | adb shell am start -n "com.google.android.euicc/com.android.euicc.ui.settings.CurrentProfileListActivity" |
常见问题及解决方案
1. 下载完ESIM卡号后无法启用
问题描述:在MTK8766平台上,下载完ESIM卡号后无法直接启用,需开关飞行模式后方可点击启用按钮。
解决方案:修改系统设置相关代码,强制设置屏幕状态为可用。
1 | // 示例:修改MobileNetworkSettings.java以强制启用ESIM |
2. MTK8766平台ESIM启用按钮不可点击且显示白卡
问题描述:在MTK8766平台上,不仅ESIM启用按钮不可点击,还错误显示了白卡信息。
解决方案:修改移动网络列表控制器相关代码,确保正确处理ESIM卡状态。
1 | // 示例:修改MobileNetworkListController.java以正确处理ESIM卡状态 |
3. 下载完ESIM卡号后无法上网
问题描述:MTK8766平台下载完ESIM卡号后,虽有信号且能ping通网络,但浏览器无法上网。
解决方案:检查并修正APN配置,移除无效的代理和MMSC设置。
1 | <!-- 示例:修正APN配置 --> |
通过以上步骤和解决方案,开发者可以在MT8766芯片平台上成功实现Android 12系统的ESIM功能,并解决可能遇到的常见问题。
本文链接:
http://longzhiye.top/2025/09/27/2025-09-27/