在Carrier文件中定义了一系列运营商信息以及关系关联:
/packages/providers/TelephonyProvider/assets/latest_carrier_id/carrier_list.textpb
以Android U为例,如下代码 C Spire 运营商311-230对应1836和10009两个cid
carrier_id {
canonical_id: 1836
carrier_name: "C Spire"
carrier_attribute {
mccmnc_tuple: "311230"
mccmnc_tuple: "310023"
}
carrier_attribute {
mccmnc_tuple: "20404"
spn: "C Spire"
}
}
carrier_id {
canonical_id: 10009
carrier_name: "C Spire-US"
carrier_attribute {
mccmnc_tuple: "311230"
mccmnc_tuple: "310023"
}
parent_canonical_id: 1836
}
carrier_id {
canonical_id: 10010
carrier_name: "C Spire-NL"
carrier_attribute {
mccmnc_tuple: "20404"
spn: "C Spire"
}
parent_canonical_id: 1836
}
version: 117440538
经测试,发现插入311-230 SIM,生成的是cid=10009的配置,即adb获取设备文件时 ,carrierconfig-com.android.carrierconfig-imsi-10009.xml
设备路径:adb pull data/user_de/0/com.android.phone/files
配置文件:carrierconfig-com.android.carrierconfig-89148032547698214367-10009.xml
实际上,10009的内容是1836的配置项。cid=10009的parent_canonical_id是1836。
源码阅读:
http://aospxref.com/android-14.0.0_r2/
packages/providers/TelephonyProvider/assets/latest_carrier_id/carrier_list.textpb
配置举例:根据如下配置,以上10009的文件中都会包含下面的配置项,因为默认和父类的都会继承。
<!--packages/apps/CarrierConfig/res/xml/vendor.xml-->
<carrier_config_list>
<!--默认通用配置-->
<carrier_config>
<string-array name="carrier_metered_apn_types_strings" num="3">
<item value="default" />
<item value="dun" />
<item value="supl" />
</string-array>
<string-array name="carrier_metered_iwlan_apn_types_string_array" num="0">
</carrier_config>
<!-- For MCCMNC: 311-230 / 310-023 / 204-04(spn=C Spire) -->
<carrier_config cid="1836" name="C Spire">
<boolean name="carrier_data_always_enable_bool" value="false"/>
<boolean name="carrier_default_data_roaming_enabled_bool" value="true" />
<!--运营商名称定制,两个都配置才能overriede生效-->
<boolean name="carrier_name_override_bool" value="true"/>
<string name="carrier_name_string">C Spire</string>
</carrier_config>
</carrier_config_list>
debug 时,可以直接push xml配置文件到设备(data/user_de/0/com.android.phone/files),但是有些场景直接替换文件carrierconfig配置是不生效的,主要还是看这个配置是如何工作的,比如在什么阶段执行使用的。