Kindle fireを日本語仕様に変更する(4)

日本語仕様にするには、以下の3点をクリアする必要がある。

  • まともな日本語フォントの導入
  • 日本語ロケールの有効化
  • 日本語入力の追加

まともな日本語フォントの導入

日本語フォントは、Androidソースコードにも取り込まれているモトヤフォントに入れ替える。
たとえば、ここからRAWボタンでダウンロードする。
https://github.com/android/platform_frameworks_base/blob/master/data/fonts/MTLc3m.ttf


フォントファイルは、/system/fonts/に置く必要がある。systemは通常ROM領域になっているので、フォントをインストールするには、ROM領域を書き込み可能にしてやる必要がある。
そのため、まずsystemの実体がどこであるか探す必要がある。

# df
Filesystem             Size   Used   Free   Blksize
/dev                   223M    32K   223M   4096
/mnt/asec              223M     0K   223M   4096
/mnt/obb               223M     0K   223M   4096
/system                503M   278M   225M   4096
/data                    1G   132M   986M   4096
/cache                 251M     4M   247M   4096
/dropbox                 4M     1M     3M   1024
/mnt/sdcard              4G   648K     4G   2048
/mnt/secure/asec         4G   648K     4G   2048

結構細かく分かれている。

# ls /dev/block/mmc*
/dev/block/mmcblk0
/dev/block/mmcblk0p1
/dev/block/mmcblk0p10
/dev/block/mmcblk0p11
/dev/block/mmcblk0p12
/dev/block/mmcblk0p2
/dev/block/mmcblk0p3
/dev/block/mmcblk0p4
/dev/block/mmcblk0p5
/dev/block/mmcblk0p6
/dev/block/mmcblk0p7
/dev/block/mmcblk0p8
/dev/block/mmcblk0p9
# cat /proc/mounts
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/sys/kernel/debug /sys/kernel/debug debugfs rw,relatime 0 0
/dev/block/platform/mmci-omap-hs.1/by-name/system /system ext4 ro,relatime,barrier=1,data=ordered 0 0
/dev/block/platform/mmci-omap-hs.1/by-name/userdata /data ext4 rw,nosuid,nodev,noatime,errors=continue,barrier=1,data=ordered 0 0
/dev/block/platform/mmci-omap-hs.1/by-name/cache /cache ext4 rw,nosuid,nodev,noatime,errors=continue,barrier=1,data=ordered 0 0
/dev/block/platform/mmci-omap-hs.1/by-name/splash /dropbox ext4 rw,nosuid,nodev,noatime,errors=continue,barrier=1,data=ordered 0 0
/dev/block/vold/179:12 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/179:12 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
# ls -l /dev/block/platform/mmci-omap-hs.1/by-name
lrwxrwxrwx root     root              2012-05-25 04:40 media -> /dev/block/mmcblk0p12
lrwxrwxrwx root     root              2012-05-25 04:40 cache -> /dev/block/mmcblk0p11
lrwxrwxrwx root     root              2012-05-25 04:40 userdata -> /dev/block/mmcblk0p10
lrwxrwxrwx root     root              2012-05-25 04:40 system -> /dev/block/mmcblk0p9
lrwxrwxrwx root     root              2012-05-25 04:40 splash -> /dev/block/mmcblk0p8
lrwxrwxrwx root     root              2012-05-25 04:40 boot -> /dev/block/mmcblk0p7
lrwxrwxrwx root     root              2012-05-25 04:40 backup -> /dev/block/mmcblk0p6
lrwxrwxrwx root     root              2012-05-25 04:40 recovery -> /dev/block/mmcblk0p5
lrwxrwxrwx root     root              2012-05-25 04:40 dfs -> /dev/block/mmcblk0p4
lrwxrwxrwx root     root              2012-05-25 04:40 dkernel -> /dev/block/mmcblk0p3
lrwxrwxrwx root     root              2012-05-25 04:40 bootloader -> /dev/block/mmcblk0p2
lrwxrwxrwx root     root              2012-05-25 04:40 xloader -> /dev/block/mmcblk0p1

systemがmmcblk0p9にあることがわかった。
書き込み可能にして再マウントする。

# mount -o rw,remount -t ext4 /dev/block/platform/mmci-omap-hs.1/by-name/system /system
# cat /proc/mounts
(snip)
/dev/block/platform/mmci-omap-hs.1/by-name/system /system ext4 rw,relatime,barrier=1,data=ordered 0 0
(snip)

日本語フォントは含まれていないのを確認する。

