著作権的に日本語化して配布するわけにはいかないので考え方を。
※誰かが変更して配布しているバイナリをほいほい入れるのは法的な問題以外にもバージョンの不一致などの問題もあるので個人的にはやめといたほうが賢明だと思います。特にframework-res.apkなんてリソース足りないだけで起動しなくなるかもよ!
(2010/09/01追記:apktoolの使い方をちょっとまとめました そのいち そのに)
今回は「FMラジオ(/system/app/Radio.apk)」を例にしてみようと思います。ついでに日本周波数への対応もしましょう。
前提として、rootを取得するとかandroid sdkとかapktoolとか適当なアーカイバ(今回は7-zipを使用)が必要です。パスとかは各自で適当に読み替えてください。
apktool は事前に framework ファイルをインストールする必要があるかもしれません。adb pull /system/framework/framework-res.apk したファイルを apktool if framework-res.apk みたいな感じ。詳細はこちらで確認してください。
手順としては
- adb pull /system/app/Radio.apk でファイルを取得
- apktool d Radio.apk でapkを Radio フォルダに解体
- 解体先のフォルダに res/values-jp フォルダを作成
- res/values/strings.xml を res/values-jp にコピーして英語を日本語に翻訳。文字コードをUTF8にするのを忘れずにして保存
- apktool b Radio で Radio フォルダをapkに戻す(けど署名の関係でapkは使わない)
- 元の Radio.apk に Radio/build/apk/resources.arsc を無圧縮で追加します(7z.exe u –tzip -mx=0 Radio.apk \Radio\build\apk\resources.arsc みたいな感じ)
- adb push Radio.apk /sdcard/ で編集した Radio.apk をmini proのSDカードにコピー
- adb shell で su して # にする
- mount –o remount,rw /dev/block/mtdblock0 /system で書き込み可能にする
- mv /system/app/Radio.apk /system/app/Radio.apk.bak でバックアップを取る
- cp /sdcard/Radio.apk /system/app/Radio.apk でコピーして chmod 644 /system/app/Radio.apk で権限を元に合わせる
- アプリケーションを起動したら無事日本語化してるよ!
今回 values.xml はこんな感じにしました。
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="fmradio_strings_application_name_txt">FMラジオ</string>
<string name="fmradio_strings_connect_phf_toast_txt">ヘッドホンを接続してください(ラジオのアンテナとして使用します)。</string>
<string name="fmradio_strings_nav_favorites_toast_txt">お気に入りを追加してください。</string>
<string name="fmradio_strings_play_in_loadspeaker_txt">スピーカー再生</string>
<string name="fmradio_strings_play_in_phf_txt">ハンズフリー再生</string>
<string name="fmradio_strings_search_channels_txt">チャンネルサーチ中・・・</string>
<string name="fmradio_strings_unable_to_start_radio_txt">FMラジオを開始できません。再起動してください。</string>
<string name="fmradio_strings_close_txt">閉じる</string>
<string name="fmradio_strings_flightmode_on_txt">フライトモードでFMラジオは使用できません。</string>
<string name="fmradio_strings_permission_label_txt">Required to send pause intent to FM Radio.</string>
</resources>
日本語化は以上。だがしかし、せっかく日本語化してもこのFMラジオは標準では周波数が日本バンドに対応していないので使えません。
こっちはもっと簡単(2010/09/01追記:さらに簡単なリスクの少ない方法がありました)。
理屈としては先程解体した Radio フォルダの中に smali というフォルダがあります。これは実行ファイルを中間ファイルに逆コンパイルしたモノだそうですが、ここのファイルを適当に Japan で検索したら「BAND_JAPANESE_MAXFREQ」とか「CUST_BAND_JAPANESE」とか日本対応してる雰囲気!!デフォルトの設定ファイルが Radio/res/default_settings.xml にあるので、それを開くと
<setting key="frequency-band" runtime="false">Standard</setting>
とあるので、Standard を Japanese に書き換えるだけ。
ということで、元々アプリケーションは日本バンドに対応していたので、 Radio.apk を 7-zip 等のアーカイバで開いて res/xml/default_settings.xml をドラッグアンドドロップで解凍して編集後またドラッグアンドドロップで圧縮して終了。mini proへの書き戻しの手順はSDカードにpushしてremountして云々と日本語化でやったのといっしょです。
あとがき。
日本語化はresources.arsc を無圧縮で元の apk に戻すというのが今回のポイントかな?framework-res.apk を弄った時にそれやっても証明書が違う云々で通らなかった気がするんだけど、普通のアプリケーションはそこまでチェックしてないのかな?
折を見て framework-res.apk をもう一度チャレンジしてみようかな。失敗したらUpdateServiceで全リカバリから再スタートなのが激しく面倒だけどw
コメント
[…] 基本はさっきのと同じ。ポイントは編集した resources.arsc を無圧縮で元のapkに戻すことでした。頑張れば全てのアプリに日本語ロケールを追加することができる気もしますがそこまで頑張らないよ! […]
初めまして。色々と参考にさせてもらってます。
今回、日本語化にチャレンジしてるのですが6以降でスタックしてます(汗
もし宜しければご教授頂けると助かります。