Tuesday, April 3, 2012

Adding support for more characters in Android

Just a short summary of http://www.mydigitallife.info/how-to-install-and-add-hebrew-arabic-and-unsupported-language-fonts-to-android-phone/.

For ICS the coverage is better, IIRC, so this issue is hopefully getting less topical with time. But if you run Android 2.3 (Gingerbread) on your phone, then you might find this useful.

If you happen to want to display characters that are not covered by the default android font, there seems to be an easy way around. That is - if it's only the font coverage that's the issue. I have no idea to what extent does Android support more complex writing systems, like Devanagari.

The trick works by replacing /system/fonts/DroidSansFallback.ttf by some other font. It seems that DejaVu Sans is be favoured. If you're on Debian or Ubuntu you probably have it installed already (package ttf-dejavu) in /usr/share/fonts/truetype/ttf-dejavu/ (use DejaVuSans.ttf). If not you can always grab it from the project's sourceforge page.

Oh, and you need root. <rant>But why wouldn't the user have root acces to his/her device, right? After all they bought it and own it. At least they might think so...</rant>

So, a bit condensed and cleaned up instructions (for adb):
  1. remount /system read-write: adb shell mount /system -o remount,rw
  2. copy the font file to /system/fonts on the target: adb push $PATH_TO/DejaVuSans.ttf /system/fonts (obviously, replace $PATH_TO with wherever your DejavuSans.ttf is on your PC)
  3. backup original DroidSansFallback.ttf: adb shell mv /system/fonts/DroidSansFallback.ttf /system/fonts/DroidSansFallback.ttf.original
  4. symlink your new font to DroidSansFallback.ttf: adb shell ln -s DejaVuSans.ttf /system/fonts/DroidSansFallback.ttf
  5. restart you phone

Note to self: if the Droid font as supplied on the ICS has wider -- and sufficient for whatever one wants to display -- coverage, it might be better to just use that