# ls -l /system/fonts/DroidSansJapanese.ttf
/system/fonts/DroidSansJapanese.ttf: No such file or directory
# exit
MacBook:tools kinneko$ ./adb push ~/Downloads/MTLc3m.ttf  /system/fonts/DroidSansJapanese.ttf
2860 KB/s (1924864 bytes in 0.657s)

これで終了。

日本語ロケールの有効化

日本語リソースを有効にするために、ありやまさん作のMoreLocale 2を入れる。
以下からapkファイルをダウンロードする。
http://ccl.c-lis.co.jp/modules/d3blog/details.php?bid=112
http://ccl.c-lis.co.jp/modules/mydownloads/singlefile.php?cid=5&lid=78
インストールする。

MacBook:tools kinneko$ ./adb install ~/Downloads/MoreLocale2.apk 
886 KB/s (31996 bytes in 0.035s)
	pkg: /data/local/tmp/MoreLocale2.apk
Success

ホームに戻ると、アイコンが出ているので、起動する。
https://lh6.googleusercontent.com/-h8gc-OpzOfU/T7_DUIK-43I/AAAAAAAAC_k/-UqDGkmCNgg/s512/device-2012-05-26-023643.png
設定可能なロケール一覧が表示される。
https://lh5.googleusercontent.com/-BZmkaAZq0B8/T7_ECsVfdsI/AAAAAAAAC_4/LfTbAL54KU8/s512/device-2012-05-26-023913.png
日本語は下にスクロールしていくとある。
https://lh4.googleusercontent.com/-Zc5dPuWesuI/T7_ECjpmyyI/AAAAAAAADAA/wejxcoGRIp4/s512/device-2012-05-26-023944.png
クリックすると、日本語に設定が変更される。
https://lh3.googleusercontent.com/-6-yMYYj_isU/T7_ECqGJS1I/AAAAAAAAC_8/Q34IhfUljEA/s512/device-2012-05-26-023952.png
もともと、fireのホームアプリは、日本語設定情報を持たないので見た目は変わらないが、設定やアプリ一覧などを出すと日本語になっているのがわかる。
https://lh6.googleusercontent.com/-qnUBbgvnBwM/T7_GbXjB09I/AAAAAAAADA0/FA8Cpd_6Euc/s512/device-2012-05-26-024855.png
https://lh6.googleusercontent.com/-5t_ys2GEjiQ/T7_E4Lo2YoI/AAAAAAAADAc/wf64RmbFdNk/s512/device-2012-05-26-024332.png

日本語入力の追加

そもそもfireには、キーボードはkindle keyboardしか設定がない。
https://lh5.googleusercontent.com/-dWX4BhCksnQ/T7-aTOBpbsI/AAAAAAAAC90/BGTTJhtVbjQ/s512/device-2012-05-25-231757.png
https://lh5.googleusercontent.com/-5CdOlN0eNsQ/T7_GbjtftfI/AAAAAAAADAw/z2gnAz4f7Ss/s512/device-2012-05-26-025003.png
他のキーボードアプリケーションをインストールしても切り替えることができない。
表示を日本語にしてしまうと、このメニューを選ぶこともできない。
https://lh6.googleusercontent.com/-qnUBbgvnBwM/T7_GbXjB09I/AAAAAAAADA0/FA8Cpd_6Euc/s512/device-2012-05-26-024855.png
https://lh4.googleusercontent.com/-qoUo2DX6uqc/T7_GcAVULpI/AAAAAAAADA4/J1JW5Os-Y6A/s512/device-2012-05-26-024926.png



Androidの言語とキーボードの設定は、"/data/data/com.android.providers.settings/databases/settings.db"に入っているので、SQLite3のツールを使って、必要なエントリを直接書き換えることもできるが、settings.db -> secure -> enabled_input_methodsのレコードを直接編集するのは、少々手間である。
そこで、imeコマンドを使うことにする。
デフォルトでは、以下のようにLatinIMEが1つだけインストールがされているのが確認できる。

MacBook:tools kinneko$ ./adb shell
# ime list -a
com.android.inputmethod.latin/.LatinIME:
  mId=com.android.inputmethod.latin/.LatinIME mSettingsActivityName=com.android.inputmethod.latin.LatinIMESettings
  mIsDefaultResId=0x7f080001
  Service:
    priority=0 preferredOrder=0 match=0x108000 specificIndex=-1 isDefault=false
    ServiceInfo:
      name=com.android.inputmethod.latin.LatinIME
      packageName=com.android.inputmethod.latin
      labelRes=0x7f0c0020 nonLocalizedLabel=null icon=0x0
      enabled=true exported=true processName=com.android.inputmethod.latin
      permission=android.permission.BIND_INPUT_METHOD
