Buildozer 编译简单的 android kivy 应用程序,但在打包时失败

Posted

技术标签:

【中文标题】Buildozer 编译简单的 android kivy 应用程序,但在打包时失败【英文标题】:Buildozer compiles simple android kivy application, but fails while packaging 【发布时间】:2014-04-15 17:14:02 【问题描述】:

这是 buildozer 的输出:

buildozer android debug
# Check configuration tokens
# Ensure build layout
# Check configuration tokens
# Preparing build
# Check requirements for android
# Install platform
# Apache ANT found at /root/.buildozer/android/platform/apache-ant-1.8.4
# Android SDK found at /root/.buildozer/android/platform/android-sdk-21
# Android NDK found at /root/.buildozer/android/platform/android-ndk-r9c
# Android packages already installed.
# Check application requirements
# Compile platform
# Distribution compiled.
# Build the application #1
# Package the application
Traceback (most recent call last):
  File "/bin/buildozer", line 5, in <module>
    run()
  File "/usr/lib/python2.7/site-packages/buildozer/__init__.py", line 1215, in run
        Buildozer().run_command(sys.argv[1:])
  File "/usr/lib/python2.7/site-packages/buildozer/__init__.py", line 842, in run_command
    self.target.run_commands(args)
  File "/usr/lib/python2.7/site-packages/buildozer/target.py", line 85, in run_commands
    func(args)
  File "/usr/lib/python2.7/site-packages/buildozer/target.py", line 97, in cmd_debug
    self.buildozer.build()
  File "/usr/lib/python2.7/site-packages/buildozer/__init__.py", line 178, in build
    self.target.build_package()
  File "/usr/lib/python2.7/site-packages/buildozer/targets/android.py", line 397, in build_package
    version = self.buildozer.get_version()
  File "/usr/lib/python2.7/site-packages/buildozer/__init__.py", line 554, in     get_version
    ' (looking for `1`)'.format(fn, regex))
    Exception: Unable to find capture version in ./main.py
 (looking for `__version__ = '(.*)'`)

我正在尝试编译我设计的一个简单的概率计算器。我无法发布代码,因为我将尝试发布它。但是,我愿意回答我需要让它工作的任何问题。

从 buildozer 的输出来看,我认为它正在 main.py 中寻找我不知道自己需要的行。不幸的是,我不知道那条线会是什么样子。但是,在 buildozer.spec 中,有一行这样说:

version.regex = __version__ = '(.*)'
version.filename = %(source.dir)s/main.py

第一行看起来像输出中的行,第二行引用 main.py 文件。有谁知道这些线是什么意思?我是 buildozer 的新手,所以我不太确定在这里做什么。提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

默认情况下,buildozer 会在 main.py 中查找__version__ = 'something' 形式的行。用于设置apk版本,必填项。

您可以将此行添加到 main.py,或者注释掉版本检查并取消注释 buildozer.spec 下一行中的替代版本方法。这使您可以在 buildozer.spec 本身中设置版本字符串。

【讨论】:

我会用什么来做“某事”?我是 Android 开发的新手,所以我不确定这意味着什么。像 4.4,或者 kitkat 或类似的东西? 不,这是您的应用程序自己的版本。我还没有检查我们为此使用什么android机制,但通常它会像'0.1'或'1.2'(或其他),尽管我认为它接受任意字符串(即不仅仅是数字而不仅仅是一个'。 '。 哇哦,好吧。那很容易。谢谢!不过,它又失败了。我想我缺少一些 32 位库(或者说另一个问题),但我使用 yum 运行 Fedora,而不是使用 Ubuntu 或 apt-get,所以我不确定为这些库安装什么。你知道要买哪些吗? 这应该作为一个新问题提交。【参考方案2】:

在 main.py 文件的顶部添加 version = '0.1',这样您就可以打包应用程序而不会出现任何错误。

【讨论】:

以上是关于Buildozer 编译简单的 android kivy 应用程序,但在打包时失败的主要内容,如果未能解决你的问题,请参考以下文章

Buildozer 编译 apk,但它在 android 上崩溃

无法使用 buildozer 编译 python 脚本

在 Ubuntu 12.04 上使用 Kivy 和 Buildozer 制作 apk

用 buildozer 编译后如何删除无用的文件?

python, kivy, geopy, buildozer

Buildozer 未知命令/目标 android_old