2012年1月4日水曜日

Ice Cream Sandwichのフォント指定とAA対応

ICSからはxmlによるフォントの設定が可能になったので、今回はNexus Sを例にICSにおけるフォントの導入についてまとめる。今回は、MS Pゴシックをmonaya.ttfに置換し、通常の日本語文字にはモトヤフォントを用いることにする。
まずはSDKを導入する。Android SDK revision 16ではいつのまにかfastbootが復活していたので、必要なコンポーネントは最新のAPIのSDK Platform(これにモトヤフォントが含まれる。持っている場合は不要)、Tools->Android SDK Platform-tools(adbやfastboot)、Google USB Driver package(ドライバ)の3つを揃えれば良い。SDKの他に必要な物はClockworkMod Recooveryとmonaya.ttfの2つ(ぐぐって手に入れてください)。
ここから先はドライバの導入とパスの通しが終了していることを前提に記事を書くので、それが済んでいない人は過去記事を参照して頂きたい。
まず、フォントを指定するxmlファイルを取得する。管理者権限不要の任意のディレクトリをカレントディレクトリにし、ClockworkMod Recovery側でsystemをmountしたら、
  • adb pull /system/etc/system_fonts.xml system_fonts.xml
  • adb pull /system/etc/fallback_fonts.xml fallback_fonts.xml
と入力し、フォントを指定するxmlを取得する。
取得したxmlをUTF-8とUNIXフォーマットの改行コードを出力できるテキストエディタ(notepad++等)を用いて編集する。fallback_fonts.xmlでは先に書いたフォントが優先的に使用されるので、MTLc3m.ttfをxmlの文法にそって指定すればよい。system_fonts.xmlでは、MS Pゴシックの置換を行うように指定するので、以下のような記述をxmlの文法に沿って記述してやればよい。


    <family>
        <nameset>
            <name>MS Pゴシック</name>
            <name>MS PGothic</name>
        </nameset>
        <fileset>
            <file>monaya.ttf</file>
        </fileset>
    </family>
こうすることでMS Pゴシックをmonaya.ttfで置き換えて表示することができる。今のところ、Android上ではAA対応フォントも微妙にずれてしまうので、monaya.ttfが最もずれないで表示することができるフォントのようだ。
xmlの編集ができたら、フォントは/system/fonts/に、xmlは/system/etc/に送ってやる。

  • adb shell
  • cd system/etc
  • mv fallback_fonts.xml fallback_fonts.xml.old
  • mv system_fonts.xml system_fonts.xml.old
  • exit
  • adb push fallback_fonts.xml /system/etc
  • adb push system_fonts.xml /system/etc
  • adb push monaya.ttf /system/fonts
  • adb push MTLc3m.ttf /system/fonts
  • adb shell
  • cd system/etc
  • chmod 644 fallback_fonts.xml
  • chmod 644 system_fonts.xml
  • cd ../fonts
  • chmod 644 monaya.ttf
  • chmod 644 MTLc3m.ttf
  • exit
これでMS Pゴシックはmonaya.ttfに、その他の日本語+αはモトヤフォントに変更される。あやまって文鎮化させたり不具合が起きても自己責任で。最後になるが、AA対応フォントがその文字に対応していても、うまく表示できない文字が存在するようだ(※)。謎である。

2011/01/04追記
※FirefoxやOperaでは正常に表示されるため、Android内蔵ブラウザのレンダラーが抱える問題のようです。Operaでは文字幅こそ正常なものの、一部のフォントが別のフォントで置き換わっている(ように見える。少なくともFirefoxとは異なるレンダリング結果)症状や、勝手にメールアドレスとして解釈してしまうようです。一方Firefoxはそのようなことはないものの現行版では全画面表示が行えません(ステータスバーを非表示にできません)。一長一短ですね。
デフォルトブラウザ
Firefox
Opera
正しい表示(Google Chrome 16 Windows版)
デフォルトブラウザ
Firefox
Opera
正しい表示(Google Chrome 16 Windows版)
上記画像は誠に勝手ながら◆20L.ujnjAg氏の作品「【fallout】 人工物は善なる存在になりたいようです」を使わせていただいています。多謝。