KivyアプリをAndroidアプリやiOSアプリのファイルに変換するBuildozerライブラリの設定ファイル(specファイル)のAndroid・apkファイルの設定方法を紹介します。
Androidのspecフィルの設定項目
Buildozerインストール方法については前回の記事をご覧ください。
Buildozerはiosアプリのファイルも変換できますが、今回はAndroidのみの設定を説明します。設定ファイルの書き方が正確ではない場合、エラーになって作成できなかったり、実機やエミュレーターでアプリを立ち上げると落ちる場合があります。
specファイルは変更したい項目のみ#を外します。デフォルトで#が外れている項目は変更するべき項目になります。それ以外はデフォルト値を採用して作成されるので、必要ではないのなら#を外さない方がいいです。
specファイルの書き方
specファイルの構文はPythonのconfigparserを採用しています。セクション名とキーは変更してはいけません。
# コメントはシャープ
[セクション名]
キー = 値
型を遵守する
コメントの冒頭にカッコで型が表示している場合はこの型で記述します。基本的にデフォルトで書いてある形式を守って書けば大丈夫です。
(str):string、文字列型
(int):integer、数値型(整数)
(bool):boolean、真偽値(True,False)
(list) :カンマ区切りのリスト
コメントはインラインにしない
specファイル文末にも書かれていますが、値の横にコメント文を書いてはいけません。
title = My Application # これはコメントではなく、titleの一部になる
値を複数行にしてインデントしない
下記のようにインデントをすると文字列の一部と認識されてしまいます。値を改行して複数行に跨いだり、インデントしてはいけません。
title = My Application
ーsub titleー # 値を改行してはいけない
title = My Application
package.name = myapp # これはすべてtitleの一部になってしまう
apkを作成するための設定する項目
apkだけではなくアプリの基本の設定項目になります。
アプリのタイトルを設定する
アプリのタイトルを設定します。日本語でも大丈夫ですが機種依存文字や絵文字は使用しない方がいいです。
title = アプリだよ
ここで指定した値はアプリの名前として表示されます。
パッケージ名を設定する
パッケージのファイル名になるので日本語の使用はやめましょう。パッケージ名は下記のようになり、冒頭の「myapp」がここで指定した値が入ります。
myapp2-0.1-arm64-v8a_armeabi-v7a-debug.apk
package.name = myapp
ドメインを設定する
モバイルアプリでは世界中のアプリを識別するための一意の名前としてドメイン名が使われます。AABを作成する場合は必須項目になります。AABでGoogle Playで配布する場合は、不適切なドメイン名は許可されないのでドメインを取得する必要があります。
package.domain = org.test
パッケージ化するファイルを設定する
パッケージに含まれるファイルの拡張子の全てをリストで記述します。ソースコード、リソースファイルの全てをリストで記述します。
source.include_exts = py,kv,java,kt,png,jpg,gif,mp4,mp3,ttf,ttc
この項目のコメントに「すべてのファイルを含めるには空白のままにする」と書いてありますが、これは機能しませんでした。ファイルは作られますがアプリを起動すると落ちます。正確に記述したほうがいいです。
アプリのバージョンを設定する
アプリのバージョンを指定します。
version = 0.1
使用するライブラリを設定する
使用している外部ライブラリは記述する必要があります。Pytnon標準ライブラリは書かなくても大丈夫です。
requirements = python3,kivy,pango,pandas,numpy
KivyMDの場合。
requirements = python3,kivy,kivymd,materialyoucolor,exceptiongroup,asyncgui,asynckivy
# これは上手くいかなかった
requirements = python3,kivy,https://github.com/kivymd/KivyMD/archive/master.zip,materialyoucolor,exceptiongroup,asyncgui,asynckivy
Presplashを設定する
Presplashはアプリ起動中に表示されるローディング画像です。デフォルトだとKivyアイコンになってしまうので作成した方がいいです。
Presplash画像はAndroidの仕様に従って作りましょう。
presplash.filename = %(source.dir)s/icons/android-icon.jpg
上記のパスは下記の構成の場合の例
Project folder
∟fonts folder
∟file.ttf
∟icons folder
∟file.jpg
main.py
kv.kv
lottie形式のPresplashの場合は下記を設定する
android.presplash_lottie = "path/to/lottie/file.json"
背景色を設定する場合は、RGB16進数またはARGBの16進数またはカラー名で指定します。使用できるカラー名はこの項目のコメントを参照してください。
android.presplash_color = olive
アプリアイコン・アダプティブアイコンを設定する
アプリアイコン、アダプティブアイコンはホーム画面などに表示されるアイコンになります。こちらもデフォルトではKivyアイコンが表示されるので作成した方がいいです。
アイコン画像はAndroidの仕様に従って作ります。
アプリアイコンは下記の項目で設定します。
presplash.filename = %(source.dir)s/icons/app-icon.jpg
上記のパスは下記の構成の場合の例
Project folder
∟fonts folder
∟file.ttf
∟icons folder
∟file.jpg
main.py
kv.kv
アダプティブアイコンは下記の項目で設定します。(Android APIレベル26以上)
icon.adaptive_foreground.filename = %(source.dir)s/icons/adaptive-icon-fg.png
icon.adaptive_background.filename = %(source.dir)s/icons/adaptive-icon-bg.png
起動した時の画面の向きを設定する
起動した時の画面の向きを設定する。アプリに許可する画面の向きの設定だと思ったんですが回転できてしまうのでどちらかは不明。
- portrait: 縦向き
- landscape: 横向き
- portrait-reverse: 逆縦向き
- landscape-reverse: 逆横向き
orientation = portrait
target APIとAndroid sdkのバージョンを設定する
Android マニフェストファイルのtargetApiに相当します。アプリケーションとAndroidの仕様と合わせてなるべく高いバージョンを指定します。APIに関連する詳細はAndroidの仕様を確認してください。
コメントの#は外してください。
android.api = 34
使用するAndroid SDKのバージョンを同じ値にします。
android.sdk = 34
最小APIレベルを設定する
Androidアプリの最小APIレベルを設定します。コメントの#を外してください。
android.minapi = 28
使用するAndroid NDK APIのバージョンを同じ値にします。
android.ndk_api = 28
Android NDKのバージョン
Android NDKのバージョンはデフォルトで25bになってますが、それ以上のバージョンを使用するとエラーが発生します。25のラストバージョンの25cは使用できます。
android.ndk = 25c
Python for Android
BuildozerはPython for Android (旧名称:p4a)を使用しているので、これの機能は大体使用できると思います。
specファイルの日本語訳
Buildozer1.5.1付属のspecファイル全文の日本語訳になります。その他の設定はこれをご覧ください。丁寧に説明されているので多分わかると思います。
# このspec設定ファイルは、Buildozerにビルドされるアプリの要件を伝えます。
#
# .iniファイルの構文にほぼ従っている。
# 詳細はファイルの最後をご覧ください。
[app]
# (str) アプリケーションのタイトル
title = My Application
# (str) パッケージ名
package.name = myapp
# (str) パッケージドメイン(android/iosのパッケージングに必要)
package.domain = org.test
# (str) main.pyが存在するソースコード
source.dir = .
# (list) インクルードするソース・ファイル(すべてのファイルを含めるには空白のままにします)
source.include_exts = py,png,jpg,kv,atlas
# (list) パターンマッチングを使用したパッケージに含めるファイルリスト
#source.include_patterns = assets/*,images/*.png
# (list) 除外するソースファイル(何も除外しない場合は空のままにする)
#source.exclude_exts = spec
# (list) 除外するディレクトリのリスト (何も除外しない場合は空のまま)
#source.exclude_dirs = tests, bin, venv
# (list) パターンマッチによる除外リスト
# 接頭辞に'./'を付けないでください。
#source.exclude_patterns = license,images/*/*.jpg
# (str) アプリケーションのバージョン管理(方法1)
version = 0.1
# (str) アプリケーションのバージョン管理(方法2)
# version.regex = __version__ = ['"](.*)['"]
# version.filename = %(source.dir)s/main.py
# (list) アプリケーションの要件
# カンマ区切り 例:requirements = sqlite3,kivy
requirements = python3,kivy
# (str) 要件のカスタム ソース フォルダー
# レシピを使用して、任意の要件のカスタムソースを設定します
# requirements.source.kivy = ../../kivy
# (str) アプリケーションのPresplash
#presplash.filename = %(source.dir)s/data/presplash.png
# (str) アプリケーションのアイコン
#icon.filename = %(source.dir)s/data/icon.png
# (list) 対応する画面の向き
# 設定可能なオプション: landscape, portrait, portrait-reverse or landscape-reverse
orientation = portrait
# (list) 宣言するサービスのリスト
# これは現在のところAndroidのサービスにのみ関連している。
# 各サービスは、名前(有効なJavaのクラス名, 最初の文字は大文字)とコロンで構成されます。
# その後にコロンが続き,
# その後に起動するPythonスクリプトの名前(.pyファイル)が続きます。
# この後に, フォアグラウンドサービスの場合は「:foreground 」を
# オプションで付けることができます。
# オプションで「:foreground:sticky 」が続きます。
# デフォルトはバックグラウンドサービスです。
# バウンドサービスはサポートされていません.
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY
#
# OSX Specific
# MacOSX用の設定
#
#
# author = © Copyright Info
# 使用するKivyバージョン
osx.kivy_version = 2.2.0
#
# Android specific
# Android用の設定
#
# (bool) アプリケーションをフルスクリーンにするかどうかを指定する。
fullscreen = 0
# (string) Presplashの背景色(アンドロイドツールチェーン用)
# サポートされるフォーマットは以下の通りです: #RRGGBB #AARRGGBB または以下の名前のいずれか
# red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,
# darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,
# olive, purple, silver, teal.
#android.presplash_color = #FFFFFF
# (string) Lottieフォーマットを使用したPresplashアニメーション。
# サンプルは https://lottiefiles.com/ を、
# 一般的なドキュメントはhttps://airbnb.design/lottie/ を参照してください。
# Lottieファイルは、Adobe After EffectやSynfigのような様々なツールを使って作成することができます。
#android.presplash_lottie = "path/to/lottie/file.json"
# (str) アプリケーションの適応アイコン(実行時にAndroid APIレベルが26以上の場合に使用される)
#icon.adaptive_foreground.filename = %(source.dir)s/data/icon_fg.png
#icon.adaptive_background.filename = %(source.dir)s/data/icon_bg.png
# (list) Permissions
# (サポートされているすべての構文とプロパティについては
# https://python-for-android.readthedocs.io/en/latest/buildoptions.html を参照)
#android.permissions = android.permission.INTERNET, (name=android.permission.WRITE_EXTERNAL_STORAGE;maxSdkVersion=18)
# (list) features (uses-feature -タグをマニフェストに追加)
#android.features = android.hardware.usb.host
# (int) ターゲットとするAndroid APIは、可能な限り高くすること。
#android.api = 31
# (int) APK / AABがサポートする最小限のAPI。
#android.minapi = 21
# (int) 使用するAndroid SDKのバージョン
#android.sdk = 20
# (str) 使用するAndroid NDKのバージョン
#android.ndk = 23b
# (int) 使用するAndroid NDK API。これはアプリがサポートする最小限のAPIで、
# 通常はandroid.minapi.APIと一致する必要があります。
#android.ndk_api = 21
# (str) Android NDKディレクトリ(空の場合は自動的にダウンロードされます。)
#android.ndk_path =
# (str) Android SDKディレクトリ(空の場合は自動的にダウンロードされます。)
#android.sdk_path =
# (str) ANTディレクトリ(空の場合は自動的にダウンロードされます。)
#android.ant_path =
# (bool) Trueの場合、Android SDKのアップデートをスキップする。
# インターネットからの過剰なダウンロードを回避したり、時間を節約したりするのに便利です。
# アップデートの期限が迫っていてパッケージのテストやビルドを行いたい場合などに使用する。
# android.skip_update = False
# (bool) buildozerの初回実行時にライセンスが表示されます。
# Trueの場合、自動的にSDKライセンス契約を自動的に受け入れる。
# これは自動化のみを目的としています。
# Falseに設定されている場合、承諾するかの入力が要求される。
# android.accept_sdk_license = False
# (str) Androidのエントリーポイント、KivyベースのアプリはデフォルトでOK
#android.entrypoint = org.kivy.android.PythonActivity
# (str) Android Activityを実装するJavaクラスのパッケージパスを含む完全な名前。
# PythonActivityの代わりにカスタムJavaクラスを設定するには、
# android.entrypointと一緒にこのパラメータを使う。
#android.activity_class_name = org.kivy.android.PythonActivity
# (str) AndroidManifest.xmlの<manifest>要素内に直接書き込むための追加のxmlファイルを指定。
# そのパラメータを使用して、カスタムXMLコードを読み込むファイル名を指定します。
#android.extra_manifest_xml = ./src/android/extra_manifest.xml
# (str) AndroidManifest.xmlの<manifest><application>
# タグ内に直接記述する追加のxmlファイルを指定します。
# そのパラメータを使用して、カスタムXML引数を読み込むファイル名を指定します。
#android.extra_manifest_application_arguments = ./src/android/extra_manifest_application_arguments.xml
# (str) Python Service を実装する Java クラスのパッケージパスを含む完全な名前。
# そのパラメータを使って PythonService を継承したカスタム Java クラスを設定します。
#android.service_class_name = org.kivy.android.PythonService
# (str) Androidアプリのテーマ、KivyベースのアプリはデフォルトでOK
# android.apptheme = "@android:style/Theme.NoTitleBar"
# (list) プロジェクト全体のホワイトリストに登録するパターン
#android.whitelist =
# (bool) Trueの場合、ホームアプリ(ランチャーアプリ)として表示されます。
# android.home_app = False
# (str) カスタムホワイトリストファイルへのパス
#android.whitelist_src =
# (str) カスタムブラックリストファイルへのパス
#android.blacklist_src =
# (list) pyjniusがそのクラスにアクセスできるように、libsに追加するJava .jarファイルのリスト。
# jarファイルのリストです。不要なjarを追加しないでください。
# 余分なjarはビルドプロセスを遅くします。ワイルドカードでのマッチングを許可します。
# 例: OUYA-ODK/libs/*.jar
#android.add_jars = foo.jar,bar.jar,path/to/more/*.jar
# (list) androidプロジェクトに追加するJavaファイルのリスト
# (javaまたはファイルを含むディレクトリ)
#android.add_src =
# (list) Android AARアーカイブの追加
#android.add_aars =
# (list) 下記のファイルまたはディレクトリをapk assetsディレクトリに置く。
# また、assetsは'source.include_exts'にある必要はない。
# 1) android.add_assets = source_asset_relative_path
# 2) android.add_assets = source_asset_path:destination_asset_relative_path
#android.add_assets =
# (リスト) 下記のファイルやディレクトリをapk resディレクトリに置く。
# このオプションは3通りの使い方があり, 値は':'で区切ることができます。
# いくつかの例を示します。
# 1) リソースに追加するファイル, リソース名には['a-z','0-9','_']が含まれます。
# android.add_resources = my_icons/all-inclusive.png:drawable/all_inclusive.png
# 1) リソースに追加するファイル。
# 2) ディレクトリ、ここでは'legal_icons'には1種類のリソースが含まれていなければならない。
# android.add_resources = legal_icons:drawable
# 3) 'legal_resources'には1つ以上のディレクトリが必要です。
# それぞれのリソースの種類: drawable, xml, etc....
# android.add_resources = legal_resources.
#android.add_resources =
# (list) 追加するGradleの依存関係
#android.gradle_dependencies =
# (bool) AndroidXのサポートを有効にする。
# android.gradle_dependencies'に'androidx'パッケージが含まれている場合に有効にする。
# android.enable_androidx requires android.api >= 28に
# 'androidx'パッケージ、またはKotlinソースからのパッケージが含まれている場合に使用する。
#android.enable_androidx = True
# (list) Javaコンパイルオプションを追加する
# 例えば、'android.gradle_dependencies'オプションを使って特定のJavaライブラリをインポートする際に必要になることがあります。
# 詳しくは https://developer.android.com/studio/write/java8-support を参照。
# android.add_compile_options = "sourceCompatibility = 1.8", "targetCompatibility = 1.8"
# (list) 追加するGradleリポジトリ{android.gradle_dependenciesによっては必要}。
# 二重引用符で囲んでください。
# 例: android.gradle_repositories = "maven { url 'https://repo.spring.io/release' }"
#android.add_gradle_repositories =
# (list) 追加するパッケージングオプション
# https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/PackagingOptions を参照してください。
# gradle_dependencies のコンフリクトを解決するために必要となることがある。
# 二重引用符で囲んでください。
# 例: android.add_packaging_options = "exclude 'META-INF/common.kotlin_module'", "exclude 'META-INF/*.kotlin_module'"
#android.add_packaging_options =
# (list) マニフェストにアクティビティとして追加するJavaクラス。
#android.add_activities = com.example.ExampleActivity
# (str) OUYAコンソールのカテゴリ。GAMEまたはAPPのいずれかを選択してください。
# 空欄の場合、OUYAのサポートは有効になりません。
#android.ouya.category = GAME
# (str) OUYA Consoleアイコンのファイル名。732x412のpng画像でなければなりません。
#android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png
# (str) <activity>タグにインテント・フィルターとして含めるXMLファイル。
#android.manifest.intent_filters =
# (list) これらのファイルをsrc/main/res/xml/にコピーしてください。
# (intent-filtersなどで使用します)。
#android.res_xml = PATH_TO_FILE,
# (str) メインのアクティビティに設定するlaunchMode
#android.manifest.launch_mode = standard
# (str) メインのアクティビティに設定するscreenOrientation。
# 有効な値は以下を参照してください。
# https://developer.android.com/guide/topics/manifest/activity-element
#android.manifest.orientation = fullSensor
# (list) libs/armeabiにコピーするAndroid追加ライブラリ
#android.add_libs_armeabi = libs/android/*.so
#android.add_libs_armeabi_v7a = libs/android-v7/*.so
#android.add_libs_arm64_v8a = libs/android-v8/*.so
#android.add_libs_x86 = libs/android-x86/*.so
#android.add_libs_mips = libs/android-mips/*.so
# (bool) 画面を表示し続けるかどうかを指定する。
# これをTrueに設定する場合、WAKE_LOCKパーミッションを追加することを忘れないでください。
#android.wakelock = False
# (list) 設定するAndroidアプリケーションのメタデータ(key=value形式)
#android.meta_data =
# (list) 追加するAndroidライブラリプロジェクト
# 自動的にproject.propertiesに追加される
#android.library_references =
# (list) <uses-library>タグを使用してAndroidManifest.xmlに追加されるAndroid共有ライブラリ
#android.uses_library =
# (str) 使用するAndroid logcatフィルター
#android.logcat_filters = *:S python:D
# (bool) Androidのlogcatはアクティビティのpidのログだけを表示する
#android.logcat_pid_only = False
# (str) Androidのadb追加引数
#android.adb_args = -H host.docker.internal
# (bool) libpymodules.soを作る代わりにライブラリをコピーする。
#android.copy_libs = 1
# (list) ビルドするAndroidのアーカイブを指定します。
# 以前は `android.arch` でした。(同時に複数のアーキのビルドをサポートしていなかった)
android.archs = arm64-v8a, armeabi-v7a
# (int) 自動versionCode計算をオーバーライドする(build.gradleで使用)
# これはアプリのバージョンとは異なるので、自分が何をしているかわかっている場合のみ編集してください。
# android.numeric_version = 1
# (bool) Android autoのバックアップ機能が利用可能 (Android API >=23)
android.allow_backup = True
# (str) カスタムバックアップルール用XMLファイル(公式自動バックアップドキュメントを参照)
# android.backup_rules =
# (str) AndroidManifest.xml ファイルに変数を挿入する必要がある場合、
# manifestPlaceholders プロパティを使用します。
# このプロパティはキーと値のペアのマップを受け取ります。(文字列を介して)
# 使用例 : android.manifest_placeholders = [myCustomUrl:\"org.kivy.customurl\"]
# android.manifest_placeholders = [:]
# (bool) .pyファイルのバイトコンパイルをスキップする
# android.no-byte-compile-python = False
# (str) リリースモード用のアプリのパッケージに使用されるフォーマット
#(aabまたはapkまたはaar)
# android.release_artifact = aab
# (str) デバッグモード用のアプリのパッケージに使用されるフォーマット(apkまたはaar)
# android.debug_artifact = apk
#
# Python for android (p4a) specific
# Python for android の設定
#
# (str) チェックアウトに使用するpython-for-androidのURL
#p4a.url =
# (str) p4a.urlが指定されなかった場合に使用するpython-for-androidフォーク、デフォルトはupstream (kivy)
#p4a.fork = kivy
# (str) 使用するpython-for-androidブランチ。デフォルトは master。
#p4a.branch = master
# (str) python-for-android固有のコミットを使用します。デフォルトはHEADで、p4a.branch内になければなりません。
#p4a.commit = HEAD
# (str) python-for-android git clone ディレクトリ
#p4a.source_dir =
# (str) 作成したrecipeがある場合、python-for-androidがレシピを探すディレクトリ。
#p4a.local_recipes =
# (str) p4a用フックのファイル名
#p4a.hook =
# (str) アンドロイドのビルドに使用するブートストラップ
# buildozer android p4a -- bootstraps を実行すると、有効な値のリストが表示される。
# p4a.bootstrap = sdl2
# (int) 明示的に --port= p4a 引数を指定する場合のポート番号 (例: bootstrap flask)
#p4a.port =
# --use-setup-pyと--ignore-setup-pyのどちらをp4aに渡すかを制御する。
# 「将来的には」 --use-setup-pyがp4aのデフォルトの動作になる予定です。
# この設定をfalseにすると--ignore-setup-pyが適用され、trueにすると--use-setup-pyが適用されます。
# 注意: これは一般的な setuptools の統合です。
# しかし、source.include_extsに 「toml 」を追加する必要があります。
#p4a.setup_py = false
# (str) pythonforandroid.toolchainを起動する際に渡す追加のコマンドライン引数
#p4a.extra_args =
#
# iOS specific
# iOS用の設定
#
# (str) カスタムkivy-iosフォルダへのパス
#ios.kivy_ios_dir = ../kivy-ios
# 代わりに、gitチェックアウトのURLとブランチを指定します。
# ios.kivy_ios_url = https://github.com/kivy/kivy-ios
ios.kivy_ios_branch = master
# もう一つのプラットフォーム依存:ios-deploy
# カスタムチェックアウトを使用する場合はコメントを外します。
#ios.ios_deploy_dir = ../ios_deploy
# もしくはURLとブランチを指定
# ios.ios_deploy_url = https://github.com/phonegap/ios-deploy
ios.ios_deploy_branch = 1.12.2
# (bool) コードに署名するかどうか
ios.codesign.allowed = false
# (str) デバッグ版の署名に使用する証明書の名前
# 利用可能なIDのリストを取得する。
#ios.codesign.debug = "iPhone Developer: <lastname> <firstname> (<hexstring>)"
# (str) デバッグ版の署名に使用する開発チーム
#ios.codesign.development_team.debug = <hexstring>
# (str) リリース・バージョンの署名に使用する証明書の名前
#ios.codesign.release = %(ios.codesign.debug)s
# (str) リリース版の署名に使用する開発チーム
#ios.codesign.development_team.release = <hexstring>
# (str) インストールする.ipaファイルを指すURL
# このオプションは `display_image_url` と `full_size_image_url` オプションと一緒に定義する必要があります。
#ios.manifest.app_url =
# (str) ダウンロード中に表示されるアイコン(57x57px)を指すURL。
# このオプションは `app_url` と `full_size_image_url` オプションと一緒に定義する必要があります。
#ios.manifest.display_image_url =
# (str) iTunesが使用する大きなアイコン(512x512px)を指すURL。
# このオプションは `app_url` と `display_image_url` オプションと一緒に定義する必要があります。
#ios.manifest.full_size_image_url =
[buildozer]
# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 2
# (int) buildozerをroot権限で実行した場合の警告表示 (0 = False, 1 = True)
warn_on_root = 1
# (str) build artifact storageへのパス。specファイルへの絶対パスまたは相対パス
# build_dir = ./.buildozer
# (str) ビルド出力(例:.apk、.aab、.ipa)ストレージへのパス。
# bin_dir = ./bin
#-----------------------------------------------------------------------------
# このファイルを使用する際の注意事項
#
# Buildozerはこのファイルを読み込むためにPythonのConfigSpecを使用します。
# 補間も含めた基本的な構文については、以下を参照してください。
# https://docs.python.org/3/library/configparser.html#supported-ini-file-structure
#
# Warning: コメントは「インライン」では使用できません。
# [app]
# title = My Application # これはコメントではなく、タイトルの一部になるので注意すること
#
# Warning: インデントされたテキストは複数行の文字列として扱われる。
# [app]
# title = My Application
# package.name = myapp # これはすべてタイトルの一部になってしまうので注意すること
#
# Buildozerの.specファイルにはいくつかの追加機能があります。
#
# Buildozerはリストをサポートしています。
# [app]
# source.include_exts = py,png,jpg
# # ↑これがリスト
#
# [app:source.include_exts]
# py
# png
# jpg
# # ↑これはリストの代替構文です。
#
# Buildozerのオプション名は、他の.iniファイルとは異なり、大文字と小文字を区別します。
#
# Buildozerは環境変数によるオプションのオーバーライドをサポートしている。
# 環境変数名を SECTION_OPTION とすると、
# specファイル内の値をオーバーライドし、ファイル内の値を上書きします。
#
# Buildozerはプロファイルによるオプションのオーバーライドをサポートしています。
# 例えばHDコンテンツを含まないデモ版のアプリケーションをデプロイしたいとします。
# 最初にタイトルを変更して「(demo) 」を追加し,
# 除外ディレクトリを拡張してHDコンテンツを削除することができます。
# そして、HDコンテンツを削除するために除外するディレクトリを拡張します.
#
# [app@demo]
# title = My Application (demo)
#
# [app:source.exclude_patterns@demo]
# images/hd/*
#
# 次に、「demo 」プロファイルを使ってコマンドラインを実行します。
#
# buildozer --profile demo android debug
#
# 環境変数のオーバーライドはプロファイルのオーバーライドよりも優先されます。
Androidアプリケーション起動時に落ちる場合の確認方法
Androidアプリを起動すると落ちる現象はいくつかの原因があると思いますが、リソースファイルのパスがちゃんと取得出来ていないことやライブラリ情報が正しくないなどが挙げられます。
アプリが落ちる原因
- source.include_extsに使用しているリソースファイルが正しく記述されているか確認する。
- コード内でこれらのファイル参照を絶対パスにする。
- ライブラリ情報が正しく記述されていない。
source.include_exts = py,kv,java,kt,png,jpg,gif,mp4,mp3,ttf,ttc
requirements = python3,kivy,pango,pandas,numpy
絶対パスの取得方法は下記を参考にしてみてください。
リソースファイルが取れているか確認する
apkファイルは圧縮ファイルなので拡張子を「zip」などにすれば中身を確認することができます。ソースコードとリソースファイルはassetsフォルダーに格納されるのでそこにリソースファイルが無ければファイルが取得できないということになります。
- apkをWindowsの方にコピーし拡張子を「zip」に変更する
- 上記を解凍する(Windowsの機能だと右クリックで[全て展開])
- assetsフォルダー内にprivate.tar圧縮ファイルがあるのでこれも解凍する
- アプリ内で使用しているリソースファイルが全て入っているか確認する
- リソースが格納されていなければ、コード内のパスとsource.include_extsの項目を確認する
Comment