🌝 Kivyでアプリを作る壁

2021/11/20

🌝 Kivyでアプリを作る壁  kivy を使って apk ファイルを作るまでは大げさにいうと 1日でできます(サンプルを buildozer でコンパイルすればいい)。 けれども、自分の作りたいアプリを本当に kivy を使って実現するまでは結構な時間がかかります。 それまでに一体、どのくらいの壁を乗り越える必要があるでしょうか。 ここでは、それをざっとリストアップし、メモとして残しておきたいと思います。


日本語が表示されない問題

 そのままでは、ラベルや文字入力で英数字しか使えず、日本語が使えません。 これは、現状では ipaexg.ttf などの日本語フォントを準備し、kivy のリソースでそれを使用する設定を行えば解決します。 多少余分にリソースを食いますが、仕方ありません。

Python, Kivy, Buildozer, p4aなどのバージョン

 最適な Python, Kivy, Buildozer, p4a などのバージョンは何か。 これは自分の環境でいろいろ試してみるしかないのではないでしょうか。 ちなみに私のそれは以下のようになっています。

Ubuntu 20.04 LTS
python 3.8.10
Kivy 2.0.0
Buildozer 1.2.0.dev0
p4a 2021.09.05
https://developer.android.com/studio#downloads 2020.3.1

 以下のようなメッセージによく見舞われましたが、上のソフトウェア環境に加え、buildozer.spec を適切にセットすると出なくなります。

WARNING]: ERROR: /home/raku/python/kivy/test/.buildozer/android/platform/build-x86/dists/filetest/gradlew failed!

Admobによる広告が表示されない

 私の環境では前にも書いたように kivmob ではうまくいかず、kivads を使ってようやく表示されるようになりました。

Android Studio とのつき合い方

 Android Studio は一応入れています。 しかし、それは、AVD マネージャを使って、仮想アンドロイド端末を表示するためで、apk とか aab とかいったアプリをコンパイルするためには一切使っていません。 最初の頃は、buildozer が作ってくれたプロジェクトを Android Studio で開いて修正してみたり、aab を作成するための鍵の設定を Android Studio でやったりしていたのですが、そんなことはアプリを相当にカスタマイズするつもりがあるのでなければムダだとさとりました。

aab のための鍵作成その他

 これも以前書いたように、buildozer と p4a のバージョンを整え、それに合った buildozer.spec を使ってコンパイルすればできます。

ファイルマネージャで Android 内のファイルにアクセスできない

 これは結構難題です。 というのも、API30以上の Android11 からは、Storage 内のファイルへのアクセスの制限がきつくなるからです。 私も、プロジェクト直下の AndroidManifest.xml の application タグに

android:requestLegacyExternalStorage="true"

を入れる方法をいろんな形で試してみましたが、時間のムダです。 現在の kivy とその周辺ツールは Android11 以上に関し、/storage/emulated/0 からの適切なデータ読み取りができません。 そのためには、それをするための新たな java コードを書かなければならないようです。 私は当面、その試みを止め、アプリ内の TextInput でデータを取りこむことにしました。 書き込みについては、アプリ内の領域へなら自由に書けるのでデータのセーブなどに支障はありません。

 なぜかわかりませんが、画像、音声、ムービーなら簡単に取りこめます。 私はテキストファイルを取りこみたかっただけなのですが……。

ユーザーインターフェースづくり

 確かに kivymd を使うと、きれいなインターフェースが短いコードでできあがります。 ハンバーガーメニューもありますし、HTML を CSS で加工した凝った UI が簡単に使えるようです。 ただ、私が不慣れなだけなのかもしれませんが、素の kivy で使えていた size や pos の書き方に微妙な制限がついているようです。 また kivy で普通に使えていた screen の動作も変わったようです。 動きが重くなることなども相まって、私は kivymd をやめ、取りあえず素の kivy で screen を使って多ページに対応させることにしました。 デザインはシンプルですが、すっきりと書けます。

 注意が必要なのは、screen が、最初それなしでアプリを作りはじめ、後で入れると混乱が生じることです。 最初に screen で多ページ対応の大枠を作っておいた上で、中心となるページのコーディングをした方がいいです。 変数や関数の呼び方が全部変わってきてしまうので、何百行か書いた後で直すとなるとうんざりです。 また、kv ファイルに固定値で設定を書くより、py で全てをデザインする方が柔軟にデザインできる気がします。

 何しろ、kivy でアプリを公開するには今が最悪のタイミングのようです。 11月から Google は Android11 対応のアプリしか受け付けなくなり、API29を使ってファイルアクセスの制限を受けなくする裏技は今月から使えなくなっています。 私はそれで2-3日奮闘して挫折しました。 けれども、Pythonでアプリを作る最前線にいるのは kivy だし、java の知識をもつプログラマもコミュニテイに結構いらっしゃるようなので、もう少しすれば、上記のファイルマネージャ問題も解決するでしょう。

 いくつかの苦闘は経験しましたが、以前より kivy のネット情報は格段に増えたらしく、私もおおむねポジティブな気分でアプリ作りに取り組めました。 不思議と python によるコーディングは楽しいです。 kivy に触れて 3週間ほど、今では登録したアプリも2度アップデートし、作り方の基本は飲みこめました。 まだまだ作りたいアプリがあるので、これからそれらに取りかかれたらと思っています。

参考: Kivyをインストールする

twitterシェア Facebookシェア
  コメントの注意点