【问题标题】:Kivy application does not work on AndroidKivy 应用程序无法在 Android 上运行
【发布时间】:2019-08-03 11:20:38
【问题描述】:

我想使用 kivy 在 Python 中为 Android 编写简单的应用程序。可悲的是,当我开始示例代码时,我只看到闪屏,几秒钟后应用程序完成工作。调试存在很大问题,因为 Linux Mint 上的 adb 没有检测到我的设备。

有人可以看看我的code 并告诉我原因吗? 要构建应用程序,我使用 buildozer。您还可以查看 create_env 脚本来检查所有依赖项。

最好的问候。 德拉昆

编辑:

我开始调试我的应用程序。结论:

  • buildozer + python3 + kivy 是个坏主意
  • 如果我在 text 属性为 str 时使用 kivy.uix.button.Button 则出现异常“AttributeError: 'str' object has no attribute 'decode'”
  • 如果我在 text 属性为字节时使用 kivy.uix.button.Button,则会出现异常“ValueError: Button.text accept only str”

看起来像没有解决方案的循环。想知道我什么时候应该报告?

异常位于 .buildozer/android/platform/build/build/python-installs/pad/android/init.py" 文件中,因此它看起来不像 kivy 和/或 buildozer 异常。

【问题讨论】:

  • 你需要让 adb 工作或发明一些其他方法来获取正常的 python 调试信息,没有其他方法就足够了。

标签: android kivy python-3.6


【解决方案1】:

我使用了 python-for android 工具并遇到了同样的错误。但在我的情况下,应用程序根本没有运行 - 从启动屏幕崩溃。最后,我找到了解决方案。你可以试试同样的方法。

所以我的管道是 python3 + python-for-android(p4a 工具,python-for-android,来自 master 分支)+ kivy (1.10.1)

有一个文件“_android.pyx”用于 android 构建配方(您可以通过命令 p4a recipes 查看可用的 p4a 配方的完整列表)。该文件可能由 Buildozer 使用,并且在 APK 构建过程中完全由 P4A 使用。你需要修复它。

您可以通过以下方式在 Ubuntu 中找到它的位置(例如):

sudo updatedb
locate _android.pyx

它的路径应该是这样的:

~/.local/lib/python3.6/site-packages/pythonforandroid/recipes/android/src/android/_android.pyx

应该有一个字符串:

python_act = autoclass(JAVA_NAMESPACE.decode('utf-8') + u'.PythonActivity')

所以你应该改变它 - 像这样:

python_act = autoclass(str(JAVA_NAMESPACE) + u'.PythonActivity'),

或者只是使用一些硬代码:

python_act = autoclass("org/kivy/android/PythonActivity")

或者来源中可能有其他 decode() 用法。

原因:Python2 和 Python3 之间的差异 - decode() 方法可用于 Python 2 或 3 中的等效二进制数据类型,但它不能被 Python 2 和 3 之间的文本数据类型一致地使用因为 Python 3 中的 str 没有方法 decode 函数在 Python3 中有不同的实现。更多细节在这里: pyporting features issues p4a's github

希望对你有所帮助。

【讨论】:

  • 或者你可以从 master 重新加载 python-for-android,看起来他们几天前重新修复了这种错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
相关资源
最近更新 更多