Отвечу сам. Заодно памятка будет на будущее.
Вместо виртуальных машин устанавливаем Windows Subsystem for Linux (WSL) - правой кнопкой на меню пуск, WindowsPowerShell (администратор), wsl --install, перезагрузка.
Переходим в папку с проектом через консоль WSL. Или открываем путь к ней в проводнике и на папке, в которой находит основной файл программы (или внутри этой папки на пустом месте), и нажимаем сочетание Shift+ПКМ. В контекстном меню добавится новый пункт ""Откройте здесь оболочку Linux"", нажимаем туда.
ВАЖНО!!! В названии папки с main.py не должно быть пробелов. А основной файл должен называться именно main.py (можно будет изменить это требование на 5 шаге)
- Вводим команду (чтобы вставить в консоль скопированный текст нажмите в ней правую кнопку мыши):
sudo apt update
Если в конце её работы видим ошибки вроде:
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease Temporary failure resolving 'archive.ubuntu.com'W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy-updates/InRelease Temporary failure resolving 'archive.ubuntu.com'W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy-backports/InRelease Temporary failure resolving 'archive.ubuntu.com'W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/jammy-security/InRelease Temporary failure resolving 'security.ubuntu.com'W: Some index files failed to download. They have been ignored, or old ones used instead.
то по поочередно вводим команды
echo ""nameserver 8.8.8.8"" | sudo tee /etc/resolv.conf > /dev/nullsudo apt update
Eесли ошибок нет, но в последней строке написано что-то вроде
4 packages can be upgraded. Run 'apt list --upgradable' to see them.
то напишите
sudo apt upgradesudo apt update
Вроде как это необязательно, но на мой взгляд лучше обновить.
- Продолжаем поочередно вводить команды :
sudo apt install -y git zip unzip openjdk-17-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-devpip3 install --user --upgrade Cython==0.29.33 virtualenv export PATH=$PATH:~/.local/bin/pip3 install --user --upgrade buildozerbuildozer init
- В папке появится файл настроек, который можно редактировать хоть блокнотом, хоть IDLE. В строке с зависимостями добавьте импортируемые модули. В моем случае вместо
kivy нужны pygame, pygame-menu и typing-extensions. Там же можно поменять название, автора, ориентацию и т.д. В официальной документации и достаточно подробно описано.
# (list) Application requirements# comma separated e.g. requirements = sqlite3,kivyrequirements = python3,pygame,pygame-menu,typing-extensions
На мой взгляд этот пункт самый важный, так как у меня приложение вылетало пока я не добавил последний модуль typing-extensions. Он нужен из-за модуля pygame-menu, но на ПК и без него работает, а его добавление для андроида нигде не документируется. Чтобы это понять мне пришлось узнать что такое Android Studio, logcat, виртуальное устройство, расшифровка логов и т.д. Остальные пункты удобнее настраивать когда приложение уже запускается и можно смотреть разницу при их изменении в разных сборках. Но если накосячить тут, то запустить не получится.
Закрываем файл, сохранив изменения.
- Вводим команду для начала создания .apk файла:
buildozer android debug
В примерах регулярно советуют добавлять deploy run, но если вы не подключали заранее устройство, то не нужно этого делать. Без этих команд скомпилируется .apk файл, который уже сами скинете куда надо. В первый раз в процессе создания файла надо будет 2 раза ввести y, чтобы согласиться с условиями лицензии. Файл .apk будет в папке bin, дальше его можно скидывать на телефон или виртуальное устройство.
Лично я в buildoser.spec bin_dir = /mnt/h/ЯДиск где ЯДиск- папка, автоматически синхронизирующая все содержимое с облаком. Сразу же после создания файла он оказывается в этой папке (или перезаписывает предыдущую версию) и отправляется в облако. Остается открыть облако на телефоне и запустить синхронизированный .apk для установки. Самый удобный метод без использования кабелей, что я смог придумать. Можно еще вроде Android Studio соединить с телефоном по Wi-Fi и тогда уже разворачивать приложение автоматически после сборки, но не каждый телефон поддерживает такую синхронизацию