Kivy 应用程序无法在 Android 上运行

Kivy application does not work on Android(Kivy 应用程序无法在 Android 上运行)
本文介绍了Kivy 应用程序无法在 Android 上运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

I want write simple application in Python for Android using kivy. Sadly when I start example code I see only splash screen and few second later application finish work. There is a huge problem with debugging because adb on Linux Mint does not detect my device.

谁能看看我的代码并告诉我为什么?要构建应用程序,我使用 buildozer.您还可以查看 create_env 脚本来检查所有依赖项.

Can someone look at my code and tell my why? To build application I use buildozer. You can also see create_env script to check all dependencies are there.

最好的问候.德拉昆

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

I started debugging my application. Conclusion:

  • 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"

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

It looks like loop with no solution. Some idea when I should report it?

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

Exception is in .buildozer/android/platform/build/build/python-installs/pad/android/init.py" file so it does not look like kivy and/or buildozer exception.

推荐答案

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

I've used python-for android tool and faced with the same errors. But in my case, app didn't run at all - crashed from splash screen. Finally, I've found a solution. You can try the same way.

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

So my pipeline was python3 + python-for-android (p4a tool, python-for-android, from master branch) + kivy (1.10.1)

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

There is a file "_android.pyx" for android building recipe (full list of avaliable p4a recipes you can see by command p4a recipes). This file is, possibly, used by Buildozer, and exactly used by P4A during APK building procedure. You need to fix it.

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

You may find it's location in Ubuntu (for example) via:

sudo updatedb
locate _android.pyx

它的路径应该是这样的:

It's path should be something like:

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

应该有一个字符串:

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

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

so you should change it - something like this:

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

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

or just use some hardcode:

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

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

Or there might be the other decode() usage in sources.

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

The reason: differences between Python2 and Python3 - the decode() method is usable on the equivalent binary data type in either Python 2 or 3, but it can’t be used by the textual data type consistently between Python 2 and 3 because str in Python 3 doesn’t have the method decode function has different realisation in Python3. More details are here: pyporting features issues p4a's github

希望对你有所帮助.

这篇关于Kivy 应用程序无法在 Android 上运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

Change the style of AlertDialog(更改 AlertDialog 的样式)
Pop up dialog in Android home screen(在 Android 主屏幕中弹出对话框)
How to display an existing ListFragment in a DialogFragment(如何在 DialogFragment 中显示现有的 ListFragment)
When to use Android PopupWindow vs Dialog(何时使用 Android PopupWindow vs Dialog)
Android: Close dialog window on touch(Android:触摸时关闭对话框窗口)
Android - Executing a custom listview in a custom dialog properly(Android - 在自定义对话框中正确执行自定义列表视图)