kivyでrestructuredtextのeditorを使う

2014/02/14 22:00

※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】

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を読み込めばインストールできる。

Dropbox経由でやり取りをする

ビルドしたものを移すのが便利なので、Dropboxアプリを入れると良いかも。Amazonマーケットには無いので、dropboxのサイトからダウンロードしてインストールする。

https://www.dropbox.com/android

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/

Prev Entry

Next Entry