在Kivy分发中包含PySerial库

3 投票
2 回答
2576 浏览
提问于 2025-04-18 18:25

我正在写一个小的Python脚本,打算在Android上运行,使用的是kivy框架。其实我对Python编程还是个新手。这个脚本在我电脑上的Linux系统上能正常运行,但我就是无法把PySerial这个库编译到Android上。

我尝试用buildozer来调试这个应用,但在Android上打开时它就崩溃了。

用python for android构建apk时出现了以下错误:

Run pymodules install
We want to install: serial
Check if and /usr/bin/pip2 are present
Check if virtualenv is existing
Installing virtualenv
./distribute.sh: line 119: --python=python2.7: command not found

有没有办法把串口库包含进去,这样就可以在Android上使用了?

编辑

错误日志:

[INFO              ] Logger: Record log in /data/data/org.led.serialled/files/.kivy/logs/kivy_14-08-25_10.txt
[INFO              ] Kivy v1.8.0
[INFO              ] Factory: 157 symbols loaded
[DEBUG             ] Cache: register <kv.lang> with limit=None, timeout=Nones
[DEBUG             ] Cache: register <kv.image> with limit=None, timeout=60s
[DEBUG             ] Cache: register <kv.atlas> with limit=None, timeout=Nones
[WARNING           ] stderr: /data/data/org.led.serialled/files/lib/python2.7/site-packages/kivy/core/image/img_pygame.py:12: RuntimeWarning: import cdrom: No module named cdrom
[WARNING           ] stderr: (ImportError: No module named cdrom)
[INFO              ] Image: Providers: img_tex, img_dds, img_pygame, img_gif (img_pil ignored)
[DEBUG             ] Cache: register <kv.texture> with limit=1000, timeout=60s
[DEBUG             ] Cache: register <kv.shader> with limit=1000, timeout=3600s
[WARNING           ] stderr: Traceback (most recent call last):
[WARNING           ] stderr:   File "/home/konstantin/Desktop/buildozer_LED/.buildozer/android/app/main.py", line 3, in <module>
[WARNING           ] stderr:   File "/home/konstantin/Desktop/buildozer_LED/.buildozer/android/app/_applibs/serial/__init__.py", line 21, in <module>
[WARNING           ] stderr:   File "/home/konstantin/Desktop/buildozer_LED/.buildozer/android/app/_applibs/serial/serialposix.py", line 15, in <module>
[WARNING           ] stderr: ImportError: No module named termios

2 个回答

0

你需要把 pyserial 加入到需求列表中,并且把 termios 从黑名单中移除。

在你的 buildozer.spec 文件中使用:

# (list) python-for-android whitelist
android.p4a_whitelist = lib-dynload/termios.so

或者把 lib-dynload/termios.so 加入到 whitelist.txt 文件中,以便使用的引导程序可以识别(具体可以参考 这个链接

1

这段话的意思是,不管你用的是哪个库,如果它是纯Python库,或者有一个已经知道的配方,那么你只需要把它添加到bulldozer.spec文件的需求部分就可以了。

# requirements of the app
requirements = pyserial,pycrypto,pyasn1,pyjnius,twisted,kivy

但是,如果这个库不是纯Python的,你就需要提供一个配方,如果这个配方在这里还不存在的话。这个配方其实就是一个简单的脚本,用来给这个库添加补丁,以便它可以在arm架构的安卓设备上编译。然后把它作为需求添加到bulldozer.spec文件中。

pyserial看起来是一个纯Python库。

撰写回答