python - 错误阻止 buildozer 脚本完成
问题描述
我正在尝试在树莓派终端上运行 android 调试,但是它在特定点不断出现错误,我可以在互联网上找到可行的解决方案。我有一个非常简单的应用程序,我想把它放在一个便宜的安卓桌子上作为父亲节礼物的一部分,我没想到制作它最难的部分是下载这个东西。这是我第一次使用 Kivy 和 Buildozer,因此非常感谢任何有助于避免或解决此错误的帮助!
输入:
pi@raspberrypi:~/Desktop/Scoreboard_Controller $ buildozer android debug deploy run
输出
# Check configuration tokens
# Ensure build layout
# Check configuration tokens
# Read available permissions from api-versions.xml
# Preparing build
# Check requirements for android
# Run 'dpkg --version'
# Cwd None
Debian 'dpkg' package management program version 1.19.7 (armhf).
This is free software; see the GNU General Public License version 2 or
later for copying conditions. There is NO warranty.
# Search for Git (git)
# -> found at /usr/bin/git
# Search for Cython (cython)
# -> found at /home/pi/.local/bin/cython
# Search for Java compiler (javac)
# -> found at /usr/lib/jvm/java-8-openjdk-armhf/bin/javac
# Search for Java keytool (keytool)
# -> found at /usr/lib/jvm/java-8-openjdk-armhf/jre/bin/keytool
# Install platform
# Run '/usr/bin/python3 -m pip install -q --user \'appdirs\' \'colorama>=0.3.3\' \'jinja2\' \'six\' \'enum34; python_version<"3.4"\' \'sh>=1.10; sys_platform!="nt"\' \'pep517<0.7.0"\' \'toml\''
# Cwd None
# Apache ANT found at /home/pi/.buildozer/android/platform/apache-ant-1.9.4
# Android SDK found at /home/pi/.buildozer/android/platform/android-sdk
# Android NDK is missing, downloading
# Downloading https://dl.google.com/android/repository/android-ndk-r17c-linux-x86.zip
Traceback (most recent call last):
File "/usr/local/bin/buildozer", line 11, in <module>
load_entry_point('buildozer', 'console_scripts', 'buildozer')()
File "/home/pi/.local/lib/python3.7/site-packages/buildozer/scripts/client.py", line 13, in main
Buildozer().run_command(sys.argv[1:])
File "/home/pi/.local/lib/python3.7/site-packages/buildozer/__init__.py", line 1062, in run_command
self.target.run_commands(args)
File "/home/pi/.local/lib/python3.7/site-packages/buildozer/target.py", line 92, in run_commands
func(args)
File "/home/pi/.local/lib/python3.7/site-packages/buildozer/target.py", line 102, in cmd_debug
self.buildozer.prepare_for_build()
File "/home/pi/.local/lib/python3.7/site-packages/buildozer/__init__.py", line 186, in prepare_for_build
self.target.install_platform()
File "/home/pi/.local/lib/python3.7/site-packages/buildozer/targets/android.py", line 597, in install_platform
self._install_android_ndk()
File "/home/pi/.local/lib/python3.7/site-packages/buildozer/targets/android.py", line 394, in _install_android_ndk
cwd=self.buildozer.global_platform_dir)
File "/home/pi/.local/lib/python3.7/site-packages/buildozer/__init__.py", line 707, in download
urlretrieve(url, filename, report_hook)
File "/usr/lib/python3.7/urllib/request.py", line 1817, in retrieve
block = fp.read(bs)
File "/usr/lib/python3.7/tempfile.py", line 620, in func_wrapper
return func(*args, **kwargs)
ValueError: read of closed file
Python代码文件:
import kivy
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.storage.jsonstore import JsonStore
Game = JsonStore('Data.json')
Game.put('Home', color = 0, score = 0, winner = 0)
Game.put('Visitor', color = 0, score = 0, winner = 0)
class FloatLayout(FloatLayout):
def colorloop_one_button(self):
colorloop_one_value = Game.get('Home')['color']
score_one_value = Game.get('Home')['score']
winner_one_value = Game.get('Home')['winner']
colorloop_one_value = colorloop_one_value + 1
Game.put('Home', color = colorloop_one_value, score = score_one_value, winner = winner_one_value)
if colorloop_one_value == 1:
self.colorloop_one_image.source = 'ffa500.jpg'
if colorloop_one_value == 2:
self.colorloop_one_image.source = 'ffff00.jpg'
if colorloop_one_value == 3:
self.colorloop_one_image.source = '008000.jpg'
if colorloop_one_value == 4:
self.colorloop_one_image.source = '90ee90.jpg'
if colorloop_one_value == 5:
self.colorloop_one_image.source = '00ffff.jpg'
if colorloop_one_value == 6:
self.colorloop_one_image.source = '0000ff.jpg'
if colorloop_one_value == 7:
self.colorloop_one_image.source = 'ee82ee.jpg'
if colorloop_one_value == 8:
self.colorloop_one_image.source = 'ff00ff.jpg'
if colorloop_one_value == 9:
score_one_value = Game.get('Home')['score']
winner_one_value = Game.get('Home')['winner']
Game.put('Home', color = 0, score = score_one_value, winner = winner_one_value)
self.colorloop_one_image.source = 'ff0000.jpg'
def colorloop_two_button(self):
colorloop_two_value = Game.get('Visitor')['color']
score_two_value = Game.get('Visitor')['score']
winner_two_value = Game.get('Visitor')['winner']
colorloop_two_value = colorloop_two_value + 1
Game.put('Visitor', color = colorloop_two_value, score = score_two_value, winner = winner_two_value)
if colorloop_two_value == 1:
self.colorloop_two_image.source = 'ffa500.jpg'
if colorloop_two_value == 2:
self.colorloop_two_image.source = 'ffff00.jpg'
if colorloop_two_value == 3:
self.colorloop_two_image.source = '008000.jpg'
if colorloop_two_value == 4:
self.colorloop_two_image.source = '90ee90.jpg'
if colorloop_two_value == 5:
self.colorloop_two_image.source = '00ffff.jpg'
if colorloop_two_value == 6:
self.colorloop_two_image.source = '0000ff.jpg'
if colorloop_two_value == 7:
self.colorloop_two_image.source = 'ee82ee.jpg'
if colorloop_two_value == 8:
self.colorloop_two_image.source = 'ff00ff.jpg'
if colorloop_two_value == 9:
score_two_value = Game.get('Visitor')['score']
winner_one_value = Game.get('Visitor')['winner']
Game.put('Visitor', color = 0, score = score_two_value, winner = winner_two_value)
self.colorloop_two_image.source = 'ff0000.jpg'
def up_one_button(self):
colorloop_one_value = Game.get('Home')['color']
up_one_value = Game.get('Home')['score']
winner_one_value = Game.get('Home')['winner']
up_one_value = up_one_value + 1
if up_one_value == 100:
up_one_value = 99
Game.put('Home', color = colorloop_one_value, score = up_one_value, winner = winner_one_value)
self.score_one_value.text = str(up_one_value)
def down_one_button(self):
colorloop_one_value = Game.get('Home')['color']
down_one_value = Game.get('Home')['score']
winner_one_value = Game.get('Home')['winner']
down_one_value = down_one_value - 1
if down_one_value == -1:
down_one_value = 0
Game.put('Home', color = colorloop_one_value, score = down_one_value, winner = winner_one_value)
self.score_one_value.text = str(down_one_value)
def up_two_button(self):
colorloop_two_value = Game.get('Visitor')['color']
up_two_value = Game.get('Visitor')['score']
winner_two_value = Game.get('Visitor')['winner']
up_two_value = up_two_value + 1
if up_two_value == 100:
up_two_value = 99
Game.put('Visitor', color = colorloop_two_value, score = up_two_value, winner = winner_two_value)
self.score_two_value.text = str(up_two_value)
def down_two_button(self):
colorloop_two_value = Game.get('Visitor')['color']
down_two_value = Game.get('Visitor')['score']
winner_two_value = Game.get('Visitor')['winner']
down_two_value = down_two_value - 1
if down_two_value == -1:
down_two_value = 0
Game.put('Visitor', color = colorloop_two_value, score = down_two_value, winner = winner_two_value)
self.score_two_value.text = str(down_two_value)
def winner_one_button(self):
colorloop_one_value = Game.get('Home')['color']
up_one_value = Game.get('Home')['score']
winner_one_value = Game.get('Home')['winner']
colorloop_two_value = Game.get('Visitor')['color']
up_two_value = Game.get('Visitor')['score']
winner_two_value = Game.get('Visitor')['winner']
if winner_one_value == 0:
winner_one_value = 1
else:
winner_one_value = 0
if winner_two_value == 1:
winner_two_value = 0
Game.put('Home', color = colorloop_one_value, score = up_one_value, winner = winner_one_value)
Game.put('Visitor', color = colorloop_two_value, score = up_two_value, winner = winner_two_value)
def winner_two_button(self):
colorloop_two_value = Game.get('Visitor')['color']
up_two_value = Game.get('Visitor')['score']
winner_two_value = Game.get('Visitor')['winner']
colorloop_one_value = Game.get('Home')['color']
up_one_value = Game.get('Home')['score']
winner_one_value = Game.get('Home')['winner']
if winner_two_value == 0:
winner_two_value = 1
else:
winner_two_value = 0
if winner_one_value == 1:
winner_one_value = 0
Game.put('Home', color=colorloop_one_value, score=up_one_value, winner=winner_one_value)
Game.put('Visitor', color = colorloop_two_value, score = up_two_value, winner = winner_two_value)
def reset(self):
Game.put('Home', color=0, score=0, winner=0)
Game.put('Visitor', color=0, score=0, winner=0)
self.colorloop_one_image.source = 'ff0000.jpg'
self.colorloop_two_image.source = 'ff0000.jpg'
self.score_one_value.text = "0"
self.score_two_value.text = "0"
class MyApp(App):
def build(self):
return FloatLayout()
if __name__ == "__main__":
Application = MyApp()
Application.run()
Kivy 代码文件:
<Label>:
font_size:50
color:0,0,0,1
size_hint: 0.5, 0.6
font_size:200
bold: True
<Button>:
font_size:50
color:0,0,0,1
<FloatLayout>:
colorloop_one_image: image_one
colorloop_two_image: image_two
score_one_value: score_one
score_two_value: score_two
canvas:
Rectangle:
source: 'soccer_field_311115.jpg'
pos: self.pos
size: self.size
Image:
pos_hint: {"x":0, "top":1}
source: 'logo.png'
size_hint: 1, 0.2
Label:
pos_hint: {"x":0.05, "top":0.775}
size_hint: 0.425, 0.15
font_size:100
text: "Home"
underline: True
Label:
pos_hint: {"x":0.525, "top":0.775}
size_hint: 0.425, 0.15
font_size:100
text: "Visitor"
underline: True
Label:
id: score_one
pos_hint: {"x":0.05, "top":0.6}
size_hint: 0.25, 0.35
text: "0"
Button:
pos_hint: {"x":0.325, "top":0.6}
size_hint: 0.15, 0.15
on_press:root.up_one_button()
Image:
pos_hint: {"x":0.325, "top":0.6}
source: 'up.png'
size_hint: 0.15, 0.15
Button:
pos_hint: {"x":0.325, "top":0.4}
size_hint: 0.15, 0.15
on_press:root.down_one_button()
Image:
pos_hint: {"x":0.325, "top":0.4}
source: 'down.png'
size_hint: 0.15, 0.15
Label:
id: score_two
pos_hint: {"x":0.525, "top":0.6}
size_hint: 0.25, 0.35
text: "0"
Button:
pos_hint: {"x":0.8, "top":0.6}
size_hint: 0.15, 0.15
on_press:root.up_two_button()
Image:
pos_hint: {"x":0.8, "top":0.6}
source: 'up.png'
size_hint: 0.15, 0.15
Button:
pos_hint: {"x":0.8, "top":0.4}
size_hint: 0.15, 0.15
on_press:root.down_two_button()
Image:
pos_hint: {"x":0.8, "top":0.4}
source: 'down.png'
size_hint: 0.15, 0.15
Button:
pos_hint: {"x":0.05, "top":0.225}
size_hint: 0.2, 0.15
on_press:root.colorloop_one_button()
Image:
id: image_one
pos_hint: {"x":0.1, "top":0.2}
source: 'ff0000.jpg'
size_hint: 0.1, 0.1
Button:
pos_hint: {"x":0.275, "top":0.225}
size_hint: 0.2, 0.15
text: 'WIN'
on_press:root.winner_one_button()
Button:
pos_hint: {"x":0.525, "top":0.225}
size_hint: 0.2, 0.15
on_press:root.colorloop_two_button()
Image:
id: image_two
pos_hint: {"x":0.575, "top":0.2}
source: 'ff0000.jpg'
size_hint: 0.1, 0.1
Button:
pos_hint: {"x":0.75, "top":0.225}
size_hint: 0.2, 0.15
text: 'WIN'
on_press:root.winner_two_button()
Button:
pos_hint: {"x":0.775, "top":0.975}
size_hint: 0.2, 0.15
text: 'Reset'
on_press:root.reset()
解决方案
推荐阅读
- java - JAVAFX 11 不支持 ECMAScript6 和 css3
- python - 如何验证 Amazon 开发人员门户中的内置插槽值?
- angular - 从 api 向我的 FormArray 添加数据时获取额外的表单 controlName
- android - 启用 webview 从网站播放 HLS 流
- nginx - 子域不适用于 Nginx 虚拟主机
- apache-spark - 减去一个空数据框返回的计数与原始数据不同
- php - 将一个 DOMDocument 导入另一个
- jsf - @Observer 在 JSF @Viewscoped 注释 bean 中不起作用
- reactjs - React Native 中的自定义形状和渐变
- python - 以最快的方式比较两个字典列表以获得性能