Как отлаживать приложение Kivy/Kivymd для Android?

Поэтому я потратил некоторое время на разработку приложения с рецептами: Github, которое я могу использовать с моим Raspberry Pi, которое работает. отлично, и я не против использовать пусковую установку для необработанного кода. Однако я хотел иметь возможность упаковать приложение Kivy в виде apk, используя метод buildozer:

buildozer android debug deploy run

Который успешно компилируется, и apk устанавливается нормально, однако приложение падает через секунду, после чего я попытался использовать Kivy Launcher, который, кажется, никогда не распознает мою программу, поэтому я перешел к попытке запустить необработанный код через Pydroid 3, который в прошлом работал как для Kivy, так и для KivyMD, однако при попытке импорта, который не является частью моего кода, происходит сбой:

from android.config import JAVA_NAMESPACE, JNI_NAMESPACE

мой файл buildozer.spec:

https://github.com/treencd/RecipeBook/blob/master/buildozer.spec

В конце концов я попытался использовать:

adb logcat

Однако вывод не кажется таким полезным, или я не знаю, что ищу.

Мне действительно не помешало бы какое-то руководство по отладке такого приложения.


person Craig    schedule 18.12.2019    source источник
comment
Итак, я последовал предложению @inclement и удалил каталог .buildozer, воспользовавшись требованиями Buildozer: requirements = python3,Pillow,kivy,kivymd,android полный файл .buildozer.spec: ‹a href=drive.google.com/› Затем запустил: buildozer android debug deploy run На этот раз это удалось без ошибок, поэтому я попытался запустить apk на Android и я получил эту ошибку от logcat: ‹a href=drive.google. ком/  -  person Craig    schedule 18.12.2019
comment
извините, файл спецификации: drive.google.com/file/d /1E4m6sNkSsy33km2NXeEz-ayDFYBq8x1x/ logcat: drive.google.com /file/d/1VcMrU6VWfqPIhvga5sVeMsY6kca8hfVT/ По сути, ошибка: ValueError: KivyMD: App object should be inherited from 'kivymd.app.MDApp', но у KivyMD нет атрибута с именем «приложение».   -  person Craig    schedule 18.12.2019


Ответы (2)


Использование adb logcat - это путь. Помимо (многих) других вещей, это включает в себя все обычные выходные данные журнала вашего приложения, как вы могли бы видеть на рабочем столе. Вы также можете выполнить более сложную отладку, но этого обычно достаточно для отладки основных проблем (так же, как и на рабочем столе, просмотр трассировки — это большая часть информации, которая вам часто нужна).

Все строки, связанные с python, в выводе имеют тег «python». Существует синтаксис adb для отображения только вывода, соответствующего определенному тегу, но я никогда не могу его вспомнить и просто использую grep — adb logcat | grep python в порядке.

Если это не возвращает никаких выходных данных python во время выполнения, это означает, что приложение дает сбой, прежде чем дойдет до этой точки, и вам придется более тщательно проверить logcat. Если это так, опубликуйте logcat здесь.

person inclement    schedule 18.12.2019
comment
Команда adb logcat | grep python значительно очистила вывод, после чего я обнаружил это сообщение об ошибке: 12-17 20:01:56.791 25447 25481 I python : ModuleNotFoundError: No module named 'PIL' нужно ли тогда включать пакет python pillow в требования к сборке? - person Craig; 18.12.2019
comment
Если вы хотите импортировать PIL, то да. Если вы не пытаетесь это сделать, то это сообщение, скорее всего, будет отвлекающим маневром изнутри Kivy. - person inclement; 18.12.2019
comment
Мне нужен PIL для обрезки изображений в приложении, поэтому я попытался построить с помощью pillow, PIL и Pillow, просто чтобы быть уверенным, но команда buildozer каждый раз терпела неудачу в строке требований, возможно, мне следует включить исходный код подушки в мой каталог? - person Craig; 18.12.2019
comment
Похоже, Pillow — правильное название рецепта. Я думал, что эта сборка в настоящее время работает, не могли бы вы опубликовать полученную ошибку (и начать сборку с нуля, сначала удалив каталог .buildozer в каталоге сборки)? - person inclement; 18.12.2019

Вам нужно 3 шага (опущено включение режима отладки на мобильном телефоне). Вы можете сохранить каждый шаг в виде файлов bash, а затем легко запускать сценарии. Предполагая структуру папок ниже

project/
    1.bash
    2.bash
    3.bash
    bin/
        random_name.apk
    main.py
    main.kv

1) Сборка apk (1.bash)

#!/bin/sh
buildozer -v android debug

2) Установить на мобильный телефон с терминала (2.bash)

#!/bin/sh
adb install -r bin/*.apk

3) Запустите apk и посмотрите, что происходит (3.bash)

#!/bin/sh
echo 'Please connect on transfer files mode the cellphone'
adb logcat -s "python"

Затем, когда все работает, просто создайте новый файл (0.bash)

#!/bin/sh

bash 1.bash
bash 2.bash
bash 3.bash
person Pablo Díaz    schedule 19.12.2019