「ニコWnn」を改造した時のメモ
はじめに
「ニコWnn」とは、Android向けのオープンソースのIME「OpenWnn」を元に作られたIMEです。
私はHT03-Aを使っています。しかしこの機種は、画面が小さく、入力キーが小さすぎて文章が非常に打ち難いです。そこで、オープンソースのIMEを改造して、自分にちょうどよいサイズのIMEを作ろうと考えました。
実際の作業は、情報収集の開始が2010年11月15日の深夜、試作の完成が早朝。その後翌日の夕方から作業を再開して16日の夜に終了しました。
完成品は、こんな感じです。左がデフォルトのIME。右が改造して作ったIMEです。
この時の作業の記録をアップしておけば、今後IMEをカスタマイズしたい人の参考になると思いましたので、以下に簡単ではありますが、手順をまとめておこうと思います。
環境はWindows Vistaです。
改造した「ニコWnn-Big」は、以下のページで野良アプリとして入手可能です。
また、プロジェクトはZIPとして、以下のページから入手可能です。
□ニコWnn-Big プロジェクト Google ドキュメント
それでは以下、作業手順の履歴です。
Windowsで「Git」をインストール
ソースコードの入手に「Git」が必要です。以下を参考にしてインストールします。
「Git Bash」で「OpenWnnニコタッチ版」をゲット
「Git」を起動して、以下のコマンドを打ち込みます。「OpenWnnニコタッチ版」のプロジェクト一式がゲットできます。
$ git clone git://git.sourceforge.jp/gitroot/nicownn/NicoWnn.git
「C:\Users\
Androidプロジェクトの読み込みと修正
手に入れたプロジェクトを、Androidプロジェクトとして読み込んで、以下の修正を行います。
キーボードの高さの変更
以下のファイルを修正します。
/NicoWnn/res/values/dimens.xml
<dimen name="key_height">48dip</dimen> ↓ <dimen name="key_height">60dip</dimen>
変換候補の高さの変更
以下のファイルを修正します。
/NicoWnn/src/com/hiroshica/android/input/nicownn2/TextCandidatesViewManager.java
private static final int CANDIDATE_MINIMUM_HEIGHT = 42; ↓ private static final int CANDIDATE_MINIMUM_HEIGHT = 60;
パッケージを変更
本家の「ニコWnn」とバッティングしないように、パッケージの変更を行います。
それに伴い、元のクラスパスを検索して、新しいクラスパスに全て書き換えます。
com.hiroshica.android.input.nicownn2 ↓ com.crocro.android.input.nicownn2
次以降は、JNIのファイルの書き換えになります。
Windowsに「Cygwin」を導入
以下を参考にして、「Cygwin」環境を構築します。
Cygwinの「setup.exe」で、gccとmakeをインストールします。
方法は、上記の「ネイティブコードとの連携によるAndroidの機能拡張」を参照してください。
コンパイルできる環境を作る
Windowsの環境変数に以下の内容を追加します。
□AndroidのNDK 1.5でHelloJNIを動かす手順
環境変数として、ユーザー変数「HOME」の末尾に「/home/
環境変数として、ユーザー変数「PATH」の末尾に「C:\~\android-ndk-XX」のフォルダパスを追加します。
さて、ここで重要なことを書きます。
NDKは「r4からコンパイル方法が大きく変わっています」。これは、非常に重要です。
ネットの情報を参考にしてコンパイルする際は、「r4以上の情報かどうか」確認してから読む必要があります。
r3以前とr4以降では、コンパイル方法がまったく違います。なので、r3以前の情報を見ていると、上手くいかないので、時間を無駄にします。
プロジェクトのビルド
環境が整ったら、JNIのビルドを行います。
「Cygwin」を起動します。
アプリの AndroidManifest.xml があるところに移動します。
以下のコマンドで詳細ビルドを実行します。
ndk-build V=1
nicoWnnをビルドする際の注意点
・「libs」フォルダは「jni」フォルダに名前を変更する。
・「NicoWnn\jni\libwnnDictionary\Android.mk」の「LOCAL_LDLIBS += -ldl」の周囲のif文をコメントアウトして、「LOCAL_LDLIBS += -ldl」を強制実行させるように変更する。
上記について、例を示します。
#ifeq ($(TARGET_OS)-$(TARGET_SIMULATOR),linux-true) LOCAL_LDLIBS += -ldl #endif #ifneq ($(TARGET_SIMULATOR),true) #LOCAL_SHARED_LIBRARIES += libdl #endif
また、プロジェクト直下のmakeファイルは、Java側からJNIにリンクするのに必要なので削除しないようにします。
アプリの名前を変える
以下のように変更します。
<application ~ android:label="NicoWnn-Big" ~ <service ~ android:label="nicoWnn-Big" ~
ついでにアイコンも変えます。
あと「assets」フォルダのドキュメントにも追記します。
終わりです。