Python+Kivy入門

KivyアプリをBuildozerでAndroidアプリのAPK・AABに変換する方法

この記事は約11分で読めます。

前回のMSL2とBuildozerインストールに引き続き今回はKivyアプリをBuildozerでAndroidアプリのAPKやAABを作成する方法を説明します。iOSアプリ形式(IPA)も作成できますが今回は除外します。

Buildozerで変換できるファイル

BuildozerはAndroidアプリのAPKやAABやiOSアプリのIPAを作成できます。AndroidモジュールライブラリのAARも作成できるみたいなんですがうまくいきませんでした。APKは実機やエミュレータで実行できるファイルになります。AABは実機やエミュレーターで実行することはできません。Google Play公開用になります。BuildozerでのIPAの変換はMacOSでのみ動作します。これは署名をXCode経由でしか行えないためです。IPAは検証していませんので動作するかどうかはわかりません。(おそらく作成はできると思います)

Buildozerでモバイルアプリを作る方法

この記事では既に仮想環境を作成し、Buildozerがインストールされている事を前提とします。

MSL2でBuildozerをインストールする方法については下記の記事をご覧ください。

モバイルアプリに変換するには、Android SDKとNDKが必要です。しかし、これはBuildozerが自動的にダウンロードしてくれます。自分でインストールして、設定ファイルにバージョンを指定することもできますが、固定バージョンでないとおそらくエラーになると思います。

テスト用アプリの準備

事前にTest用アプリを用意し、Pythonファイルを「main.py」にしてください。「main.py」にしておかないとエラーで停止するので注意してください。テスト用アプリにはフォントファイルや画像ファイルなどのリソースファイルを使わないシンプルなアプリが良いです。

本当に作れるのかテストするだけのアプリなのでhello worldアプリが好ましいです。Buildozerはいくつものライブラリを使用して作られているせいもあって依存関係が難しく、環境構築が上手くいってないとエラーが発生して作成できません。また設定ファイルの記述間違いがあってもエラーが発生し作成できない場合があります。エラーが発生した時の問題を切り分けるために、まずはAPK、AABが正常に作れるかテストをしてください

  1. フォントファイルや画像ファイルなどのリソースを含まない単純なテスト用アプリにする。
  2. Pythonファイル名を「main.py」にする。
  3. kvファイルがある場合は同じ階層に置く。

Ubuntuのフォルダー内にテスト用アプリを置く

MSLはコマンド操作が基本ですが、WindowsのエクスプローラーからUbuntuのフォルダーにアクセスできます。

Ubuntuフォルダーにコード置く手順
  • Step1
    エクスプローラーからUbuntuのフォルダーにアクセス

    エクスプローラーからUbuntuのフォルダーにアクセスします。

    WindowsエクスプローラーのUbuntuのフォルダー
  • Step2
    任意の場所にプロジェクトフォルダーを作成する

    アプリを置くためのフォルダーを作ります。[/home/<ユーザー名>]フォルダーがWindowsの[C:\Users\<ユーザー名>]フォルダーに相当します。このフォルダーは権限がないので常用フォルダーにするといいと思います。今回は[/home/<ユーザー名>]フォルダーに「test-app」フォルダーを作ります。

    プロジェクトフォルダーの作成
  • Step3
    アプリファイルを置く

    プロジェクトフォルダー内にアプリのファイルを全て置きます。

    プロジェクトフォルダーのアプリファイル

APKファイルの作成

モバイルアプリの作成手順はAPKやAAB、IPAにしても、設定ファイル(specファイル)の内容やコマンドが少し異なりますが、基本的な作成方法はどれも同じになります。

  1. プロジェクトフォルダを作成。
  2. アプリの設定をする「buildozer.spec」ファイルを生成する。
  3. ビルドする。
  4. ビルド情報を削除する。(必要な場合)
apkの作成手順
  • Step1
    プロジェクトフォルダーへ移動する

    仮想環境モードで行ってください。

    プロジェクトフォルダのパスを入力してください。

    cd /home/user/test-app
  • Step2
    Buildozerのspecファイルを生成する

    コマンドを実行するとBuildozerのビルドするための設定やAndroidアプリの情報を設定するspecファイルを生成します。

    buildozer -v init

    今いるフォルダー(つまり/home/user/test-app)に「buildozer.spec」ファイルが生成されます。

  • Step3
    buildozer.specの編集

    今回はテスト用のため、設定ファイルを編集しません。

  • Step4
    apk生成

    Android APKをビルドします。初回は必要なライブラリをダウンロードするため時間がかかる場合があります。最初の方にライセンス承認するために2回停止します。その際は「y」を入力し、「Enter」を押します。

    buildozer -v android debug

    下記のメッセージが表示されていたら成功しています。赤字のメッセージで止まっていたらエラーが発生しています。

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

    デフォルト設定ではapkファイルはプロジェクトフォルダー内のbinフォルダーに作成されます。

  • Step5
    ビルド情報のクリア

    エラーが発生した場合は必ずビルド情報のキャッシュを削除してください。これが残ってると次回余計なエラーが発生する可能性があるので注意してください。これをしない場合は次回の実行時にキャッシュ情報を使用してビルドするのでとても早く終わります。同じ内容のspecファイルを使用する場合に便利です。

    buildozer android clean

AABファイルの作成

次にaabファイルを作成します。aabファイルはGoogle Play経由の配布用形式なので実機やエミュレーターでは実行できません。aabファイルには署名情報を付加する必要がありますが今回はテストなので署名情報は設定しません。

