Как создать .apk файл с помощью buildozer в Windows?
📁 python, ии, игра, работа
При попытке создания файла .apk через buildozer столкнулся с проблемой, что если это делать в Windows, то не создается target android, это видно если прописать в терминале buildozer help. Если создать виртуальную машину с Ubuntu, то там этой проблемы нет, но пока не хотелось бы переходить на неё, рано ещё. Вероятно проблема из-за того, что надо установить модуль python-for-android, но он не доступен для Windows, если я правильно понял.
Это моя первая попытка использования buildozer, ubuntu и виртуальных машин, так что уже мозг кипит, возможно не понимаю какой-то нюанс.
Кто-нибудь знает как добавить отдельно target для android? Или установить модуль python-for-android, если дело в нём? Или может подскажете гайд, где пошагово показана работа buildozer именно для Windows? Не нашел такого гайда, а по официальной документации почему-то не выходит добиться результата.
В крайнем случае - подскажите пожалуйста как еще можно создать .apk файл из python именно в Windows? Игра на pygame, если это важно.
Первый скрин - терминал PyCharm в Windows, второй - в Ubuntu
Отвечу сам. Заодно памятка будет на будущее.
Вместо виртуальных машин устанавливаем 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 updateEесли ошибок нет, но в последней строке написано что-то вроде
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 и тогда уже разворачивать приложение автоматически после сборки, но не каждый телефон поддерживает такую синхронизацию
Войдите чтобы оставить ответ