2017-04-26 301 views
0

我的其他應用程序在Kivy Launcher上正常工作,但是這個在加載屏幕上崩潰(有時我甚至沒有看到在崩潰前加載的文本)。因爲在加載過程中發生崩潰,所以Kivy啓動器不會在MyApp/.kivy/logs中創建日誌。所以我沒有任何日誌。Kivy App在Android KitKat上崩潰(Kivy Launcher)

我的手機是帶有Kitkat的三星S3。

我在手機上的應用程序文件夾中複製了文件夾Python36\Lib\site-packages\kivy\uix\recycleview(也許是罪魁禍首),但我的應用程序仍然崩潰。 這是應用程序(非常感謝El3phanten):

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.recycleview import RecycleView 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import StringProperty 
from kivy.uix.recycleview.views import RecycleDataViewBehavior 

items = [ 
    {"text": "white", "selected": 'normal', "input_data": ["some","random","data"]}, 
    {"text": "lightblue","selected": 'normal', "input_data": [1,6,3]} 
] 

class MyViewClass(RecycleDataViewBehavior, BoxLayout): 

    text = StringProperty("") 
    index = None 

    def set_state(self,state,app): 
     app.root.ids.rv.data[self.index]['selected'] = state 

    def refresh_view_attrs(self, rv, index, data): 
     self.index = index 
     return super(MyViewClass, self).refresh_view_attrs(rv, index, data) 

class MyRecycleView(RecycleView): 

    data = items 

    def print_data(self,data): 
     print([item['input_data'] for item in data if item['selected'] == 'down']) 

KV = ''' 

<MyViewClass>: 
    orientation: 'horizontal' 
    CheckBox: 
     on_state: root.set_state(self.state,app) 
    Label: 
     text: root.text 

BoxLayout: 
    orientation: 'vertical' 
    MyRecycleView: 
     id: rv 
     viewclass: 'MyViewClass' 
     RecycleBoxLayout: 
      orientation: 'vertical' 
      default_size: None, dp(56) 
      default_size_hint: 1, None 
      size_hint_y: None 
      height: self.minimum_height 
    Button: 
     size_hint_y: 0.1 
     text: "Print data" 
     on_release: rv.print_data(rv.data) 

''' 

class Test(App): 
    def build(self): 
     root = Builder.load_string(KV) 
     return root 


Test().run() 

編輯: 現在我得到的日誌。我嘗試了@KeyWeeUsr解決方案,但仍找不到該模塊。

我的應用程序文件夾現在結構以這種方式:

my_app/: 
    -main.py 
    -android.txt 
    -kivy/ 
     -uix/ 
     -recycleview/ 
      -__init__.py 
      -datamodel.py 
      -layout.py 
      -views.py 

這裏是日誌:

[INFO    ] Logger: Record log in /storage/emulated/0/kivy/del/.kivy/logs/kivy_17-04-27_2.txt 
[INFO    ] Kivy: v1.9.1 
[INFO    ] Python: v2.7.2 (default, Mar 20 2016, 23:30:13) 
[GCC 4.8] 
[INFO    ] Factory: 179 symbols loaded 
[WARNING   ] stderr: /data/data/org.kivy.pygame/files/lib/python2.7/site-packages/kivy/core/image/img_pygame.py:13: RuntimeWarning: import cdrom: No module named cdrom 
[WARNING   ] stderr: (ImportError: No module named cdrom) 
[INFO    ] Image: Providers: img_tex, img_dds, img_gif, img_pygame, img_pil (img_ffpyplayer ignored) 
[WARNING   ] stderr: Traceback (most recent call last): 
[WARNING   ] stderr: File "main.py", line 3, in <module> 
[WARNING   ] stderr:  from kivy.uix.recycleview import RecycleView 
[WARNING   ] stderr: ImportError: No module named recycleview 

回答

0

對於日誌,我使用的應用程序LogCat(它需要root權限)

我不能讓Kivy啓動工作,因爲該版本仍然是1.9 0.1

我最後不得不使用Buildozer打包的應用程序(我不得不創建一個dual boot與Ubuntu 17.04,則安裝python 3.6,kivybuildozer

我不得不修改buildozer.spec文件是這樣的:

# comma seperated e.g. requirements = sqlite3,kivy 
requirements = kivy==master 

不要修改這一行(即使它是誘人!):

# Kivy version to use 
osx.kivy_version = 1.9.1 
0

Kivy應用程序可以在Android的(是的,即使發射)運行應該與adb logcat調試因爲應用程序的實際輸出因此甚至是所有崩潰,庫加載失敗等都在logcat中。

.kivy文件中的日誌是純Kivy日誌,不包含有關APK如何啓動,窗口如何被撕下或者如果加載時出現問題的任何內容。 Python解釋器本身。 →沒有logcat,沒有明確的解決方案。

反正有辦法如何使自定義Kivy啓動用:

但第二個變化需要,因爲它是發射器需要。

但是,您可以嘗試將文件夾正確地放置在您的應用程序文件夾,即:

my_app 
| 
|- main.py 
| 
|- kivy/uix/recycleview (multiple folders, not ONE) 

或粘貼在這裏記錄。

+0

感謝這個,我必須告訴你,我我對python和Kivy很新穎,大部分我在鏈接上看到的東西都像中文。我會更近一些,並嘗試瞭解如何製作定製的kivy啓動器。我試過你的解決方案(將文件夾kivy/uix/recycleview放入我的應用程序文件夾中,而不是像我這樣直接將recycleview文件夾放入,但該應用程序仍然崩潰,顯示「沒有名爲recycleview的模塊」。 – Enora

1

我有一個使用RecyclerView過的應用程序,我在Android上運行它不會有問題(通過建立一個包,而不是複製該文件夾,我用Kivy 1.9.2dev0)

爲了知道到底導致崩潰,您需要在應用運行時閱讀日誌。

  1. 將您的手機,並確保它通過adb devices
  2. 列出安裝通過adb -d install -r abc.apk
  3. 應用程序檢查日誌,msg for filter是你的包名org.test.myapp樣的東西
    • Mac或Linux操作系統:adb logcat | grep 「msg for filter」
    • Windows:adb logcat | FINDSTR 「msg for filter"
  4. 你會得到真正的日誌
+0

我想避免打包應用程序(它仍然處於測試階段,我發現可以直接在我的手機上編輯文件,這很方便)請看我的問題底部的日誌 – Enora

+0

我只是用buildozer打包了應用程序,但我仍然同樣的錯誤「ImportError:No module named recycleview」。不知道它是不是原因,但你使用python 3.6嗎? – Enora