FM radio on non-SBM ROMs

ご存知の通り、Froyoになってから海外版DesireのROMのFMラジオがヨーロッパのみのバンドになってしまって、日本ではFMラジオが聴けません… X06HTのHtcFMRadio.apkをコピーすれば聞けると言う話もありますが、海外版Desireでは動きませんでした。

※追記2010/12/16 最近のHtcFMRadio.apkには周波数帯を切り替えるリソースが入っていないので、この手法は使えません。日本の周波数帯に変更するかどうかは、単純に/data/data/com.htc.fmの下にbandというファイルがあり、その中に「1」と入っているかどうかなので、HtcFMRadio.apkを作り直さなくても、init.dでこのファイルを作るようなシェルスクリプトを追加してあげればいいだけです。

例)
if [ -f /data/data/com.htc.fm/band ];
then echo “The band file exists”;
else echo -n 1 > /data/data/com.htc.fm/band;
fi;

そこでネットで調べてみると、HtcFMRadio.apkとHtcFMRadio.odexを書き換えれば日本でもFMラジオが聴けることが分かりました。以下はその手順です。

【必要なもの】
オリジナルのHtcFMRadio.apkとHtcFMRadio.odex
オリジナルのsystem\frameworkの中身
Java環境
zip/unzip
baksmali-1.2.4.jar
smali-1.2.4.jar
signapk.jar
unzip

1) 逆アセンブル
java -jar ..\baksmali-1.2.4.jar -d .\system\framework -x HtcFMRadio.odex -o out

2) ファイルの書き換え
上でできたoutフォルダの中に、out/com/htc/fm/FMController.smaliがあります。エディタで開き以下のように変更します。(メニューで周波数帯を選択できるようにする修正)

if-ne v0, v1, :cond_** → if-ne p1, v1, :cond_**

(※**は番号。ビルドによって変わる)

次にout/com/htc/fm/FMRadio.smaliを開き、二か所修正します。(デフォルトの周波数帯を日本に変更する修正)
(I)
.method public onCreate(Landroid/os/Bundle;)V
.registers 7
.parameter “savedInstanceState”

.prologue
const/4 v3, 0x0

const-string v4, “FMRadio_FMRadio”

の箇所を

.method public onCreate(Landroid/os/Bundle;)V
.registers 8
.parameter “savedInstanceState”

.prologue
const/4 v3, 0x0
const/4 v5, 0x1
const-string v4, “FMRadio_FMRadio”

(II)
iput-boolean v3, p0, Lcom/htc/fm/FMRadio;->mIsShowBandSwitch:Z

の箇所を

iput-boolean v5, p0, Lcom/htc/fm/FMRadio;->mIsShowBandSwitch:Z

に書き換えます。

3) 再アセンブル
java -jar ..\smali-1.2.4.jar out -o classes.dex

4) apkを展開
unzip HtcFMRadio.apk -d HtcFMRadio

5) 上でできたHtcFMRadioフォルダに4)でできたclasses.dexをコピー
copy classes.dex HtcFMRadio\

6) apkの作成。HtcFMRadioフォルダに移動して、
zip -r temp.apk META_INF res AndroidManifest.xml classes.dex resources.arsc

7) できたtemp.apkをサインして、HtcFMRadio.apkを作成。この際、signapk.jarを使いました。
java -jar signapk.jar testkey.x509.pem testkey.pk8 temp.apk HtcFMRadio_new.apk

このHtcFMRadio_new.apkをリネームして、オリジナルのHtcFMRadio.apkと入れ替えれば、メニューボタンで欧州←→日本のバンドが切り替えられるようになります。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: