Python
August 24, 2023

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, дальше его можно скидывать на телефон или виртуальное устройство.

Источник: https://ru.stackoverflow.com/questions/1499638/

Как удалить дистрибутив WSL?

Чтобы удалить дистрибутив из WSL и удалить все данные, связанные с этим дистрибутивом Linux, выполните команду wsl --unregister <distroName> , где <distroName> — имя дистрибутива Linux, которое можно увидеть из списка в команде wsl -l .