Cоздать .apk файл с помощью buildozer в Windows
Вместо виртуальных машин устанавливаем Windows Subsystem for Linux (WSL) - правой кнопкой на меню пуск, WindowsPowerShell (администратор), wsl --install
, перезагрузка.
Подробная инструкция по настройке WSL
https://learn.microsoft.com/ru-ru/windows/wsl/setup/environment
Переходим в папку с проектом через консоль 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/null sudo apt update
Eесли ошибок нет, но в последней строке написано что-то вроде
4 packages can be upgraded. Run 'apt list --upgradable' to see them.
sudo apt upgrade sudo 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-dev pip3 install --user --upgrade Cython==0.29.33 virtualenv export PATH=$PATH:~/.local/bin/ pip3 install --user --upgrade buildozer buildozer init
В папке появится файл настроек, который можно редактировать хоть блокнотом, хоть IDLE. В строке с зависимостями добавьте импортируемые модули. В моем случае вместо kivy
нужны pygame
, pygame-menu
и typing-extensions
. Там же можно поменять название, автора, ориентацию и т.д. В официальной документации buildozer и python-for-android достаточно подробно описано.
# (list) Application requirements # comma separated e.g. requirements = sqlite3,kivy requirements = python3,pygame,pygame-menu,typing-extensions
На мой взгляд этот пункт самый важный, так как у меня приложение вылетало пока я не добавил последний модуль typing-extensions
. Он нужен из-за модуля pygame-menu
, но на ПК и без него работает, а его добавление для андроида нигде не документируется. Чтобы это понять мне пришлось узнать что такое Android Studio, logcat, виртуальное устройство, расшифровка логов и т.д. Остальные пункты удобнее настраивать когда приложение уже запускается и можно смотреть разницу при их изменении в разных сборках. Но если накосячить тут, то запустить не получится.
Закрываем файл, сохранив изменения.
Вводим команду для начала создания .apk файла:
buildozer android debug
В примерах регулярно советуют добавлять deploy run
, но если вы не подключали заранее устройство, то не нужно этого делать. Без этих команд скомпилируется .apk
файл, который уже сами скинете куда надо. В первый раз в процессе создания файла надо будет 2 раза ввести y
, чтобы согласиться с условиями лицензии. Файл .apk
будет в папке bin
, дальше его можно скидывать на телефон или виртуальное устройство.
Как удалить дистрибутив WSL?
Чтобы удалить дистрибутив из WSL и удалить все данные, связанные с этим дистрибутивом Linux, выполните команду wsl --unregister <distroName>
, где <distroName>
— имя дистрибутива Linux, которое можно увидеть из списка в команде wsl -l
.