首页 > 解决方案 > 错误阻止 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()

标签: pythonandroidraspberry-pikivybuildozer

解决方案


推荐阅读