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

VMも動いたのでいよいよビルド作業に入りますが、その前にやっておく作業があります。

ビルド環境の修正

基本的にこのVMイメージは初期状態でPython for Androidのビルドに必要なコマンドはすべてインストールされているため、apt-getやyumで環境構築する必要はありません。
ただ、現在(2013年11月)配布されているイメージは次の問題があり対応が必要になります。

(1) python-for-androidの再取得
ディスクイメージ内に配置してある /home/kivy/android/python-for-android/ は、パス名の問題でPython-2.7.2のコンパイルに失敗します。これはあらためてgithubから最新版を取得・展開すれば解決します。

$ cd python-for-android
$ git pull

(2) cythonのアップグレード
Cythonの処理中に「構文が違う」というエラーを返すことになりますので、pipを使って最新版にしておきます。

$ sudo pip install --upgrade cython

Python for Androidのビルド

/home/kivy/android/python-for-android/ に移動して distribute.sh を実行します。

$ ./distribute.sh -m "sqlite3 openssl pyopenssl lxml audiostream cymunk ffmpeg pil pyjnius twisted kivy"

必要なレシピがあればここで追加しておきます。上のコマンドラインはKivyLauncher 1.7.2と同じもので、最終的なAPKのサイズは12〜13MBくらいになります。
レシピの中には現在ビルドできないものもあるようです。この場合 dist/default/ フォルダがの中にファイルが1つもない状態で終了します。問題のレシピを取り除いて再度distribute.shを実行するときは dist/default/ フォルダを一旦削除する必要があります。

  • サイトからダウンロードできない (※URLを書き換えれば解決?)
    • gevent
    • libevent
  • ioモジュールがない等のエラー (※Pythonバージョンの不一致?)

distribute.shによってPythonと各種ライブラリがAndroid向け実行ファイルとしてビルドされれば、次はAPKパッケージを作る準備段階になります。念のため次のファイルが作成されていることを確認してください。
(src/ 以下)

  • default.properties
  • local.properties
  • objs/local/armeabi/*.a
  • objs/local/armeabi/*.so
  • objs/local/armeabi/objs/**
  • libs/armeabi/*.so

(dist/default/ 以下)

  • build.py

APKパッケージの作成

dist/default/ に移動して build.py を実行します。

$ ./build.py \
      --name "Kivy Launcher" \
      --package org.kivy.pygame \
      --version 1.7.2.1 \
      --launcher \
      --icon templates/launcher-icon.png \
      --presplash templates/launcher-presplash.jpg \
      --permission INTERNET \
      --permission BLUETOOTH \
      release

dist/default/bin/ の下に次のようなファイル名でAPKファイルが作成されます。

KivyLauncher-1.7.2.1-release-unsigned.apk

これをAndroid端末のDownloadsなどのフォルダに送って、ファイラなどで実行するとインストールが始まります。
(あらかじめ「提供元不明のアプリのインストール」を許可しておいてください)