diff --git a/packaging/buildozer.spec b/packaging/buildozer.spec index 06ca7b0..3e711d2 100644 --- a/packaging/buildozer.spec +++ b/packaging/buildozer.spec @@ -1,3 +1,8 @@ +# This .spec config file tells Buildozer an app's requirements for being built. +# +# It largely follows the syntax of an .ini file. +# See the end of the file for more details and warnings about common mistakes. + [app] # (str) Title of your application @@ -12,19 +17,20 @@ package.domain = org.kivy # (str) Source code where the main.py live source.dir = ../kivy_pong_demo -# (list) Source files to include (let empty to include all the files) +# (list) Source files to include (leave empty to include all the files) source.include_exts = py,png,jpg,kv,atlas # (list) List of inclusions using pattern matching #source.include_patterns = assets/*,images/*.png -# (list) Source files to exclude (let empty to not exclude anything) +# (list) Source files to exclude (leave empty to not exclude anything) #source.exclude_exts = spec -# (list) List of directory to exclude (let empty to not exclude anything) +# (list) List of directory to exclude (leave empty to not exclude anything) #source.exclude_dirs = tests, bin, venv # (list) List of exclusions using pattern matching +# Do not prefix with './' #source.exclude_patterns = license,images/*/*.jpg # (str) Application versioning (method 1) @@ -48,10 +54,17 @@ requirements = python3,kivy # (str) Icon of the application #icon.filename = %(source.dir)s/data/icon.png -# (str) Supported orientation (one of landscape, sensorLandscape, portrait or all) +# (list) Supported orientations +# Valid options are: landscape, portrait, portrait-reverse or landscape-reverse orientation = portrait -# (list) List of service to declare +# (list) List of services to declare +# This is currently only relevant to Android services. +# Each service consists of a name (a valid Java class name, with the first letter capitalized) +# followed by a colon, followed by the name of the Python script (.py file) that should be +# launched. This is optionally followed by ":foreground" for foreground services or +# ":foreground:sticky" for sticky foreground services. The default is a background service. +# Bound services are not supported. #services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY # @@ -61,11 +74,8 @@ orientation = portrait # # author = © Copyright Info -# change the major version of python used by the app -osx.python_version = 3 - # Kivy version to use -osx.kivy_version = 1.9.1 +osx.kivy_version = 2.2.1 # # Android specific @@ -87,30 +97,32 @@ fullscreen = 0 # Lottie files can be created using various tools, like Adobe After Effect or Synfig. #android.presplash_lottie = "path/to/lottie/file.json" +# (str) Adaptive icon of the application (used if Android API level is 26+ at runtime) +#icon.adaptive_foreground.filename = %(source.dir)s/data/icon_fg.png +#icon.adaptive_background.filename = %(source.dir)s/data/icon_bg.png + # (list) Permissions -#android.permissions = INTERNET +# (See https://python-for-android.readthedocs.io/en/latest/buildoptions/#build-options-1 for all the supported syntaxes and properties) +#android.permissions = android.permission.INTERNET, (name=android.permission.WRITE_EXTERNAL_STORAGE;maxSdkVersion=18) # (list) features (adds uses-feature -tags to manifest) #android.features = android.hardware.usb.host # (int) Target Android API, should be as high as possible. -#android.api = 27 +#android.api = 31 -# (int) Minimum API your APK will support. +# (int) Minimum API your APK / AAB will support. #android.minapi = 21 # (int) Android SDK version to use #android.sdk = 20 # (str) Android NDK version to use -#android.ndk = 19b +#android.ndk = 23b # (int) Android NDK API to use. This is the minimum API your app will support, it should usually match android.minapi. #android.ndk_api = 21 -# (bool) Use --private data storage (True) or --dir public storage (False) -#android.private_storage = True - # (str) Android NDK directory (if empty, it will be automatically downloaded.) #android.ndk_path = @@ -120,7 +132,7 @@ fullscreen = 0 # (str) ANT directory (if empty, it will be automatically downloaded.) #android.ant_path = -# (bool) If True, then skip trying to update the Android sdk +# (bool) If True, then skip trying to update the Android SDK # This can be useful to avoid excess Internet downloads or save time # when an update is due and you just want to test/build your package # android.skip_update = False @@ -129,10 +141,26 @@ fullscreen = 0 # agreements. This is intended for automation only. If set to False, # the default, you will be shown the license when first running # buildozer. -# android.accept_sdk_license = False +android.accept_sdk_license = True # (str) Android entry point, default is ok for Kivy-based app -#android.entrypoint = org.renpy.android.PythonActivity +#android.entrypoint = org.kivy.android.PythonActivity + +# (str) Full name including package path of the Java class that implements Android Activity +# use that parameter together with android.entrypoint to set custom Java class instead of PythonActivity +#android.activity_class_name = org.kivy.android.PythonActivity + +# (str) Extra xml to write directly inside the element of AndroidManifest.xml +# use that parameter to provide a filename from where to load your custom XML code +#android.extra_manifest_xml = ./src/android/extra_manifest.xml + +# (str) Extra xml to write directly inside the tag of AndroidManifest.xml +# use that parameter to provide a filename from where to load your custom XML arguments: +#android.extra_manifest_application_arguments = ./src/android/extra_manifest_application_arguments.xml + +# (str) Full name including package path of the Java class that implements Python Service +# use that parameter to set custom Java class which extends PythonService +#android.service_class_name = org.kivy.android.PythonService # (str) Android app theme, default is ok for Kivy-based app # android.apptheme = "@android:style/Theme.NoTitleBar" @@ -140,6 +168,9 @@ fullscreen = 0 # (list) Pattern to whitelist for the whole project #android.whitelist = +# (bool) If True, your application will be listed as a home app (launcher app) +# android.home_app = False + # (str) Path to a custom whitelist file #android.whitelist_src = @@ -159,23 +190,46 @@ fullscreen = 0 # (list) Android AAR archives to add #android.add_aars = +# (list) Put these files or directories in the apk assets directory. +# Either form may be used, and assets need not be in '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 = + +# (list) Put these files or directories in the apk res directory. +# The option may be used in three ways, the value may contain one or zero ':' +# Some examples: +# 1) A file to add to resources, legal resource names contain ['a-z','0-9','_'] +# android.add_resources = my_icons/all-inclusive.png:drawable/all_inclusive.png +# 2) A directory, here 'legal_icons' must contain resources of one kind +# android.add_resources = legal_icons:drawable +# 3) A directory, here 'legal_resources' must contain one or more directories, +# each of a resource kind: drawable, xml, etc... +# android.add_resources = legal_resources +#android.add_resources = + # (list) Gradle dependencies to add #android.gradle_dependencies = +# (bool) Enable AndroidX support. Enable when 'android.gradle_dependencies' +# contains an 'androidx' package, or any package from Kotlin source. +# android.enable_androidx requires android.api >= 28 +#android.enable_androidx = True + # (list) add java compile options # this can for example be necessary when importing certain java libraries using the 'android.gradle_dependencies' option # see https://developer.android.com/studio/write/java8-support for further information # android.add_compile_options = "sourceCompatibility = 1.8", "targetCompatibility = 1.8" # (list) Gradle repositories to add {can be necessary for some android.gradle_dependencies} -# please enclose in double quotes +# please enclose in double quotes # e.g. android.gradle_repositories = "maven { url 'https://kotlin.bintray.com/ktor' }" #android.add_gradle_repositories = -# (list) packaging options to add +# (list) packaging options to add # see https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html # can be necessary to solve conflicts in gradle_dependencies -# please enclose in double quotes +# please enclose in double quotes # e.g. android.add_packaging_options = "exclude 'META-INF/common.kotlin_module'", "exclude 'META-INF/*.kotlin_module'" #android.add_packaging_options = @@ -192,9 +246,16 @@ fullscreen = 0 # (str) XML file to include as an intent filters in tag #android.manifest.intent_filters = +# (list) Copy these files to src/main/res/xml/ (used for example with intent-filters) +#android.res_xml = PATH_TO_FILE, + # (str) launchMode to set for the main activity #android.manifest.launch_mode = standard +# (str) screenOrientation to set for the main activity. +# Valid values can be found at https://developer.android.com/guide/topics/manifest/activity-element +#android.manifest.orientation = fullSensor + # (list) Android additional libraries to copy into libs/armeabi #android.add_libs_armeabi = libs/android/*.so #android.add_libs_armeabi_v7a = libs/android-v7/*.so @@ -228,8 +289,9 @@ fullscreen = 0 # (bool) Copy library instead of making a libpymodules.so #android.copy_libs = 1 -# (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64 -android.arch = armeabi-v7a +# (list) The Android archs to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64 +# In past, was `android.arch` as we weren't supporting builds for multiple archs at the same time. +android.archs = arm64-v8a, armeabi-v7a # (int) overrides automatic versionCode computation (used in build.gradle) # this is not the same as app version and should only be edited if you know what you're doing @@ -247,6 +309,15 @@ android.allow_backup = True # Usage example : android.manifest_placeholders = [myCustomUrl:\"org.kivy.customurl\"] # android.manifest_placeholders = [:] +# (bool) Skip byte compile for .py files +# android.no-byte-compile-python = False + +# (str) The format used to package the app for release mode (aab or apk or aar). +# android.release_artifact = aab + +# (str) The format used to package the app for debug mode (apk or aar). +# android.debug_artifact = apk + # # Python for android (p4a) specific # @@ -258,9 +329,12 @@ android.allow_backup = True #p4a.fork = kivy # (str) python-for-android branch to use, defaults to master -#p4a.branch = master +p4a.branch = release-2022.12.20 -# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github) +# (str) python-for-android specific commit to use, defaults to HEAD, must be within p4a.branch +#p4a.commit = HEAD + +# (str) python-for-android git clone directory #p4a.source_dir = # (str) The directory in which python-for-android should look for your own build recipes (if any) @@ -270,6 +344,7 @@ android.allow_backup = True #p4a.hook = # (str) Bootstrap to use for android builds +# Run "buildozer android p4a -- bootstraps" for a list of valid values. # p4a.bootstrap = sdl2 # (int) port number to specify an explicit --port= p4a argument (eg for bootstrap flask) @@ -282,6 +357,10 @@ android.allow_backup = True # setup.py if you're using Poetry, but you need to add "toml" to source.include_exts. #p4a.setup_py = false +# (str) extra command line arguments to pass when invoking pythonforandroid.toolchain +#p4a.extra_args = + + # # iOS specific @@ -298,7 +377,7 @@ ios.kivy_ios_branch = master #ios.ios_deploy_dir = ../ios_deploy # Or specify URL and branch ios.ios_deploy_url = https://github.com/phonegap/ios-deploy -ios.ios_deploy_branch = 1.10.0 +ios.ios_deploy_branch = 1.12.2 # (bool) Whether or not to sign the code ios.codesign.allowed = false @@ -316,6 +395,18 @@ ios.codesign.allowed = false # (str) The development team to use for signing the release version #ios.codesign.development_team.release = +# (str) URL pointing to .ipa file to be installed +# This option should be defined along with `display_image_url` and `full_size_image_url` options. +#ios.manifest.app_url = + +# (str) URL pointing to an icon (57x57px) to be displayed during download +# This option should be defined along with `app_url` and `full_size_image_url` options. +#ios.manifest.display_image_url = + +# (str) URL pointing to a large icon (512x512px) to be used by iTunes +# This option should be defined along with `app_url` and `display_image_url` options. +#ios.manifest.full_size_image_url = + [buildozer] @@ -328,43 +419,57 @@ warn_on_root = 1 # (str) Path to build artifact storage, absolute or relative to spec file # build_dir = ./.buildozer -# (str) Path to build output (i.e. .apk, .ipa) storage +# (str) Path to build output (i.e. .apk, .aab, .ipa) storage # bin_dir = ./bin -# ----------------------------------------------------------------------------- -# List as sections +#----------------------------------------------------------------------------- +# Notes about using this file: # -# You can define all the "list" as [section:key]. -# Each line will be considered as a option to the list. -# Let's take [app] / source.exclude_patterns. -# Instead of doing: +# Buildozer uses a variant of Python's ConfigSpec to read this file. +# For the basic syntax, including interpolations, see +# https://docs.python.org/3/library/configparser.html#supported-ini-file-structure # -#[app] -#source.exclude_patterns = license,data/audio/*.wav,data/images/original/* +# Warning: Comments cannot be used "inline" - i.e. +# [app] +# title = My Application # This is not a comment, it is part of the title. # -# This can be translated into: +# Warning: Indented text is treated as a multiline string - i.e. +# [app] +# title = My Application +# package.name = myapp # This is all part of the title. # -#[app:source.exclude_patterns] -#license -#data/audio/*.wav -#data/images/original/* +# Buildozer's .spec files have some additional features: # - - -# ----------------------------------------------------------------------------- -# Profiles +# Buildozer supports lists - i.e. +# [app] +# source.include_exts = py,png,jpg +# # ^ This is a list. +# +# [app:source.include_exts] +# py +# png +# jpg +# # ^ This is an alternative syntax for a list. +# +# Buildozer's option names are case-sensitive, unlike most .ini files. +# +# Buildozer supports overriding options through environment variables. +# Name an environment variable as SECTION_OPTION to override a value in a .spec +# file. +# +# Buildozer support overriding options through profiles. +# For example, you want to deploy a demo version of your application without +# HD content. You could first change the title to add "(demo)" in the name +# and extend the excluded directories to remove the HD content. # -# You can extend section / key with a profile -# For example, you want to deploy a demo version of your application without -# HD content. You could first change the title to add "(demo)" in the name -# and extend the excluded directories to remove the HD content. +# [app@demo] +# title = My Application (demo) # -#[app@demo] -#title = My Application (demo) +# [app:source.exclude_patterns@demo] +# images/hd/* # -#[app:source.exclude_patterns@demo] -#images/hd/* +# Then, invoke the command line with the "demo" profile: # -# Then, invoke the command line with the "demo" profile: +# buildozer --profile demo android debug # -#buildozer --profile demo android debug +# Environment variable overrides have priority over profile overrides.