2017-11-19 8 views
1

私は新しいアンドロイドの開発者です。私はプログラムを開発するためにpython3.6とkivyライブラリを使用しています。私はCrystax NDKを使用していますが、1つのことを除いてすべて素晴らしかったです。アプリは大きすぎます(800 MB)。800mb apoファイルを使用してbuildozer kivy

どうすれば小さくできますか?

title = RetroPong 
package.name = retropong 
package.domain = www.thelatish.lv 
source.dir = . 
source.include_exts = py,kv 
version = 0.2 
requirements =python3crystax,kivy 
orientation = landscape 
osx.python_version = 3 
osx.kivy_version = 1.9.1 
fullscreen = 1 
android.ndk = 10.3.2 
android.ndk_path = opt/crystax-ndk-10.3.2 
android.arch =armeabi-v7a 
log_level = 2 
warn_on_root = 1 

buildozer.spec

Pythonのコード

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(PongGame,self).__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.y) or (self.ball.top > self.height): 
        self.ball.velocity_y *= -1 

       if self.ball.x<self.x: 
        self.player2.score += 1 
        self.serve_ball((10,0)) 
       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/3: 
       self.player1.center_y = touch.y 
      if touch.x > self.width - self.width/3: 
       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/60) 
      return game 

    if __name__ == '__main__': 
     PongApp().run() 

pong.kvファイル

#:kivy 1.0.9 
<[email protected]>: 
    text: 'Retry' 
    font_size: 17 
    size: self.width, '100dp' 
<PongBall>: 
    size: '50sp','50sp' 
    canvas.before: 
     Ellipse: 
      pos: self.pos 
      size: self.size 

<PongPaddle>: 
    canvas: 
     Rectangle: 
      pos:self.pos 
      size: self.size 


<PongGame>: 
    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: 
     size: root.width/30,root.height/3 
     id: player_left 
     x: root.x 
     center_y: root.center_y 
    PongPaddle: 
     size: root.width/30,root.height/3 
     id: player_right 
     x: root.width - self.width 
     center_y: root.center_y 

そして、私は自分のファイルツリーは、この問題を解決するためにあなたを助けることができると思います。

computer/home/ubuntu/qwerty: 
    bin: 
    buildozer: 
    opt: 
    crystax-ndk-10.3.2 
    buildozer.spec 
    main.py 
    pong.kv 

答えて

1

これは、誤ってAPKに余分なファイルが含まれているためです。もしあなたができることが分からなければ、apkを解凍し、その中にassets/private.mp3ファイルを見つけてそれを解凍してください(本当にtarアーカイブです)。見つけたコンテンツは、APKに含まれているすべてのものでなければならないので、期待どおりに一致するかどうかを確認できます。

+0

private.mp3には2GB/optフォルダがあります。このエラーを解決するにはどうすればよいですか? – user8046323

+0

おそらく、これはビルドディレクトリのoptフォルダです。あなたのbuildozer.specから、なぜこれが含まれているのか分かりませんが、buildozer.spec( 'source.exclude_dirs'トークン)で明示的に除外することも、別の場所に移動することもできます。 – inclement

0

私が妄想しているからといって、私は '。 specファイルのsource_dirの行にフルパスを入力します。除外するディレクトリのリストを追加することもできます。

source.exclude_dirs: bin, buildozer, opt 
関連する問題