aabの作成手順
  • Step1
    プロジェクトフォルダーへ移動する

    仮想環境モードで行ってください。

    プロジェクトフォルダのパスを入力してください。

    cd /home/user/test-app
  • Step2
    buildozer.specの編集

    今回はテスト用のため、設定ファイルを編集しません

  • Step3
    AAB作成

    AABを作成する場合はreleaseオプションになります。AABはリリース用なのでspecファイルにドメインの設定が必要になります。specファイルのドメイン設定が初期値のままだと下記のようにエラーで停止します。

    # ERROR: Trying to release a package that starts with org.test
    #
    # The package.domain org.test is, as the name intented, a test.
    # Once you published an application with org.test,
    # you cannot change it, it will be part of the identifier
    # for Google Play / App Store / etc.
    #
    # So change package.domain to anything else.
    #
    # If you messed up before, set the environment variable to force the build:
    # export BUILDOZER_ALLOW_ORG_TEST_DOMAIN=1

    今回はテストなのでメッセージの通りに、一時的に環境変数を設定して実行します。

    export BUILDOZER_ALLOW_ORG_TEST_DOMAIN=1
    buildozer -v android release

    1回目ほど時間はかからないと思います。下記のメッセージが表示されていたら成功しています。赤字のメッセージが表示されていた場合はエラーが発生しています。

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

    デフォルト設定ではaabファイルはプロジェクトフォルダー内のbinフォルダーに作成されます。

  • Step4
    ビルド情報のクリア

    エラーが発生した場合はビルド情報を削除します。

    buildozer android clean

apkファイルの確認

APKファイルが作成されたので実機やエミュレータで確認することができます。ただし、何も設定していないのでデフォルト設定で起動できる環境になります。下記の環境より上のバージョンの場合はAABファイルが作れることを確認してから再作成しましょう。

  • デフォルト設定のAndroid11(APIレベル30)より上の実機やエミュレーターでは動作しません。

APKファイルの動作確認ついての説明は割愛しますが、エミュレーターはAndroid Studioをお勧めします。エミュレーター単体で使用できて、画面サイズやOSバージョンも設定できるのでとても便利です。エミュレーターにapkをドラッグアンドドロップするとインストールすることができます。

specファイルの設定項目

specファイルは使いまわすことができますが、APK用とAAB用に分けることをお勧めします。specファイルの設定方法については次の記事で紹介します。

ログの確認方法

エラーが出た場合はまずログを確認します。

Buildozerのログをファイルで出力する方法

Buildozerは環境構築が上手くいってない場合と、ファイル変換の過程で出るエラーのパターンがあります。

致命的なエラーがない限り進みます。現にログでERRORと表示されてるのに作成が完了しています。それから、エラーの数が多いとその時点でストップするようです。赤字のメッセージで止まっていた場合はエラーが発生していますが、その赤いメッセージの上あたりがエラーで止まった箇所になります。なのでその辺を確認すればERRORかWARNINGのメッセージが表示されています。表示されていない時もあります。環境構築が上手くいってない場合はエラーメッセージは表示されていなかったり、見当違いのエラーメッセージが表示されるので特定は困難かもしれません。環境構築が上手くいってる場合は割と的確なメッセージが表示されます。

コンソール画面を確認すればログは表示されていますが、ファイルに出力したい場合は下記のコマンドで実行します。テキストファイルをコンソール画面上にドラッグ&ドロップするとそのファイルのパスが入力できます。

buildozer -v android [debug,release] > [text filename] 2>&1

テキストファイル名の拡張子は何でも大丈夫です。下記の場合はプロジェクトフォルダー内にログが作られます。

➀標準ログとエラーログの両方を出力する

buildozer -v android debug > buildozer_debug.log 2>&1

➁エラーログのみ出力する

buildozer -v android debug 2> buildozer_error.log

ログを出力するとコンソール画面にログが表示されなくなります。初回のdebug時はライセンス確認のため2回停止するので、エクスプローラーをF5で更新してログの書き込みサイズを確認し、サイズが増えていなければ停止していますのでyとEnterを押してください。➀の標準とエラーログを出力した場合で1500KB位(うろ覚え)で停止します。正常に完了した場合総サイズは6MB位です

adbコマンドでAndroidアプリのログを確認する

Android studioのエミュレーターを使用していた場合の確認方法になります。エミュレーターを立ち上げた状態でadbコマンドを使用して端末を操作することができます。これはUSBケーブルなどで実機と繋いだ状態でも端末を操作することができます。(実機と繋ぐ設定が必要)

adbコマンドを実行するには環境変数を設定する必要があります。この説明については割愛させて頂きます。下記はPower shellで一時的にadbが使えるようにする環境変数の設定です。ターミナルを閉じると設定も消えます。以下コマンドはPower shell。

$ENV:Path+=";C:\Users\<ユーザー名>\AppData\Local\Android\Sdk\platform-tools"

エミュレーター上でアプリを起動してから下記を実行するとログが取れます。テキストファイルをコンソール画面上にドラッグ&ドロップするとそのファイルのパスが入力できます。pythonが吐き出したログでソートしています。

adb logcat | select-string python > <ログへのパス>
adb logcat | select-string python > "C:\Users\user\Desktop\adb-log.txt"

ログは追記されるのでログ情報をクリアしたい場合は下記。

adb logcat -c

ログを出力するとコンソール入力ができなくなるので、入力できる状態にするにはCtrl+cを押してください。

Comment

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