【Ubuntu22.04】【Kivy】Python3でAndroidアプリケーション開発

2024の記事を全く書いてなかったので書きます。年内なのでまだセーフですね!(2024/12/31)

Androidアプリケーションの開発というと「Android SDK」「Android Studio」を使うのがド定番だと思うのですが、Pythonで作る方法もあるとのことなので、Kivyを入れて試してみます。

今使っているPCはZorin OSの16.3なので、実質Ubuntu22.04ということで、その扱いで書きます。
 

1.pipのインストール

用意したZorin OSはほぼ何も弄っていないので、pipのインストール。
なお、pythonはデフォルトで3.8.10が入っていました。

$ sudo apt install python3-pip

2.Kivyのインストール

KivyはPythonGUIライブラリらしい。PythonGUIアプリを使う際のものになるので、AndroidアプリをPythonで作りたいと言ってもこれを使わずとも別のやり方はあると思われる。が、簡単に調べるとだいたいKivyを使った紹介が多いので、前例に習って同じようにインストールしてみます。
pipでインストールすると、実際にはKivy以外にもいろいろインストールされるらしい。

$ pip3 install kivy
(略)
Downloading filetype-1.2.0-py2.py3-none-any.whl (19 kB)
Installing collected packages: pygments, Kivy-Garden, docutils, filetype, kivy

 

3.Buildozerのインストール

Android端末で実行するためのapkファイルを作成するビルドツール。
こいつでKivyで作ったアプリケーションをAndroid端末で実行できるようにします。

$ pip3 install buildozer
(略)
Successfully installed buildozer-1.5.0 distlib-0.3.9 filelock-3.16.1 platformdirs-4.3.6 sh-2.1.0 virtualenv-20.28.0

・関連ツールのインストール
buildozerだけでは動かないらしいので、関連ツールもインストール。PATHも通します。

$ sudo apt install -y git zip unzip openjdk-17-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev

$ pip3 install Cython==0.29.33 virtualenv

・PATHの追加

$ export PATH=$PATH:~/.local/bin/

5.プログラムの作成

ディレクトリを切ってプログラムを作ります。いつものHello Worldで。

~$ mkdir program
~$ cd program

~/program $ vi main.py
import kivy

from kivy.app import App
from kivy.uix.label import Label

class MyApp(App):
    def build(self):
            return Label(text="Hello World!")

if __name__ == '__main__':
    MyApp().run()

6.ビルドの実行

プログラムを作成したらビルドを実行します。

・ビルドの実施

~/program$ buildozer init
File buildozer.spec created, ready to customize!

実行は即座に完了します。この時点で、buildozer.specというファイルが生成されています。

~/program$ ls
buildozer.spec main.py

specファイルは実行ファイルを作成する際に使われる設定ファイルのこと。
中身を見るといろいろ書かれていますが、どうやらアプリの名前やバージョンはこちらで記述した内容が反映されるようです。

~/program$ vi buildozer.spec
# (str) Title of your application
title = My Application

# (str) Package name
package.name = myapp

# (str) Package domain (needed for android/ios packaging)
package.domain = org.test

(略)

# (str) Application versioning (method 1)
version = 0.1

(略)

# (str) Icon of the application
#icon.filename = %(source.dir)s/data/icon.png
→アイコンのパス設定は最初はコメントアウトされている

 
・実行ファイルの作成

~/program$ buildozer -v android debug
→初回はいろいろなものをダウンロードしたりで20分〜30分ぐらいかかります。

# Android packaging done!
# APK myapp-0.1-arm64-v8a_armeabi-v7a-debug.apk available in the bin directory

実行すると、binフォルダとその中でapkファイルが作成されます。

~/program$ cd bin
~/program/bin$ ls

myapp-0.1-arm64-v8a_armeabi-v7a-debug.apk

7.apkファイルをAndroid端末へ転送

apkファイルの転送はFTPを使います。ただし、今回のやり方は同じローカルネットワークにいることが前提。
Android端末ではいつも「ファイルマネージャー+」を使っているため、こちらのFTPサーバ機能を起動。PCからFTPアプリを使ってapkファイルを転送。
インストールはファイルマネージャー+にてapkファイルをタップして実行します。

8.アプリの実行

インストールが完了するとホーム画面にアプリが現れるので実行。実行するとこんな感じ。

なお、KivyはAndroidアプリケーションを作るためだけのGUIライブラリではないため、以下のようにmain.pyを実行すれば普通にGUI画面がPC上でも動きます。つまりデバッグはPCでもできるし、完成したらスマホに転送する、というのができますね。

~/program$ python3 main.py