参考) Zenfone2 laser ビルド関連
https://github.com/adazem009
https://github.com/Asus-MSM8916
https://github.com/AospExtended-Devices/device_asus_msm8916-common/
https://github.com/audahadi/android_device_asus_Z00ED
https://github.com/kernel-hut/android_kernel_asus_msm8916/
楽天モバイルのキャリアの特徴
・3GなしのLTEオンリー
・VoLTE対応な端末が必要
・バンドはBAND3
・mcc=440 mnc=11
・VoLTEができない端末向けにRakuten LinkというIP電話アプリが用意されている
ビルドした端末は、Zenfone2Laser/ZE500KL(コード名=Z00ED,Z00xD)
・SIMフリー
・ブートローダアンロック可能
・BAND3対応
・auVoLTE対応に対応したと記載されている
・バッテリが着脱可能
・SOCはmsm8916とスペック低
したがってLTEオンリー、VoLTE対応のROMをビルドすれば動くはず。
(モデムチップがどこまでVoLTEできているかわからないけど)
9,10では既にLTEオンリー/VoLTEのカスタムROMがダウンロードできるが、7.1では動作しているものが見つからないので実装してみた。
Zenfone2Laserの9.0, 10.0 のバイナリは以下からダウンロードできる
https://github.com/Asus-MSM8916/lineage_OTA/releases/
手順1) 設定の優先ネットワークタイプでLTEオンリーを選べるようにする
設定アプリでは通常 LTE, 3G, 2G がリストで出てくるが、これを変更。
設定アプリの優先ネットワークタイプに*#*#4636#*#*で出てくるリストを選べるようにする
ソース)
packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.java
private void updateBodyAdvancedFields(Activity activity, PreferenceScreen prefSet, int phoneSubId, boolean hasActiveSubscriptions) { ... //Get the networkMode from Settings.System and displays it mButtonEnabledNetworks.setValue(Integer.toString(settingsNetworkMode)); mButtonPreferredNetworkMode.setValue(Integer.toString(settingsNetworkMode)); UpdatePreferredNetworkModeSummary(settingsNetworkMode); UpdateEnabledNetworksValueAndSummary(settingsNetworkMode); + + // Display preferred network type based on what modem returns b/18676277 + mPhone.setPreferredNetworkType(settingsNetworkMode, + mHandler.obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE)); /** * Enable/disable depending upon if there are any active subscriptions. * * I've decided to put this enable/disable code at the bottom as the
※この挿入のコードは、8.x~9.xでもそのまま動作するみたい
手順2) apns-conf.xmlの修正
楽天用にvendor/cm/prebuilt/common/etc/apns-conf.xml に以下の2行を挿入する
<apn carrier="rakuten.jp" mcc="440" mnc="11" apn="rakuten.jp" protocol="IPV4V6" roaming_protocol="IPV4V6" type="default,supl" /> <apn carrier="IMS" mcc="440" mnc="11" apn="ims" protocol="IPV4V6" roaming_protocol="IPV4V6" type="ims" />
※8.x以降は、vendor/lineage/prebuilt/common/etc/apns-conf.xml
手順3) overlay/frameworks/base/core/res/res/values/config.xmlにvolteのフラグを追加する
<bool name="config_device_volte_available">true</bool>
手順4) overlay/packages/apps/CarrierConfig/res/xml/vendor.xmlにキャリア分を登録する
※packages/apps/CarrierConfig/assertに直接各種キャリア分を作成しても構わない
<carrier_config_list> <carrier_config> <boolean name="apn_expand_bool" value="true" /> <boolean name="allow_adding_apns_bool" value="true" /> <boolean name="world_phone_bool" value="true" /> <boolean name="show_cdma_choices_bool" value="true" /> <boolean name="show_apn_setting_cdma_bool" value="true" /> .... </carrier_config> <!-- docomo --> <carrier_config mcc="440" mnc="10"> <boolean name="carrier_volte_available_bool" value="true" /> <boolean name="enabledMMS" value="false" /> <boolean name="hide_ims_apn_bool" value="false" /> <boolean name="hide_enhanced_4g_lte_bool" value="false" /> <!-- for 9.0 --> </carrier_config> <!-- rakuten --> <carrier_config mcc="440" mnc="11"> <boolean name="carrier_volte_available_bool" value="true" /> <boolean name="config_carrier_ims_call_deflect" value="true" /> <boolean name="hide_ims_apn_bool" value="false" /> <boolean name="enabledMMS" value="false" /> <boolean name="hide_enhanced_4g_lte_bool" value="false" /> <!-- for 9.0 --> </carrier_config> <!-- softbank --> <carrier_config mcc="440" mnc="20"> <boolean name="carrier_volte_available_bool" value="true" /> <boolean name="hide_enhanced_4g_lte_bool" value="false" /> <!-- for 9.0 --> <boolean name="hide_ims_apn_bool" value="false" /> </carrier_config> <!-- kddi lte/cdma --> <carrier_config mcc="440" mnc="50"> <boolean name="show_cdma_choices_bool" value="true" /> <boolean name="show_apn_setting_cdma_bool" value="true" /> </carrier_config> <!-- kddi volte --> <carrier_config mcc="440" mnc="51"> <boolean name="carrier_volte_available_bool" value="true" /> <boolean name="show_cdma_choices_bool" value="true" /> <boolean name="show_apn_setting_cdma_bool" value="true" /> <boolean name="carrier_wfc_ims_available_bool" value="true" /> <int name="carrier_default_wfc_ims_mode_int" value="2" /> <boolean name="hide_ims_apn_bool" value="false" /> <boolean name="hide_enhanced_4g_lte_bool" value="false" /> <!-- for 9.0 --> </carrier_config> </carrier_config_list>
※ソフトバンク、Docomo, au 分も記述しているが、SIMを持っていないので不明。
備考1)4G LTE拡張モードボタンが出るかどうかの判定(9.0も併記)
判定のリソース
packages/apps/CarrierConfig/assets or device/xxx/overlay/apps/CarrierConfig/xml で記述
<boolean name="editable_enhanced_4g_lte_bool" value="true" />
これはtrueに設定してもアプリ設定で表示されるか否かは、ソース内で判定している
(デフォルトはソース内でtrueに設定されている)
ソース1)
frameworks/base/telephony/java/android/telephony/CarrierConfigManager.java
public static final String KEY_EDITABLE_ENHANCED_4G_LTE_BOOL = "editable_enhanced_4g_lte_bool";
9.0では以下が追加
public static final String KEY_HIDE_ENHANCED_4G_LTE_BOOL = "hide_enhanced_4g_lte_bool";
ソース2)設定でのボタン名称
packages/services/Telephony/res/values-ja/strings.xml
<string name="enhanced_4g_lte_mode_title" msgid="522191650223239171">"4G LTE拡張モード"</string> <string name="enhanced_4g_lte_mode_title_variant" msgid="4871126028907265406">"高度な通話機能"</string>
ソース3)
7.1でのソース
packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.java
// Enable enhanced 4G LTE mode settings depending on whether exists on platform // or in multi-sim cases, depending on whether ImsPhone exists for that subscription if (!(ImsManager.isVolteEnabledByPlatform(this) && ImsManager.isVolteProvisionedOnDevice(this)) || (mPhone.getImsPhone() == null)) { Preference pref = prefSet.findPreference(BUTTON_4G_LTE_KEY); if (pref != null) { prefSet.removePreference(pref); } }
9.0では以下のようになっている
packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.java
try { if ((mImsMgr == null || mImsMgr.getImsServiceState() != ImsFeature.STATE_READY || !mImsMgr.isVolteEnabledByPlatform() || !mImsMgr.isVolteProvisionedOnDevice() || carrierConfig.getBoolean( CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL))) { getPreferenceScreen().removePreference(mButton4glte); } else { mButton4glte.setEnabled(is4gLtePrefEnabled(carrierConfig) && hasActiveSubscriptions()); boolean enh4glteMode = mImsMgr.isEnhanced4gLteModeSettingEnabledByUser() && mImsMgr.isNonTtyOrTtyOnVolteEnabled(); mButton4glte.setChecked(enh4glteMode); } } catch (ImsException ex) {
結果)各判定のログ出力を仕込んで見てみる
$ logcat -b all | grep CHECK ... D NetworkSettings: CHECK:isVolteEnabledByPlatform()==TRUE D NetworkSettings: CHECK:isVolteProvisionedOnDevice()==TRUE D NetworkSettings: CHECK:mPhone.getImsPhone()==NULL
となって、getImsPhone()で失敗している。残念ながらVoLTEは出来なかった。
RakutenLinkアプリで通話やSMSができるようになったからまあ良しとするか。
備考2)RR7.1の日本語が足りない表記の修正
・Connected line identificationが英語のまま
packages/services/Telephony/res/values/cm_strings.xml
<!-- Mobile network settings, COLP --> <string name="connected_line_identification_title">Connected line identification</string> <string name="connected_line_identification_summary">Disable this option if the numbers of the recipients don't show up in the call history</string>
-> LineageOS github から values-ja/cm_strings.xml を参照して持ってくる
備考3)RR7.1の拡張カスタマイズの日本語タイトル名が表示されない、数字が出ている。英語名=Pie control
apps/Settings/res/values-en-rUS/rr_strings.xml
<string name="pa_pie_control_title">Pie control</string>
apps/Settings/res/values-ja/rr_strings.xml に以下を追加
<string name="pa_pie_control_title">Pie設定</string>