Posted at
PythonDay 10

buildozerを使ってスマホ向けKivyアプリを開発する取っ掛かり

More than 3 years have passed since last update.

pythonのクロスプラットフォーム開発ライブラリにKivyというものがあります。

Kivy自体の細かい仕組みはとかは一旦置いておいて(まだそこまで使えていません)、

Kivyが提供しているiOS/Android用パッケージを作成するまでの大まかな方法を紹介していこうと思います。


python-for-android と kivy-ios


python-for-android

Kivyのandroid向けパッケージングを行うプロジェクトです。(Google Codeにあるものとは別物らしいです)

Android SDK + NDKをベースにARM向けPythonをビルドして(=hostpytthon)、hostpythonに実際のアプリを動かす仕組みみたいです。

$ cd python-for-android

$ ./distribute.sh -m "openssl pil kivy"
$ cd dist/default
$ ./build.py --package org.test.touchtracer --name touchtracer --version 1.0 --dir ~/code/kivy/examples/demo/touchtracer debug

実行自体はそんなに難しい手順を必要としないのですが、


  • 環境変数を何個か定義しないといけない

  • Kivyアプリ実行時に必要なパッケージをAndroid向けビルドをするには、recipesにビルド用のレシピを用意しないといけない。

というあたりが少々面倒。


kivy-ios

こちらは、iOS向けのxcodeプロジェクトを作成してするプロジェクト。

$ ls 

kivyapp <- ここにKivyアプリが入っている
$ git clone https://github.com/kivy/kivy-ios
$ ./tools/build-all.sh
$ ./tools/create-xcode-project.sh kivyapp ./kivyapp

コマンド自体はpython-for-androidと同様にシンプルですし割りとあっさり実機動作の確認が出来るのですが、


  • xcoeproject がtools/ 以下に生成されてしまう。

  • 何故かxcodeproject生成時の対応端末がiPadのみになっている。

  • ApplicationDelegate 探すのが大変

  • シミュレータでは動かない。

  • pythonの標準ライブラリをかなり詰め込むらしく、ファイルが肥大化しやすい

といったのも抱えてるのが気になります。


buildozer でAndroid/iOSビルド環境をまとめて準備する

Buildozer は上記2プロジェクトをまとめてコントローする事ができるツールで、

最終的には


  • (Android側)


    • Android-SDK, NDKのダウンロード

    • SDKのtools,buildtoolsのダウンロード

    • python-for-androidのダウンロード

    • パッケージング



  • (iOS側)


    • Cythonのインストール

    • kivy-iosのダウンロード

    • xcodeprojectの生成

    • パッケージング



と言ったパッケージングに関わることの大部分を取り扱ってくれます。


インストールしてみる

PyPIにも登録されているのですが、個人的にはgithubのソースからインストールする方がいいです。(stableでは、いろいろな問題でandroid系環境構築が進みません)

$ git clone git://github.com/kivy/buildozer

$ cd buildozer
$ python setup.py install

基本的にはインストール時に使用可能になるbuildozerコマンドで大半が片付きます。

$ buildozer init

$ ls -l
(アプリのソース)
buildozer.spec <- ここにビルド/パッケージングに必要な項目を記述していきます(アプリ名、iOSのAppIDなど)
$ buildozer android debug <- android向けapkファイルのパッケージング。途中の過程もこのコマンド一発で実行してくれる
$ buildozer ios debug <- ios向けipaパッケージング。途中の過程もこのコマンド一発で実行してくれる

ね、簡単でしょ?

buildozer.specには、AndroidSDKやNDKのパスなども記述できるため、既にダウンロードしているものを使うことも可能です。

また、--profileオプションを用いて個別の変数も設定できるので細かいビルドもできます。


気をつけた方がいい点

上に書いたとおり、SDK,NDKなどのパスを指定できるのですが、何も編集せずに実行すると全部ダウンロードしようとします。

また、あくまでpython-for-androidやkivy-iosをダウンロードして、特定コントロール下のみでまとめて取り扱うため、

上の課題がまるまる残っています。

それでも、よほど変わったPythonパッケージを使わない限りKivy上でのアプリ開発に集中できるのでオススメです。


オマケ

スクリーンショット 2014-12-10 22.39.02.png

Hello worldのボタンだけ表示するアプリをパッケージングしてみた結果です。

見事にipaファイルが肥大化しました。逆にApkファイルは思いの外小さかったのが印象に残りました。