はじめに
AndroidのIME「Google日本語入力」がAndroid4.4(KitKat)で辞書インポートができないという話を聞いたので少し調べてみました。
※長々と説明していますが時間がない方はベージの最後の方にあるアプリを使えばAndroid4.4でも辞書インポートが楽にできるのでぜひお使いください。
環境
- SCL22 (Android4.4.2)
- Google日本語入力 (バージョン: 1.15.1785.3-arm)
- ESファイルエクスプローラ (辞書データを開くために使用)
検証
外部ストレージ直下に辞書ファイルを配置します。
※ わかりづらいですがここでいう外部ストレージはSDカードとは限りません。
最近の端末では内部ストレージ内にあることが多いです。
大抵の場合 /sdcard でアクセスできると思います(適当)
ESファイルエクスプローラで辞書データを開きます。
するとこのように「ファイルを読み込めません。」とトーストが表示されます。
確かに辞書のインポートができません。
原因
この原因はKitKatで外部ストレージの仕様が変更されたことにあります。
以前は外部ストレージの読み込みには権限が不要でしたが、
KitKatで「READ_EXTERNAL_STORAGE」というパーミッションが正式対応され、
この権限がないと外部ストレージのデータを読み込むことはできなくました。
その代わりに外部ストレージの一部領域が権限なしで読み書きできるようになりました。
外部ストレージの仕様の変化は以下のとおりです。
- Android4.3(Jelly Bean)まで
読み込みには権限が不要
書き込みには「WRITE_EXTERNAL_STORAGE」が必要
- Android4.4(KitKat)から
読み込みには「READ_EXTERNAL_STORAGE」が必要
書き込みには「WRITE_EXTERNAL_STORAGE」が必要
ただし外部ストレージの以下の領域は権限なしで読み書きが可能
[外部ストレージ]/Android/data/[パッケージ名]/
※「WRITE_EXTERNAL_STORAGE」は「READ_EXTERNAL_STORAGE」を内包しているので読み込みも可能です。
ここでGoogle日本語入力の権限を見てみます。
Google日本語入力の権限には「READ_EXTERNAL_STORAGE」や「WRITE_EXTERNAL_STORAGE」は含まれていません。
よってAndroid4.4のGoogle日本語入力では外部ストレージの読み込みはできません。
解決策
先ほど説明した外部ストレージにあるアプリが権限なしで読み書き可能な領域にインポートしたい辞書データを置くとアプリがデータを読み込むことができます。
実際に試してみます。
以下の場所に辞書データを置きます。(zipでも可)
[外部ストレージ]/Android/data/com.google.android.inputmethod.japanese/[辞書データ].txt
そのファイルをESファイルエクスプローラーから辞書データを開きます。
すると、ファイルが読み込まれ、インポート先の辞書を選択するダイアログが表示され…
辞書データが読み込まれました!!
(内容は適当です)
これでKitKatでもGoogle日本語入力の辞書インポートができました。
ツール化
ここで終わっても良かったのですが辞書をインポートするたびここにデータを置くのは面倒だなと思ったのでアプリ化してみました。
このツールでは選択されたデータを先ほど説明したGoogle日本語入力が読み書きできる領域にコピーしそれを開くということをやっています。
いずれGoogle日本語入力のほうでこの問題は解決されると思うので野良アプリにしました。
しばらく改善されない感じなので結局Playストアにアップロードしました。
ご自由にお使いください。
DicImportTool.apk
(ICS以降の端末に対応しています)
使い方は「ファイルを選択」からファイルを選択し、「辞書データを読み込み」を押すだけです。
適当に作ったのでバグが有る可能性が高いです。
何かあれば@tetsu31415までお願いします。