kivy在Android上运行,有人弄过吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kivy在Android上运行,有人弄过吗相关的知识,希望对你有一定的参考价值。
在电脑上写好一个kivy程序,编译成apk后拷至手机,运行,出现kivy启动界面,随即退出。怎么查找错误原因呢?在ubuntu下运行该kivy程序(python main.py等),会打印出调试及错误信息,但在手机上怎么办?想到了adb logcat。
于是费了九牛二虎之力,将盛大bambook s1手机连到虚拟机上,执行adb logcat命令,然后执行程序,果然看到了一行错误提示:
I/python ( 4775): [DEBUG ] [Resource ] add </system/fonts> in path list
I/python ( 4775): Traceback (most recent call last):
I/python ( 4775): File "/home/kivy/myprogs/SwitchMT/main.py", line 218, in <module>
I/python ( 4775): File "/home/kivy/android/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/app.py", line 600, in run
I/python ( 4775): File "/home/kivy/myprogs/SwitchMT/main.py", line 201, in build
I/python ( 4775): File "<string>", line 15, in write
I/python ( 4775): UnicodeDecodeError: \'ascii\' codec can\'t decode byte 0xe4 in position 7: ordinal not in range(128)
该行是一条含中文字符的print语句,字串前未加u。反正以前调试用的语句,不作分析,直接去掉。再次运行,通过。终于出现了程序的kivy界面了。
再查看前面日志,却发现这么一句:
I/python ( 4775): [INFO ] Kivy v1.8.0-dev
I/python ( 4775): [INFO ] [Logger ] Record log in /mnt/sdcard/org.test.SwitchMT/.kivy/logs/kivy_13-08-04_1.txt
自己升级安装的,在ubuntu中运行时所用的kivy v1.7.1,怎么打apk包时变成了1.8.0-dev不得而知。重要的是,该程序在 /mnt/sdcard/org.test.SwitchMT/.kivy/logs下产生有日志文件!找到该目录,发现甚至连main.py都被解包了出来,而日志文件里也指明了错误, 这就是说,运行完kivy程序如果出错,只需在日志目录查看日志文件即可。省去太麻烦的调试环境了。
看了看,发现之前跑过的kivy程序也都有各自的包名下相应的目录,看来这就是kivy的运行机制,当然不知道是不是跟编译打包时加的debug选择有关系,是不是改成release就没有这些目录了呢?毕竟将py源码解出来话卡上不太安全。这就不得而知了。以后再试吧,不过目前至少是解决了查看程序出错日志的问题了,特此记录。 参考技术A 大佬,请问在手机上安装打开后闪退,查看日志说是,不能连接服务,请检查网络,请问该怎么办?要怎么才能联网?我用的是python for android
在 centos 7 上使用 SDL2 运行 kivy 1.9.1
【中文标题】在 centos 7 上使用 SDL2 运行 kivy 1.9.1【英文标题】:Run kivy 1.9.1 with SDL2 on centos 7 【发布时间】:2016-04-20 01:32:15 【问题描述】:我试图让 kivy 在 centos 7 上与 SDL2 一起工作,但是当我运行 main.py 时,我收到以下消息:
[INFO ] [Logger ] Record log in /home/etienne/.kivy/logs/kivy_16-01-14_51.txt
[INFO ] [Kivy ] v1.9.1
[INFO ] [Python ] v2.7.5 (default, Nov 20 2015, 02:00:19)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]
[INFO ] [Factory ] 179 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_gif, img_pil (img_pygame, img_ffpyplayer ignored)
[CRITICAL] [Window ] Unable to find any valuable Window provider at all!
egl_rpi - ImportError: cannot import name bcm
File "/home/etienne/Demo/Test/test_virtualenv/lib/python2.7/site-packages/kivy/core/__init__.py", line 59, in core_select_lib
fromlist=[modulename], level=0)
File "/home/etienne/Demo/Test/test_virtualenv/lib/python2.7/site-packages/kivy/core/window/window_egl_rpi.py", line 12, in <module>
from kivy.lib.vidcore_lite import bcm, egl
pygame - ImportError: No module named pygame
File "/home/etienne/Demo/Test/test_virtualenv/lib/python2.7/site-packages/kivy/core/__init__.py", line 59, in core_select_lib
fromlist=[modulename], level=0)
File "/home/etienne/Demo/Test/test_virtualenv/lib/python2.7/site-packages/kivy/core/window/window_pygame.py", line 8, in <module>
import pygame
x11 - ImportError: No module named window_x11
File "/home/etienne/Demo/Test/test_virtualenv/lib/python2.7/site-packages/kivy/core/__init__.py", line 59, in core_select_lib
fromlist=[modulename], level=0)
[INFO ] [Text ] Provider: pil(['text_pygame'] ignored)
[CRITICAL] [App ] Unable to get a Window, abort.
Exception SystemExit: 1 in 'kivy.properties.dpi2px' ignored
[CRITICAL] [App ] Unable to get a Window, abort.
Exception SystemExit: 1 in 'kivy.properties.dpi2px' ignored
[CRITICAL] [App ] Unable to get a Window, abort.
Exception SystemExit: 1 in 'kivy.properties.dpi2px' ignored
[CRITICAL] [App ] Unable to get a Window, abort.
我已经安装了以下库:
SDL.x86_64 1.2.15-14.el7 @base
SDL-devel.x86_64 1.2.15-14.el7 @base
SDL2.x86_64 2.0.3-9.el7 @epel
SDL2-devel.x86_64 2.0.3-9.el7 @epel
SDL_image.x86_64 1.2.12-11.el7 @epel
SDL_mixer.x86_64 1.2.12-4.el7 @epel
SDL_mixer-devel.x86_64 1.2.12-4.el7 @epel
SDL_ttf.x86_64 2.0.11-6.el7 @epel
SDL_ttf-devel.x86_64 2.0.11-6.el7 @epel
我让它在 Fedora 20 上与相同的 main.py 一起工作,如果我安装 pygame 也可以工作,但他太重了,所以我想使用 SDL2。 如果您对如何使其工作有任何想法;)
【问题讨论】:
【参考方案1】:由于您自己在虚拟环境中安装了 kivy,因此它是在安装时编译的。 Kivy 在编译时会检测可用的库。如果你在那之后安装了 SDL2 库,kivy 将不会立即支持 SDL2。你应该用
重新安装 kivypip install --upgrade --force-reinstall kivy
您可能会注意到在安装时在控制台输出的开头正确检测到 SDL2 库。之后,当您运行应用程序时,您应该会看到可用的 SDL2 提供程序:
[INFO ] [Logger ] Record log in /home/u1/.kivy/logs/kivy_16-06-03_4.txt
[INFO ] [Kivy ] v1.9.1
[INFO ] [Python ] v2.7.10 (default, May 24 2015, 14:46:10) [GCC]
[INFO ] [Factory ] 179 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_gif, img_sdl2, img_pil (img_ffpyplayer ignored)
[INFO ] [OSC ] using <multiprocessing> for socket
[INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored)
【讨论】:
【参考方案2】:遇到同样的问题 - 这是最后对我有用的线路
python3.5 -m pip install kivy --no-use-wheel
这迫使 pip 编译 kivy 并找到 sdl2...
【讨论】:
以上是关于kivy在Android上运行,有人弄过吗的主要内容,如果未能解决你的问题,请参考以下文章
Python/Kivy/Buildozer - 应用程序在 Android 中崩溃,但在 PC 上运行良好
请! Kivy 应用 Buildozer 可在 Windows 上运行,但不能在 Android 上运行
如何在 android 设备上运行我的 kivy windows 应用程序