# exit


IMEとして、Simejiの最新版をインストールする。

MacBook:tools kinneko$ ./adb install "/Users/kinneko/Downloads/Simeji 4.11.2.apk" 
2267 KB/s (4471802 bytes in 1.926s)
	pkg: /data/local/tmp/Simeji 4.11.2.apk
Success

きのこの山が出た。
https://lh3.googleusercontent.com/-d4UIKEp8rvg/T7_K0QoioMI/AAAAAAAADBU/HmKAxEG7NOM/s512/device-2012-05-26-030803.png
Simejiが追加されたのがimeコマンドでも確認できる。

MacBook:tools kinneko$ ./adb shell# ime list -a
com.android.inputmethod.latin/.LatinIME:
  mId=com.android.inputmethod.latin/.LatinIME mSettingsActivityName=com.android.inputmethod.latin.LatinIMESettings
  mIsDefaultResId=0x7f080001
  Service:
    priority=0 preferredOrder=0 match=0x108000 specificIndex=-1 isDefault=false
    ServiceInfo:
      name=com.android.inputmethod.latin.LatinIME
      packageName=com.android.inputmethod.latin
      labelRes=0x7f0c0020 nonLocalizedLabel=null icon=0x0
      enabled=true exported=true processName=com.android.inputmethod.latin
      permission=android.permission.BIND_INPUT_METHOD
com.adamrocker.android.input.simeji/.OpenWnnSimeji:
  mId=com.adamrocker.android.input.simeji/.OpenWnnSimeji mSettingsActivityName=com.adamrocker.android.input.simeji.SimejiSettingsActivity
  mIsDefaultResId=0x0
  Service:
    priority=0 preferredOrder=0 match=0x108000 specificIndex=-1 isDefault=false
    ServiceInfo:
      name=com.adamrocker.android.input.simeji.OpenWnnSimeji
      packageName=com.adamrocker.android.input.simeji
      labelRes=0x7f080001 nonLocalizedLabel=null icon=0x0
      enabled=true exported=true processName=com.adamrocker.android.input.simeji
      permission=android.permission.BIND_INPUT_METHOD
# 

現在有効になっているIMEを確認する。

# ime list -s
com.android.inputmethod.latin/.LatinIME

imeコマンドで表示される情報のうち、mIdを使って直接有効にする。

# ime enable com.adamrocker.android.input.simeji/.OpenWnnSimeji
Input method com.adamrocker.android.input.simeji/.OpenWnnSimeji: now enabled

有効になっているのを確認する。

# ime list -s
com.android.inputmethod.latin/.LatinIME
com.adamrocker.android.input.simeji/.OpenWnnSimeji


候補になればあとは、入力欄を長押しして、IMEの一覧を表示して切り替えるだけ。
https://lh5.googleusercontent.com/-Iukgh4CUk4k/T7_McFh1BNI/AAAAAAAADBo/Ae-3kify3Y4/s512/device-2012-05-26-031430.png
https://lh3.googleusercontent.com/-morq0qZ4hT8/T7_Mcuu1kDI/AAAAAAAADBs/OPKMNuRcKdM/s512/device-2012-05-26-031447.png
https://lh6.googleusercontent.com/-7xzLkpZ-Gn0/T7_MctYMUlI/AAAAAAAADBw/2jYHkCave7Y/s512/device-2012-05-26-031456.png
https://lh4.googleusercontent.com/-CvHE7uFsqiA/T7_Mdf_PoRI/AAAAAAAADB8/5-yET03UAtg/s512/device-2012-05-26-031505.png
https://lh3.googleusercontent.com/--8DJuwqEvGM/T7_Md55UkNI/AAAAAAAADCA/0rVSnhZKfpk/s512/device-2012-05-26-031530.png
https://lh3.googleusercontent.com/-pejQZpzlWW0/T7_MepdBp5I/AAAAAAAADCI/8ORYnlZ1WxI/s512/device-2012-05-26-031538.png


というわけで、これにて日本語化の作業は終わった。
あとは再起動してやるだけ。

MacBook:tools kinneko$ ./adb shell
# reboot

rootでなくなっていることと、systemがリードオンリーに戻っていることが確認できる。

MacBook:tools kinneko$ ./adb shell
$ cat /proc/mounts
(snip)
/dev/block/platform/mmci-omap-hs.1/by-name/system /system ext4 ro,relatime,barrier=1,data=ordered 0 0
(snip)


しかし、無線設定していないし、アプリを何も入れていないし、Amazonでの認証もしていないので、日本語化したからといって何か便利になるわけではないのであった... orz