Pythonでスマホアプリ(apk)を開発する【Buildozer】

Pythonでスマホアプリ(apk)を開発する【Buildozer】 サーバー

「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は、下記のプロジェクトを利用してビルドを実現しています。

Androidpython-for-android
iOSkivy-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」としてください。

すべて、「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の動作確認の説明でした。

タイトルとURLをコピーしました