rootなしでフォント変更(Galaxy S)

いまのところ、純正ROMのままGingerbread(2.3.3)でrootを取ることができないのでフォント変更を諦めてたのだけれどこんな記事→[電話] Galaxy SII GT-I9100でフォント切り替え : 8796.jp管理日誌を見かけたのでちょっと挑戦。うまく言ったので記事にしてみました。

問題の記事では簡単にしか紹介していなかったので検索してみるとXDAの記事を発見。うちのメイン環境はUbuntu Linuxなので適当にアレンジしながらやってます。

Galaxy Sでは、[Setting]-[Display]-[Font stype]からフォントを選ぶことができます。FlipFontという名前が付いていて、AndroidMarketからフォントパッケージの購入もできます。でも、日本語フォントは流通していないので既存のFlipFontのパッケージを改造して適当なフォントパッケージをでっち上げます。

必要なもの

ベースにするFlipFontパッケージを取り出す

ベースにするFlipFontパッケージを端末から取り出します。busyboxのインストールもしていないので"cat"を使ってsdcard領域へコピーしてから取り出し。"adb shell"上で、

$ cat /system/app/CoolEUKor.apk > /sdcard/CoolEUKor.apk

とかして、フォントパッケージを取り出してPCに転送しておく。(うちのGalaxy SはUK販売の国際版)

FilpFontパッケージを展開する

Apk Managerを使って端末から取り出したCoolEUKor.apkを展開します。Apk Managerのインストールは省略。
App Managerは一度実行して各種ディレクトリを作らせてから"place-apk-here-for-modding"ディレクトリの中にフォントパッケージをコピーしてから、再度Apk Managerを起動。以下のようなメニューが出ているので、"9 Decompile apk"を選択してパッケージを展開する。フォントファイルは、"./out/assets/fonts/Cooljazz.ttf"

****************************** Apk Manager *******************************
------------------Simple Tasks Such As Image Editing----------------------
  0    Adb pull
  1    Extract apk
  2    Optimize images inside (Only if "Extract Apk" was selected)
  3    Zip apk
  4    Sign apk (Dont do this if its a system apk)
  5    Zipalign apk (Do once apk is created/signed)
  6    Install apk (Dont do this if system apk, do adb push)
  7    Zip / Sign / Install apk (All in one step)
  8    Adb push (Only for system apk)
-----------------Advanced Tasks Such As Code Editing-----------------------
  9    Decompile apk
  10   Compile apk
  11   Sign apk
  12   Install apk
  13   Compile apk / Sign apk / Install apk (All in one step)
---------------------------------------------------------------------------
  14   Batch Optimize Apk (inside place-apk-here-to-batch-optimize only)
  15   Sign an apk        (inside place-apk-here-for-signing folder only)
  16   Batch optimize ogg files (inside place-ogg-here only)
  17   Quit
****************************************************************************

Please make your decision: 

ttfファイルの中身を入れ替え

取り出したCooljazz.ttfと入れ替える日本語ttfフォント(ここではTakaoExGothic.ttfを使用)を適当な作業ディレクトリにコピーしてFontForgeで開いてCooljazz.ttfの中身を入れ替えます。手順としては、

  • "Cooljazz.ttf"をFontForgeで開く
  • FontForgeのメニュー([ファイル]-[開く])から"TakaoExGothic.ttf"も開く
  • [エレメント]-[フォント情報...]で"フォント情報"ダイアログを開いて"一般情報"を選択。"Cooljazz"のパラメータを"TakaoExGothic"パラメータと同じになるように修正
  • "Cooljazz"のグリフを全削除([編集]-[選択]-[すべて選択]で全選択した後、[編集]-[クリア])
  • "TakaoExGothic"のグリフをコピー([編集]-[選択]-[すべて選択]で全選択した後、[編集]-[コピー])した後、"Cooljazz"へペースト([編集]-[貼り付け])
  • 変更した"Cooljazz"をttfフォントとして出力([ファイル]-[フォントを出力])。ファイル名は一応"TakaoExGothic.ttf"にした。

新しいパッケージを作る

展開した"CoolEUKor.apk"パッケージのファイルを改変して新しいパッケージを作ります。

  • "./out/assets/fonts"に入っている元のttfファイル(Cooljazz.ttf)を削除して、新しく作成したttfフォントファイル(TakaoExGothic.ttf)をコピー
  • "./out/assets/xml"に入っているxmlファイルのファイル名をttfファイル名に合わせて名前を変更(TakaoExGothic.xml)。このファイルをテキストエディタで開いて、"displayname"を変更("Cool jazz" → "TakaoExGothic")、ttfフォントのファイル名を変更("Cooljazz.ttf" → "TakaoExGothic.ttf")
  • "./out/res/values/string.xml"を編集("CoolEUKor"→"TakaoExGothic")
  • "./out/smali/com/monotype/android/font/cooljazz"の"cooljazz"ディレクトリを"takaoexgothic"へ変更して、このディレクトリの中に入っているファイルすべての"cooljazz"を"takaoexgothic"に変更
  • "./out/AndroidManifest.xml"の"com.monotype.android.font.cooljazz"を"com.monotype.android.font.takaoexgothic"に変更
  • "./out/apktool.yml"の"CoolEUKor.apk"を"TakaoExGothic.apk"へ変更

それから、App Managerのメニューから"10 Compile apk"、"11 Sign apk"を実行します。"./place-apk-here-for-modding"に"repackaged-signed.apk"という名前のパッケージができます。

フォントのインストール

  • 作成したパッケージを端末にインストール
  • [Setting]-[Display]-[Font stype]を開くと"TakaoExGothic"があるはずなので選択

これでフォントが変わっているはずです。

<おまけ>試してみてダメだったとこ

  • cooljazz.ttfをベースにせずに、オリジナルのTakaoExGothic.ttf使ってパッケージを作成すると、インストール・選択画面まではそれっぽく動作するけれど、フォントが変わらず中華フォントのまま
  • "assets/xml"の中のxmlファイルで"DroidSans.ttf"代替設定をせずに代わりに"DroidSansJapanese.ttf"としてもうまくいかない(国際版には元々このフォントがないから??)