IOError: No existe tal archivo o directorio: u ‘/… / RetroApp-debug.apk’

Soy principiante en la progtwigción de bibliotecas Kivy, pero he hecho una aplicación muy simple, como en el tutorial de Kivy. En el escritorio funciona bien. Pero lo que quería hacer era un archivo .apk (no había usado Linux). He intentado muchos pasos para hacer un archivo .apk, pero finalmente cuando instalé y abrí este progtwig. Tuvo un error. He probado muchas especificaciones y new_android, pero nada funcionó. Finalmente he actualizado mi buildozer a la última versión. Pero ahora, después de la depuración de Android de buildozer, escribe este error:

IOError: [Errno 2] No existe tal archivo o directorio: u ‘/ home / kivy / reyyy / .buildozer / android / platform / build / dists / RetroApp / build / Output / apk / RetroApp-debug.apk’.

************* buildozer.spec ***************

[app] title = Retro App package.name = retroapp package.domain = org.test source.dir = . source.include_exts = py,png,jpg,kv,atlas version = 1.0 requirements = kivy orientation = landscape osx.python_version = 3 osx.kivy_version = 1.9.1 fullscreen = 1 android.arch = armeabi-v7a [buildozer] log_level = 2 warn_on_root = 1 

****** python3: main.py *******

 from kivy.app import App from kivy.uix.widget import Widget from kivy.properties import NumericProperty,ObjectProperty,ReferenceListProperty,StringProperty from kivy.vector import Vector from kivy.clock import Clock from kivy.uix.button import Button from random import randint,choice class RetryButton(Button): pass class PongBall(Widget): velocity_y = NumericProperty(0) velocity_x = NumericProperty(0) velocity = ReferenceListProperty(velocity_x,velocity_y) def move(self): self.pos = Vector(*self.velocity)+self.pos class PongPaddle(Widget): score = NumericProperty(0) def bounce_ball(self,ball): if self.collide_widget(ball): vx,vy = ball.velocity offset = (ball.center_y - self.center_y) / (self.height /10.0) bounced = Vector(-1 * vx, vy) vel = bounced * 1.1 ball.velocity = vel.x, vel.y + offset class PongGame(Widget): ball = ObjectProperty(None) player1 = ObjectProperty(None) player2 = ObjectProperty(None) win = NumericProperty(0) middle_rectangle_opacity = NumericProperty(1) winner = StringProperty('') def __init__(self,**q): super().__init__(**q) self.btn = RetryButton(width = self.width) self.btn.count = 0 self.max_score = 10 def serve_ball(self,vel = (10,0)): self.ball.center = self.center self.ball.velocity = Vector(*vel).rotate(choice([randint(0,30),randint(330,360)])) def update(self,dt): if self.win == 0: self.ball.move() self.player1.bounce_ball(self.ball) self.player2.bounce_ball(self.ball) if self.player1.score >= self.max_score or self.player2.score >=self.max_score: if self.player1.score >= self.max_score: self.winner = '1' else: self.winner = '2' self.win = 1 self.middle_rectangle_opacity = 0 if (self.ball.y  self.height): self.ball.velocity_y *= -1 if self.ball.x self.width - self.ball.width: self.player1.score += 1 self.serve_ball((-10,0)) else: if self.btn.count == 0: self.btn.bind(on_press=self.retry) self.add_widget(self.btn) self.btn.count += 1 def on_touch_move(self, touch): if touch.x  self.width - self.width/3.0: self.player2.center_y = touch.y def retry(self,*q): self.player1.score = 0 self.player2.score = 0 self.win = 0 self.middle_rectangle_opacity = 1 self.serve_ball() self.remove_widget(self.btn) self.btn.count = 0 class PongApp(App): def build(self): game = PongGame() game.serve_ball() Clock.schedule_interval(game.update, 1/30.0) return game if __name__ == '__main__': PongApp().run()` 

******** KV pong.kv *********

 #:kivy 1.0.9 : text: 'Retry' font_size: 17 size: self.width, '100dp' : size:50,50 canvas.before: Ellipse: pos: self.pos size: self.size : size: '25dp','200dp' canvas: Rectangle: pos:self.pos size: self.size : ball: pong_ball player1: player_left player2: player_right canvas: Color: rgba: 1,1,1,root.middle_rectangle_opacity Rectangle: pos:self.center_x - 5,0 size: 10, self.height Label: font_size:35 center_x: root.center_x center_y: root.height/4*3 text: "Player {} wins!!".format(root.winner) color: 1,1,1,root.win Label: font_size: 70 center_x: root.width/4 top: root.top - 50 text: str(root.player1.score) Label: font_size: 70 center_x: root.width/4*3 top: root.top - 50 text: str(root.player2.score) PongBall: id: pong_ball center: self.parent.center PongPaddle: id: player_left x: root.x center_y: root.center_y PongPaddle: id: player_right x: root.width - self.width center_y: root.center_y 

¡Por favor, ayúdame! Vadim.

Por favor cambia tu script de Python de la siguiente manera:

main.py

 class PongGame(Widget): ... def __init__(self, **kwargs): super(PongGame, self).__init__(**kwargs) ... def retry(self): 

Ya que estás usando Python 3.x, necesitas hacer lo siguiente:

  1. Instale Buildozer con soporte python3

    git clone https://github.com/kivy/buildozer

    cd buildozer

    python setup.py build

    sudo pip install -e.

  2. Descargue y extraiga el Crystax NDK en algún lugar (~ / opt / es una opción): https://www.crystax.net/en/download

  3. Especifique lo siguiente en su buildozer.spec:

buildozer.spec

requisitos = python3crystax, kivy

android.ndk = 10.3.2

android.ndk_path = /opt/crystax-ndk-10.3.2