「Pythonでスマホアプリを開発したい」
「アプリをGoogle Playなどで公開したい」
この記事は、上記のように考える人に向けた内容となっています。
結論から言うと、KivyとBuildozerを利用します。
本記事の内容
- Buildozerとは?
- Buildozerのシステム要件
- Buildozerのインストール
- Buildozerの動作確認(apk作成)
それでは、上記に沿って解説していきます。
Buildozerとは?
Buildozerの理解には、Kivyのことを知っておく必要があります。
Kivyについては、次の記事で解説しています。
このKivyで開発したアプリをKivyアプリと呼びます。
そして、Kivyアプリのままではスマホにインストールできません。
ただし、例外があります。
その例外については次の記事で解説しています。
でも、その例外ではGoogle PlayやApple Storeでアプリを公開することができません。
そもそも、例外ですからね。
では、KivyアプリをGoogle Playなどで公開したい場合にはどうすればいいのか?
それは、単純に公開できる形(パッケージ)にすればいいのです。
もっと言うと、ビルドします。
ここで、やっとBuildozerの説明ができます。
Buildozerとは、Kivyアプリをパッケージにビルドするためのツールです。
ビルドできるのは、Andoroid用アプリとiOS用アプリとなります。
Buildozerは、下記のプロジェクトを利用してビルドを実現しています。
Android | python-for-android |
iOS | kivy-ios |
ただし、kivy-iosはまだまだ開発フェーズです。
まだ、実用レベルではないと言うことになります。
そのため、現状でBuildozerはAndroid専用と言えます。
この記事でも、Android向けのapkを作成していきます。
以上、Buildozerについての説明でした。
次は、Buildozerのシステム要件を確認します。
Buildozerのシステム要件
現時点(2021年4月)でのBuildozerの最新バージョンは、1.2.0となります。
この最新バージョンは、2020年7月2日にリリースされています。
サポートOSに関しては、以下です。
- Linux
- macOS
Windowsには、対応していません。
そして、LinuxはUbuntuでテストが行われているようです。
そのため、公開されているインストール手順はUbuntu 20.04 (64bit)向けの内容になります。
今回は、同じバージョンのOSを利用します。
おそらく、Ubuntu 18.04でも大丈夫だとは思いますけどね。
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"
そして、サポート対象となるPythonのバージョンは以下。
- Python 3.6
- Python 3.7
- Python 3.8
Python 3.9が、対象に入っていません。
でも、大丈夫です。
以下のバージョンでも動くことを確認できています。
$ python -V Python 3.9.4
Ubuntu 20.04でPythonが古くない限り、問題なしということです。
また、Buildozerはpython-for-androidに依存していました。
つまり、python-for-androidが動く要件を満たす必要があります。
これらはBuildozerのインストール前に入れておく必要があります。
Javaも必要となりますね。
インストールは、以下のコマンドで対応します。
sudo apt update sudo apt install -y git zip unzip openjdk-8-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev pip install --upgrade Cython==0.29.19
環境変数の追加もしておきます。
export PATH=$PATH:~/.local/bin/
以上、Buildozerのシステム要件の説明でした。
次は、Buildozerをインストールしていきます。
Buildozerのインストール
最初に、Buildozer本体のインストールです。
現状のインストール済みパッケージを確認しておきます。
$ pip list Package Version ---------- ------- Cython 0.29.19 pip 21.0.1 setuptools 49.2.1
次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip
では、Buildozerのインストールです。
Buildozerのインストールは、以下のコマンドとなります。
pip install buildozer
インストールは、そこまで時間がかかりません。
では、どんなパッケージがインストールされたのかを確認しましょう。
$ pip list Package Version ---------- ------- appdirs 1.4.4 buildozer 1.2.0 Cython 0.29.19 distlib 0.3.1 filelock 3.0.12 pexpect 4.8.0 pip 21.0.1 ptyprocess 0.7.0 setuptools 49.2.1 sh 1.14.1 six 1.15.0 virtualenv 20.4.4
依存するパッケージが、同時にインストールされています。
Cythonも一緒にインストールしてくれればいいのですけどね。
以上、Buildozerのインストールでした。
Buildozerの動作確認(apk作成)
Buildozerの動作確認は、次の処理ごとに確認していきます。
- プロジェクトの準備
- 設定ファイルの作成
- ビルド
それぞれを下記で説明します。
プロジェクトの準備
プロジェクト=アプリ
このように考えても問題ありません。
まず、適当なディレクトリを用意します。
そのディレクトリに移動します。
$ mkdir sample $ cd sample
次に、Kivyで開発したプログラムを用意します。
Kivyの公式サイトより。
main.py
from kivy.app import App from kivy.uix.button import Button class TestApp(App): def build(self): return Button(text='Hello World') TestApp().run()
このmain.pyをsampleディレクトリに保存。
この時点でのsampleの状況は、以下。
$ ls main.py
プロジェクトの準備が整いました。
設定ファイルの作成
Buildozerでビルドするためには、設定ファイルが必要となります。
その設定ファイルとは、buildozer.specです。
buildozer.specは以下のコマンドで作成します。
$ buildozer init File buildozer.spec created, ready to customize!
この時点でsampleの状況は、以下。
$ ls buildozer.spec main.py
buildozer.specを必要な情報で書き換えることになります。
公式では、以下の3つは変更すべきと記載されています。
- title
- package.name
- package.domain
ただ、この程度のアプリなら何も変更しなくてもビルドできます。
でも、折角なのでアプリ名をカスタマイズしましょう。
[app] # (str) Title of your application title = My Application
「title」が、アプリの名前になります。
これを次のように変更します。
title = Buildozer TEST
設定ファイルの作成まで完了です。
ビルド
ビルドは、以下のコマンドで開始できます。
ただし、初回は時間がかかることを覚悟してください。
buildozer -v android debug
ここで「android」向けにビルドすることを指定します。
この段階で、apkを作成するために必要なモノがインストールされます。
例えば、以下のようなモノです。
他にもたくさんあります。
- python-for-android
- Android ANT
- Android SDK
- Android NDK
これらをダウンロード・インストールしていきます。
そのため、時間がかかります。
また、途中で以下のような同意確認があります。
すべて、「y」としてください。
January 16, 2019 --------------------------------------- Accept? (y/N):
ビルドが上手くいくと、次のような表示で終わります。
Applying Java source code patches... Applying patch: src/patches/SDLActivity.java.patch # Android packaging done! # APK myapp-0.1-armeabi-v7a-debug.apk available in the bin directory
ここで、sampleディレクトリの状況を確認します。
$ ls bin buildozer.spec main.py
binディレクトリが、追加されています。
この中にapkがあるとメッセージで表現されています。
$ ls bin/ myapp-0.1-armeabi-v7a-debug.apk
確かに、apkが作成されていますね。
これにてビルドが完了です。
まとめ
作成したapkは、実機に取り込めます。
インストールすると、次のようなアイコンで表示されます。
このアイコンは、buildozer.specに設定することで変更可能です。
以上、Buildozerの動作確認の説明でした。