IMEを作っている(そして放置している)ものとして、Google日本語入力が出た時点で「こっちでいいじゃん」的な気持ちになっていたのですが、とりあえずMozc for Android(オープンソース版Google日本語入力)でも弄ってみようと思ってはや1年近く。ようやく時間ができたので試してみました。それなりに悪戦苦闘しそうだと思ってはいたのですが、割とすんなりできたので手順を公開します。
本来の手順自体はこちらにあります。
https://code.google.com/p/mozc/wiki/AndroidBuildInstructions
まずはEC2でインスタンスを作ります。t1.microでは途中でCPUパワーが足りずにBuildが進まなくなるため、最初からm1.smallで設定したほうが良いでしょう。tokyoリージョンなのは趣味です。
この時点でEBSを16GiBにしておく必要があります。これもデフォルトの8GiBではコンパイル中に容量が足りなくなるためです。
また、今のところUbuntuでないとコンパイルが保証されていないので、Ubuntu Server 12.04.3 LTS 64bitを選択してますが、後から32bitライブラリを足たりしているので、もしかしたら最初から32bitが良かったのかもしれません。
ログインしたらまず足りないものをインストール
% sudo apt-get install ant g++ make python subversion openjdk-6-jdk
Unzip / Subversion / make / gcc / pkg-config も入れておきます。
% sudo apt-get install unzip
% sudo apt-get install subversion
% sudo apt-get install make
% sudo apt-get install gcc
% sudo apt-get install pkg-config
32bitライブラリを入れておきます。
% sudo apt-get install ia32-libs
一度インストールしたら、
% sudo apt-get update
も実行してください。
AndroidSDKとAndroidNDKもダウンロードして展開。
% wget http://dl.google.com/android/adt/adt-bundle-linux-x86_64-20131030.zip
% wget http://dl.google.com/android/ndk/android-ndk-r9c-linux-x86_64.tar.bz2
% unzip adt-bundle-linux-x86_64-20131030.zip
% tar jxfv android-ndk-r9c-linux-x86_64.tar.bz2
いよいよコードをダウンロード
% cd ~/
% svn co http://src.chromium.org/svn/trunk/tools/depot_tools
% export PATH=”$PATH”:`pwd`/depot_tools
% mkdir -p ~/src/mozc
% cd ~/src/mozc
% gclient config http://mozc.googlecode.com/svn/trunk/src
% gclient sync
周辺ライブラリzinnia(手書き文字認識エンジン)が足りないのでダウンロード・インストールしておく
% cd ~/
% wget http://downloads.sourceforge.net/project/zinnia/zinnia/0.06/zinnia-0.06.tar.gz
% tar zxvf zinnia-0.06.tar.gz
% cd zinnia-0.06/
% ./configure
% make
% sudo make install
再度 gclient syncから
% cd ~/src/mozc
% gclient sync
パスを通す
% export PATH=~/android-ndk-r9c:~/adt-bundle-linux-x86_64-20131030/sdk/tools:~/adt-bundle-linux-x86_64-20131030/sdk/platform-tools:”$PATH”
% which ndk-build android adb
さらにJava をインストールし、SDKをアップデートしておきます
% sudo add-apt-repository ppa:webupd8team/java
% sudo apt-get update
% sudo apt-get install oracle-java7-installer
% android update sdk -u -t platform,tool,platform-tool,extra-android-support
コンパイルを開始します
% cd ~/src/mozc/src
% python build_mozc.py gyp –target_platform=Android
(WPでは見えませんが、target_platform の前のハイフンは2つです)
% python build_mozc.py build_tools -c Release
% python build_mozc.py build android/android.gyp:android_manifest
local.propertiesを作成
% android update project -s -p android –target android-17
そしてBuildします
% python build_mozc.py build android/android.gyp:apk -c Debug_Android
これでDebugバージョンのapkが
/home/ubuntu/src/mozc/src/android/bin/MozcForAndroid-debug.apk
に出来ます。
以下補足です。
エラーが出る場合 1:
make: *** [out_android/Debug_Android/obj/gen/data_manager/oss/system.dictionary] Error 137
make: *** Waiting for unfinished jobs….
こんな感じのエラーはCPUパワーが足りてません。
t1.microではCPUパワーが足らないので、m1.small以上で起動しなおしましょう。
エラーが出る場合 2:
BUILD FAILED
/home/ubuntu/src/mozc/src/android/custom_rules.xml:42: The following error occurred while executing this line:
/home/ubuntu/adt-bundle-linux-x86_64-20131030/sdk/tools/ant/build.xml:601: The following error occurred while executing this line:
/home/ubuntu/adt-bundle-linux-x86_64-20131030/sdk/tools/ant/build.xml:653: The following error occurred while executing this line:
/home/ubuntu/adt-bundle-linux-x86_64-20131030/sdk/tools/ant/build.xml:698: Execute failed: java.io.IOException: Cannot run program “/home/ubuntu/adt-bundle-linux-x86_64-20131030/sdk/build-tools/android-4.4/aapt” (in directory “/home/ubuntu/src/mozc/src/android/protobuf”): error=2, No such file or directory
これは32bitライブラリが足りていないときです。このコマンドからia32を導入してください。
% sudo apt-get install ia32-libs
エラーが出る場合 3:
INFO: Running: make -j2 MAKE_JOBS=2 BUILDTYPE=Debug_Android builddir_name=out_android apk
ACTION android_android_gyp_assets_touch_stat_data_target_assets_touch_stat_data android/dummy_touch_stat_data
make: *** [android/dummy_touch_stat_data] Error 1
Traceback (most recent call last):
File “build_mozc.py“, line 1437, in <module>
main()
File “build_mozc.py“, line 1425, in main
BuildMain(cmd_opts, cmd_args, original_directory_name)
File “build_mozc.py“, line 1038, in BuildMain
BuildOnLinux(options, targets, original_directory_name)
File “build_mozc.py“, line 992, in BuildOnLinux
RunOrDie([make_command] + build_args + target_names)
File “/home/ubuntu/src/mozc/src/build_tools/util.py”, line 97, in RunOrDie
‘==========’]))
build_tools.util.RunOrDieError:
==========
ERROR: make -j2 MAKE_JOBS=2 BUILDTYPE=Debug_Android builddir_name=out_android apk
==========
なんらかの理由でコンパイルが失敗しているので、一度cleanして実施すると上手くいく可能性があります。
% python build_mozc.py clean –target_platform=Android
エラーが出る場合 4:
/home/ubuntu/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar: android/obj/local/armeabi/libclient.a: No space left on device
EBSボリュームが足りていません。EBSボリュームを拡張しましょう。詳しくは
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-expand-volume.html
でご確認ください。
さらに補足:
aaptのパスが通らなかった場合がありましたので、その場合は下記を投入してください。
% export PATH=/home/ubuntu/adt-bundle-linux-x86_64-20131030/sdk/build-tools/android-4.4/:”$PATH”