将 Python 版本和要求放入 buildozer 规范文件的正确方法是什么?
What is the correct way to put Python version and requirements in buildozer spec file?
使用 buildozer 为 Android 或 iOS 构建 Kivy 应用程序时,这确实令人困惑。文档中未提供将依赖项和要求放入 buildozer 规范文件的正确方法。
现在我使用 Kivy 框架构建了一个应用程序,我想构建一个 .apk 文件以将其部署到 Android。我正在使用 buildozer 构建 apk 文件,因为它是文档中所示的推荐方式。
应用程序 运行 在我的笔记本电脑上完美运行,buildozer 日志没有显示任何错误,事实上它让我在工作结束时成功构建。不幸的是,在我的 android phone 上部署 apk 文件并安装后,该应用程序崩溃了。 UI根本不显示,点击图标后直接闪退
由于没有日志错误,我假设这与我构建应用程序的方式或更准确地说是 buildozer 规范文件有关。这是我的 buildozer 规范文件:
[app]
# (str) Title of your application
title = Overall Translator
# (str) Package name
package.name = overallTranslator
# (str) Package domain (needed for android/ios packaging)
package.domain = org.nidhal.overallTranslator
# (str) Source code where the main.py live
source.dir = .
# (list) Source files to include (let empty to include all the files)
source.include_exts = py,png,jpg,kv,atlas,ttf
# (list) List of inclusions using pattern matching
source.include_patterns = assets/*,images/*.png, font/*.ttf
# (list) Source files to exclude (let empty to not exclude anything)
source.exclude_exts = spec, txt, md, gitignore
# (list) List of directory to exclude (let empty to not exclude anything)
source.exclude_dirs = tests, bin, venv
# (list) List of exclusions using pattern matching
#source.exclude_patterns = license,images/*/*.jpg
# (str) Application versioning (method 1)
#version = 0.1
# (str) Application versioning (method 2)
version.regex = __version__ = ['"](.*)['"]
version.filename = %(source.dir)s/main.py
# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = hostpython3==3.7.8,python3==3.7.8,kivy==1.11.1, beautifulsoup4, bs4, certifi,chardet,docutils, future, idna, Kivy-Garden, Pygments, requests, six, soupsieve, urllib3, deep-translator, arabic-reshaper, python-bidi, openssl
# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes
# requirements.source.kivy = ../../kivy
# (list) Garden requirements
#garden_requirements =
# (str) Presplash of the application
#presplash.filename = %(source.dir)s/data/presplash.png
# (str) Icon of the application
#icon.filename = %(source.dir)s/data/icon.png
# (str) Supported orientation (one of landscape, sensorLandscape, portrait or all)
orientation = portrait
# (list) List of service to declare
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY
#
# OSX Specific
#
#
# 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
#
与任何项目一样,我的也有依赖项,我应该将需求放入规范文件中。这很令人困惑,因为没有描述如何以正确的方式做到这一点。例如,我有仅适用于 python >= 3.7 的库,我如何在要求中提供它?我在上面的规范文件中的做法是否正确?
此外,我是否以正确的方式提供了每个包的版本?当我在 phone 上打开应用程序时,我发布了 ,其中提供了构建和调试模式的日志输出,但我没有收到任何有用的信息。该问题包含日志。
what is the correct way to put python version and requirements in buildozer spec file?
对此的直接回答是使用 buildozer.spec 行 requirements = hostpython3==3.7.8,python3==3.7.8
的“您完成它的方式”。唯一需要注意的是,并非所有 python 次要版本都一定有效,我不知道 3.7.8 是否好。如果可能,最好使用默认值,在这种情况下,这将使用 Python 3.8(但您需要清理构建并再次 运行 以实现此目的)。但是,您遇到的主要问题是不良的次要版本会导致编译失败,因此这可能不是您的问题。
您的问题显然是“为什么我的应用程序崩溃了?”。我建议单独询问该问题并包括完整的 logcat 输出。这可能比猜测原因并询问原因更有成效。
使用 buildozer 为 Android 或 iOS 构建 Kivy 应用程序时,这确实令人困惑。文档中未提供将依赖项和要求放入 buildozer 规范文件的正确方法。
现在我使用 Kivy 框架构建了一个应用程序,我想构建一个 .apk 文件以将其部署到 Android。我正在使用 buildozer 构建 apk 文件,因为它是文档中所示的推荐方式。
应用程序 运行 在我的笔记本电脑上完美运行,buildozer 日志没有显示任何错误,事实上它让我在工作结束时成功构建。不幸的是,在我的 android phone 上部署 apk 文件并安装后,该应用程序崩溃了。 UI根本不显示,点击图标后直接闪退
由于没有日志错误,我假设这与我构建应用程序的方式或更准确地说是 buildozer 规范文件有关。这是我的 buildozer 规范文件:
[app]
# (str) Title of your application
title = Overall Translator
# (str) Package name
package.name = overallTranslator
# (str) Package domain (needed for android/ios packaging)
package.domain = org.nidhal.overallTranslator
# (str) Source code where the main.py live
source.dir = .
# (list) Source files to include (let empty to include all the files)
source.include_exts = py,png,jpg,kv,atlas,ttf
# (list) List of inclusions using pattern matching
source.include_patterns = assets/*,images/*.png, font/*.ttf
# (list) Source files to exclude (let empty to not exclude anything)
source.exclude_exts = spec, txt, md, gitignore
# (list) List of directory to exclude (let empty to not exclude anything)
source.exclude_dirs = tests, bin, venv
# (list) List of exclusions using pattern matching
#source.exclude_patterns = license,images/*/*.jpg
# (str) Application versioning (method 1)
#version = 0.1
# (str) Application versioning (method 2)
version.regex = __version__ = ['"](.*)['"]
version.filename = %(source.dir)s/main.py
# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = hostpython3==3.7.8,python3==3.7.8,kivy==1.11.1, beautifulsoup4, bs4, certifi,chardet,docutils, future, idna, Kivy-Garden, Pygments, requests, six, soupsieve, urllib3, deep-translator, arabic-reshaper, python-bidi, openssl
# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes
# requirements.source.kivy = ../../kivy
# (list) Garden requirements
#garden_requirements =
# (str) Presplash of the application
#presplash.filename = %(source.dir)s/data/presplash.png
# (str) Icon of the application
#icon.filename = %(source.dir)s/data/icon.png
# (str) Supported orientation (one of landscape, sensorLandscape, portrait or all)
orientation = portrait
# (list) List of service to declare
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY
#
# OSX Specific
#
#
# 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
#
与任何项目一样,我的也有依赖项,我应该将需求放入规范文件中。这很令人困惑,因为没有描述如何以正确的方式做到这一点。例如,我有仅适用于 python >= 3.7 的库,我如何在要求中提供它?我在上面的规范文件中的做法是否正确?
此外,我是否以正确的方式提供了每个包的版本?当我在 phone 上打开应用程序时,我发布了
what is the correct way to put python version and requirements in buildozer spec file?
对此的直接回答是使用 buildozer.spec 行 requirements = hostpython3==3.7.8,python3==3.7.8
的“您完成它的方式”。唯一需要注意的是,并非所有 python 次要版本都一定有效,我不知道 3.7.8 是否好。如果可能,最好使用默认值,在这种情况下,这将使用 Python 3.8(但您需要清理构建并再次 运行 以实现此目的)。但是,您遇到的主要问题是不良的次要版本会导致编译失败,因此这可能不是您的问题。
您的问题显然是“为什么我的应用程序崩溃了?”。我建议单独询问该问题并包括完整的 logcat 输出。这可能比猜测原因并询问原因更有成效。