2010-11 << 2010-12 >> 2011-01

2010-12-26 (日)

*[Android] Androidで日本語配列キーボードを使う

昨日買って来たbluetoothキーボードは無事に使えるようになったのですが,US配列になってしまっています.私は日本語配列派なのでどうにかしないといけません.

前に色々いじってた時に,キーマップを変更しようと試みたことはあるので,最初にいじるべきファイルは分かってます.

  • /system/usr/keylayout/qwerty.kl
  • /system/usr/keychars/qwerty.kcm.bin

この2つのファイルをどうにかしてやれば,いけそうです.他に日本語配列にしてる人がいないか探したのですが,見つかりませんでした.もし,ちゃんとしたものがあるなら,こっそり教えてください.

後者のファイルはバイナリですが,中を見ればすぐ意味が分かるので,makekcharmapとかいう謎のツールとか無くてもバイナリエディタで問題ありません.

簡単に説明するならば,qwerty.klがキーボードのスキャンコードからAndroidのキーコードに変換するテーブルです.そして,qwerty.kcm.binはSHIFTやALTと一緒に押したときを含めてどの文字が入力されるべきかを定義します.

Android Platform Developer's Guideを読むと色々分かるのでAndroidいじるときはSDKだけじゃなくてこっちも見ておくと良いかも.

キーの数が同じなら,qwerty.kcm.binの方だけで無理やりどうにかするという手段も使えますが,どうせキーの数が増えているので両方のファイルをいじることにします.

すでに定義されているキーの記号などは簡単に入れ替えられます.問題は,日本語キーボードの「|」や「_」を入力するキーで,こいつらをどうにかしないとです.

ちなみに,スキャンコードは

  • 41 半角/全角キー
  • 89 「\/_」
  • 124 「\/|」

です.この辺は,Linuxのキーマップを見ればよいでしょう.それにしても,HIDのUsageIdから物理配置基準のスキャンコードに変換してから,さらにキーコードに変換するとか,面倒なことするなぁ….

新たにキーを追加したいので,Android内でどんなキーが使えるのかをまず確認,基本的には,android/view/KeyEvent.java にあるキーコードから選ばないといけない.

念のため,qwerty.klを読み込んでいる libs/ui/KeyLayoutMap.cpp も見てみたけど,キーは include/ui/KeycodeLabels.h に定義されてる名前でなければいけなくて,これは android/view/KeyEvent.java にあるものと同じのようです.

仕方ないので,AT + SHIFTで入力するのでいらなくなった APOSTROPHE あたりを使う.キーコードの問題なので別になんでも良い.

中にはキーコードを直接使うアプリがあるので,qwerty.klを変なものにすると使いにくくなるかもしれませんが,今回はあまり気にしないで不便を感じたときに直す方針で.

というわけで,終わり.

一応,qwerty.klqwerty.kcm.binをおいておきます.たぶんまだ不便なので,好みに合わせていじってください.

もちろん,/system下に書き込むにはroot権限必要です.

/data/usr下でも良いような感じもするので,rootは必須ではないかもしれませんが,試していません.システムプロパティいじれば好きな場所に置けるようですし,そもそも,ハードウェアごとに別のキーマップにできるので,上書きしないほうが良いのかもしれません.

2010-11 << 2010-12 >> 2011-01