kivy v1.8.0 の話。
まず始めに、現時点ではKivyは日本語の入力できない環境が多いということに注意。
今回は、Kindle Fire HDX 7インチ で rst を簡単に編集&プレビューする環境を作るのが目的。
ローカルへのKivyのインストール
WindowsやOSXはインストーラが用意されているので簡単。他の環境についても詳細にインストール方法が書いてあえるのできっと問題ないでしょう。
この先はOSXでのお話(10.9.1)。
dmgをマウントしてApplicationフォルダにコピーをするのに加えて、下の方にあるショートカットを追加する的なものもやっておくのが吉。/Applications/Kivy.app/Contents/Resources/script を /usr/local/bin/kivy でシンボリックリンクするだけなので忘れたら自分でやると良い。
また、dmgをマウントするとexampleというフォルダがあり、その中に RST_Editor というフォルダがあるのでそれを適当な場所にコピーする。今回はホームディレクトリに rstedit という名前でコピーしたという前提。
デフォルトフォントを変更する
Kivyのデフォルトフォントは当然日本語を前提にしていない。世界中の文字を網羅したら50MB以上のフォントになっちゃうよー、ってことらしい。
で、日本語のグリフが入ったフォントを無理矢理使うんだけど、環境によって当然日本語フォントが違う(Kindle Fire HDXなら決まってるんだろうけど)。
面倒を回避するためにIPAのフォントを持ってくる。自分でしか使わないし。
~/rstedit/fonts/ipaexg.ttf として置く。フォルダ名は何となく決めた。
続いて、デフォルトフォントを変更する。
~/rstedit/main.py
# import文が終わったあたりに追加する
from kivy.core.text import LabelBase, DEFAULT_FONT
LabelBase.register(DEFAULT_FONT, 'fonts/ipaexg.ttf')
これだけだとliteralブロックの日本語がうまく表示されないので、 kivy.uix.rst にベタに書かれているliteralブロックのフォントを無理矢理変える。DroidSansMono.ttfの指定が2カ所あるけど、構造定義の文字列中だけ変更した。問題があったら両方変えれば良いと思う。
/Applications/Kivy.app/Contents/Resources/kivy/kivy/uix/rst.py
225c225
< font_name: 'data/fonts/DroidSansMono.ttf'
---
> font_name: 'fonts/ipaexg.ttf'
あとでapkをビルドするときに必要になるので、pyoにしておく(Kivyにパスの通ったインタプリタを -O オプション付きで起動して import するだけ)。
$ kivy -O
Python 2.7.5 (default, Aug 25 2013, 00:04:04)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from kivy.uix import rst
(これでpyoができてるはずなのでインタプリタを抜けていい)
docutilsを同梱する
docuitlsのサイトからダウンロードしてきてフォルダの中に入っている docutils フォルダをzipにする。
$ zip -r docutils.zip ./docutils
$ mv docutils.zip ~/rstedit/.
無理矢理 docutils.zip にPYTHONPATHを通す。普段Pythonでインチキする時と同じでらくちん。
~/rstedit/main.py
# import文が終わったあたりに追加する
sys.path.insert(0, os.path.join(os.getcwd(), 'docutils.zip'))
apkのビルド環境を作る
いろいろと準備が面倒なので、kivyが配布しているVirtualBoxのイメージ( Kivy Python for android VM )を使う。
http://kivy.org/#download ここからたどれる
VirtualBoxはOSXからアクセスできるようにネットワーク2にブリッジアダプタつけるとらくちん(キーボードの設定とかカエルの面倒だし)。
ユーザ名 kivy パスワード kivy123 でログインできるので、なにはともあれsshをインストールする。
$ sudo apt-get install ssh
環境準備についてはここに書いてあるまま
http://kivy.org/docs/guide/packaging-android.html
$ ssh kivy@192.168.0.xx
...
$ git clone git://github.com/kivy/python-for-android
$ cd python-for-android
$ ./distribute.sh -m "kivy"
簡単だ。
rst.pyoを差し替えてビルドする
日本語対応に無理矢理したモジュールをビルド環境に置く。
$ scp /Applications/Kivy.app/Contents/Resources/kivy/kivy/uix/rst.pyo kivy@192.168.0.xxx:~/python-for-android/dist/default/private/lib/python2.7/site-packages/kivy/uix/.
コードをビルド環境に置く。
$ scp -r -C ~/rstedit kivy@192.168.0.xxx:~/.
ビルドする
$ ssh kivy@192.168.0.xxx
...
$ cd ~/python-for-android/dist/default
$ ./build.py --dir ~/rstedit --name "RstEdit" --package com.example.yourdomain.android.restedit --version 0.1 debug
~/python-for-android/dist/default/bin/RstEdit-0.1-debug.apk ができる。
Kindle Fire HDXにapkをインストールする
Kindle Fire HDXはAmazonのストア以外からのapkはインストールできない設定になっている。
設定→アプリケーション→不明ソースからのアプリをオンにして野良apkをインストールできるようにする。
これであとはさっきビルドしたapkを読み込めばインストールできる。
Copy.com経由の場合
最近 Dropbox より Copy.com を使うことが増えているので、 Kindle Fire hdx にCopyアプリを入れた。
Google Play経由でインストールしたアプリのapkは Bluetooth App Sender というアプリを使って Dropbox に置いたりできる。問題は、 Kindle Fire hdx には Google Play は入らないし、電話はもちろん iPhone なので手段が無いこと。
そこでGenymotionにGoogle Playをインストールしてそこで無料アプリを入手することにした。最近のGenymotionはGoogle Playアプリが同梱されなくなったので この辺りの方法 を参照してインストールすべし。
他にapkを入手する正当かどうかよくわからない方法もある。ものによってはうまく入手できないし、きちんとGoogle Playの環境を作るのが良いとは思う。
http://apps.evozi.com/apk-downloader/