January 10, 2017

Xiaomi Mi Max (Hydrogen) の MIUI8 FM Radio (stock) 日本バンド対応

前回の記事でXiaomi Redmi Note 3 ProのFM Radio日本バンド対応について書きましたが、別機種、別ディストリビューションでの対応も同じ感じでできましたので、記事にしてみようと思います。今回対象としたのはXiaomi Mi MaxのMIUI8のFM Radioです。

Screenshot_2017-01-10-20-29-32-612_com.miui.fm.png
79.5MHzを受信!

前回同様、ターゲットをもう少し詳細に書くと、Xiaomi Mi MaxのうちROMが32GBのもので、Hydrogenというコードで呼ばれている機種になります。またAndroidはXiaomi純正のMIUI8で本記事を書いている時点で最新のGlobal Development版である6.12.22になります。

日本バンドへの対応方法ですが、大きく2つの作業となりました。以下順に書いていきます。なお決まりこどで書いておきますが、同じことをする場合は自己責任でお願いします。書いてあることが意味不明の場合も自己解決でお願いします。

ひとつ目は(クローズドソースなので大きな声では言えないのですが)Androidアプリ(apk)の改造です。
/system/app/FM以下がFMラジオのアプリなので、それをとってきます。oat/arm64/FM.odexをbaksmaliでdeodex(『DeodexInstructions』がとても参考になりました)して、FMラジオの受信最低周波数を規定している部分(com/miui/fmservice/FmServiceUtils.smali)を編集(このとき『Dalvick opcodes』を参考にしました)、smaliで全体をclasses.dexにコンパイルし、それを元apkに7zaで組み込んで(『deodex化とodex化 』を参考にしました)、改変apkを完成させます。
あとはTWRPの作業で、/system/app/FM/oat/arm64/FM.odexが邪魔になるので消去、/system/app/FM/FM.apkを改変apkに置換(このとき/system/app/FMをrestoreconしないとSELinuxに後でおこられましたのでしておくべきです)すれば完成です。Dalvik/ART CacheもWipeしたほうがよいかもしれません。
せっかくなので改変apkをおいておきます。また余談としてですが、改造している際に、マレーシア(region:MY)とブラジル(region:BR)、そしてその他の地域でそれぞれ最低周波数が、87.5(0x36b)や87.8(0x36e)、87.0(0x366)に標準設定されているのが興味深かったです。これを踏襲したこったやり方として、regionがJP(日本)のときだけ76MHzにするという対応もできますが、面倒だったのでその他の地域を76MHzに書き換えました。

もう1つは前回のRedmi Note 3 Pro (Kenzo)と同様の処置で、FMラジオを担当している石の設定ファイルの追加です。詳細は前回の記事に譲りますが、/etc/fm/fm_srch_af_th.confを足します。

こんな感じで76MHzから108MHzまでFM局をシークしてくれるようになりました。快適です。他のSanpdragon機種でも同じような感じで日本のバンドに対応できるのではないかと思います。

20:41 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | コメント (1) | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/941