Python for Androidのビルド (1) - Kivy Advent Calendar 2013

(※Python for Androidは後半の記事ですが、時間切れのため先行して公開します)
KivyLauncherではopensslやPILなどのモジュールが導入されていて、せいぜいWebサーバと連携して何かやる程度の軽いアプリならあまり困らないのですが、それでも自分でモジュールをインストールしたいなということはあります。
でもAndroidの保護機構のため、Google Playからインストールしたリリース版のKivyLauncherにはライブラリインストールはできません。また /sdcard/kivy/(プロジェクトフォルダ)/ の下に置けばimportで取り込む場合もPythonで記述されたライブラリに限られます。

Python for Android」というのは文字通りAndroid上で動くPythonコンパイルするためのキットで、ライブラリの組み込みやAndroidインストーラパッケージ (APK) を作るツールも含まれています。このビルドオプションに複数アプリを切り替えるランチャーを組み込むものがあり、それをセットしてビルドしたものがKivyLauncherとして公開されているわけです。
KivyLauncherをビルドし直せば次のことが可能になります。

  • リリースされていないバージョン、ブランチを使う
  • Androidパーミッションの追加
  • CまたはCythonで記述されたライブラリの組み込み
  • 実行方法の変更 (単体アプリ、ウィンドウ化など)

Kivyサイトでは、Android SDK/NDKやビルドに必要なツールをインストールしたLinuxベースの開発環境イメージを配布しています。既存のLinux環境に構築することもできますが、ここではこの開発環境イメージを使って動かすことにします。

Oracle VM VirtualBoxのインストール

LinuxWindowsMac OS XSolarisなど、VirtualBoxが動くマシンだったら、環境のセットアップを飛ばして手っ取り早くビルドできるのでオススメです。
まずはVirtualBoxのインストールから。プラットフォームにあったパッケージをダウンロードしてインストールします。
https://www.virtualbox.org/wiki/Downloads

VMの作成

次にVMのイメージを入手します。
http://kivy.org/#download
KivyサイトのVirtual Machinesの項目にある「Kivy Python for android VM」(Googleドライブで公開)をダウンロードします。7-zipという日本ではややマイナーな圧縮形式ですが、展開ツールはすぐ見つかると思います。
ユーザディレクトリ下など適当な場所に展開したら、Oracle VM VirtualBoxを実行して

  • VMを新規作成
  • Linux-Ubuntuを指定
  • メモリサイズを指定 (1024MB程度?)
  • 「すでにある仮想ハードドライブファイルを使用する」を選択して展開したファイルを指定

でセットアップは完了です。

Ubuntuの操作

VMの起動を行うとUbuntuKDEデスクトップが立ち上がります。

ここから次のようにテキスト端末を開いて、kivyユーザとしてログインします。このVMでのkivyユーザの初期パスワードは「kivy123」で設定されています。

  • Ctrl+Alt+F1を押せば全画面のCUIコンソールになり、ログイン待ちになる
    • 別のコンソールが必要なら、Ctrl+Alt+F2 〜 Ctrl+Alt+F6 で立ち上がる
    • Ctrl+Alt+F7でKDEのデスクトップに戻る
  • Ctrl+Alt+Tを押せばKDE上でターミナルを開く
    • (すでにkivyユーザでKDEデスクトップが立ち上がっているのでログインは不要)

ビルド作業はCUIかターミナルのどちらかで行うことになります。まあ各々好みがあるので問いませんが、速度的にいえばCUIの方がお薦めです。

共有フォルダの設定

ソースファイルや作成されたAPKパッケージなど、VMとホスト機の間でファイルのやり取りができるよう共有フォルダを作っておくといいでしょう。
まずホスト機の適当な場所に共有フォルダshareを作り、VirtualBoxマネージャの「フォルダ共有」でそのフォルダを設定します。
次にゲストOSでmount操作を行えば、shareフォルダを通じてファイルのやり取りができるようになります。

$ mkdir share
$ sudo mount -t vboxsf share share