WSL2(Ubuntu)でBuildozerをインストールするための管理人用の検証メモです。依存関係やバージョンの違いによる検証結果を書いてます。
Python3.12でdistutilsライブラリが非推奨
Python3.12以降ではBuildozerが使用しているdistutilsライブラリが非推奨になり、setuptoolsライブラリに統合されています。これに合わせてBuldozer1.5.1dev0(GitHubで公開されてます)で修正されているようです。
distutilsライブラリによる影響
distutilsライブラリのインポート文が記述されているPythonファイルが下記の場所にあります。
[<仮想環境フォルダー>/lib/<Pythonバージョン>/site-packages/buildozer/targets/android.py]
40行目に下記のインポート文があります。
from distutils.version import LooseVersion
Buldozer1.5.1dev0の修正箇所
buildozerr1.5.1dev0で修正された部分は他にもあると思いますが、少なくとも上記の記述は消去されています。代替としてsetuptoolsライブラリを使う方法も必要ありません。
代替としてsetuptoolsライブラリを使う方法
上記のコードを下記に変更し、setuptoolsライブラリを使う方法もあるみたいですが、この影響かどうかはわかりませんが上手くいかなかったです。
#from distutils.version import LooseVersion
from setuptools._distutils.version import LooseVersion
pip install setuptools
libtinfo5パッケージが使えなくなった
libtinfo5のパッケージはUbuntu23.04以降では提供されなくなりました。
libtinfo5はBuildozer公式サイトの方でインストールするパッケージに指定されていますが、これはUbontu24.4では「Unable to locate package libtinfo5」と表示されてインストールできません。
libtinfo5は、ncurses(new curses)パッケージの一部でlibtinfo5は、古いバージョンのncursesに関連しているようです。ncursesは、端末制御ライブラリで、ウィンドウの作成や描画、キーボード制御などテキストベースのUIを作成するパッケージです。新しいバージョンのncursesではUbuntu22.4以降ではlibncurses6が標準インストールされています。libtinfo5と6とでは互換性がないみたいです。libncurses6とlibtinfo6のどちらが必要なのかわかりませんが両方インストールしました。
WSL2Ubuntuのバージョンの違い
Ubuntuのバージョンの違いによって影響があるようです。
Ubuntu24.04.1
Ubuntu 24.04.1ではPython3.12.3が[usr/bin]にインストールされています。
python3.12.7 + buildozer1.5.1dev0 + libtinfo6
libncurses5とlibtinfo6をインストールしないで進めた。「Aidl not found」で処理が停止する。
# Check that aidl can be executed
# build-tools folder not found /home/user/.buildozer/android/platform/android-sdk/build-tools
# Search for Aidl
# Aidl not found, please install it.
libncurses5とlibtinfo6とAidlをインストールして再度やり直したら、処理が進んだけど今度はglibc(GNU C Library)関連のエラーが多発して停止する。
function-like macro '__GNUC_PREREQ' is not defined
python3.10.15 / python3.11.10 + buildozer1.5.0 + libtinfo6
libncurses5とlibtinfo6をインストールしないでbuildozer1.5.1dev0をインストールして進めたが、「Aidl not found」と怒られた。
libncurses5とlibtinfo6をインストールしてbuildozer1.5.0に変更したら、Aidleのエラーは表示されなかった。しかし、やはりglibc(GNU C Library)関連のエラーが多発して停止する。
function-like macro '__GNUC_PREREQ' is not defined
Ubuntu24.04.1結論
Ubuntu24.4以降ではBuildozerは使えない。もはや原因が多すぎて特定できないので諦めました。
Ubuntu 22.04.5で試した
Ubuntu22.04.5ではPython3.10.12が[usr/bin]にインストールされています。
python3.12.7 + buildozer1.5.1dev0 + libtinfo5
libncurses5とlibtinfo5のインストールしないで進めたら、「Aidl not found」と怒られた。
libncurses5とlibtinfo5のインストール&アップデートをして進めたら、apk作成に成功した。(アップデートされたのは、多分libncurses6)
python3.11.10 + buildozer1.5.0 + libtinfo5
libncurses5とlibtinfo5のインストール&アップデートも手順に入れて進めたらapk作成に成功した。(アップデートされたのは、多分libncurses6)エラーの原因がこれかは特定できていません。
Ubuntu22.04.5結論
Ubuntu22.04.5であればBuildozerはインストール可能。ただし、依存関係が正しくないとエラーで停止する。
検証する場合、作成されたフォルダーを削除したい場合は下記。
- /home/<ユーザー名>/にある.buildozerと.androidのフォルダー
- アプリコードを置いたフォルダー内の.buildozerフォルダー
フォルダーを削除するかcleanコマンドでビルド情報を削除してやり直してください。
buildozer android clean
Android NDKのバージョン
python-for-androidによるAndroid NDKの推奨バージョンは25bです。現在の最新はLTSバージョでr27cです。buildozer.specでバージョン指定できる項目があったので試してみました。
- r25c:インストール可能
- r26d以降:謎のエラーで停止
その他のエラー
Pythonコードを「main.py」にしないと怒られる。buildozer.specで設定項目があるかもしれない。
BUILD FAILURE: No main.py(c) found in your app directory. This
file must exist to act as the entry point for you app. If your app is
started by a file with a different name, rename it to main.py or add a
main.py that loads it.
下記は表示されたりされなかったり・・・・不明。
# WARNING: Config token app android.sdk is deprecated and ignored, but you set value 34
まとめ
Buildozerインストールは簡単ではないので、初心者にとっては大きな問題です。Ubuntu22の場合は比較的インストールしやすいかもしれません。以下の記事でインストール方法を手順化しましたのでBuildozerのインストールでエラーが多発する場合は試してみて下さい。Buildozerインストール方法、Androidアプリにapk、aabに変換する方法、Buildozerのspecファイルの設定方法については下記の記事も合わせてご覧ください。
Comment