Найти в Дзене
Орчанин

Компиляция под Android(формирование APK файла) проекта Python Kivy в Windows 10

Очень намучался с этой темой поэтому для себя и для людей фиксирую пошагово. Началось с того, что изучил фреймворк Kivy и наконец осуществил свою давнюю задумку: написал приложение для детской футбольной команды(сейчас детей к чему то можно привлечь только через гаджеты). Приложение писал на языке Python в PyCharm(много было моментов возможно напишу отдельную статью), в итоге с моей занятостью ушло пару месяцев и получилось структурированное приложение(пакет из десятка модулей) с организованным импортом и т.п. Опять же в Пайчарме всё отладил, всё работало как часы(уже после компиляции всплыли косяки со шрифтами, координатами и т.д., очень обидно!!! но об этом опять же в другой статье). Всё, дошло дело до преобразование имеющегося кода на Питоне в полноценное приложение(APK файл), это процедура называется компиляцией. Первый сюрприз который меня ждал это то, что компиляция производится с помощью специального модуля Buildozer и только в Линуксе. Всё же в андроид студии было бы удобнее в

Очень намучался с этой темой поэтому для себя и для людей фиксирую пошагово.

Началось с того, что изучил фреймворк Kivy и наконец осуществил свою давнюю задумку: написал приложение для детской футбольной команды(сейчас детей к чему то можно привлечь только через гаджеты). Приложение писал на языке Python в PyCharm(много было моментов возможно напишу отдельную статью), в итоге с моей занятостью ушло пару месяцев и получилось структурированное приложение(пакет из десятка модулей) с организованным импортом и т.п.

Общий вид проекта ФК Носта 2014г.р. в Пайчарме
Общий вид проекта ФК Носта 2014г.р. в Пайчарме

Опять же в Пайчарме всё отладил, всё работало как часы(уже после компиляции всплыли косяки со шрифтами, координатами и т.д., очень обидно!!! но об этом опять же в другой статье).

Всё, дошло дело до преобразование имеющегося кода на Питоне в полноценное приложение(APK файл), это процедура называется компиляцией. Первый сюрприз который меня ждал это то, что компиляция производится с помощью специального модуля Buildozer и только в Линуксе. Всё же в андроид студии было бы удобнее в разы(данное ПО не поддерживает Питон). Я работаю в Windows 10. Тут есть два решения:

Первое это использовать Windows Subsystem for Linux (WSL), это просто быстро, можно изначально поиграться на мелких проектах. Несколько простых приложений так скомпилировал, но когда начал работать над крупным отказался от этого варианта, очень много косяков всплыло в первую очередь постоянно требует установить какие то моду то Линуксовые то Питоновские.

- правой кнопкой на меню пуск, WindowsPowerShell (администратор), wsl --install, перезагрузка.

- переходим в папку с проектом через консоль WSL(cd и т.д. тут нужны уже знания команд Линукс). Или на папке, в которой находит основной файл программы (или внутри этой папки на пустом месте), и нажимаем сочетание Shift+ПКМ. В контекстном меню добавится новый пункт "Откройте здесь оболочку Linux", нажимаем туда.

sudo apt update

sudo apt upgrade

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

# сформируется файл настроек buildozer.spec заполняем его(это другая тема)

buildozer android debug deploy run

Потом часа 2 будет подгружать, формировать новые файлы, помню при удалении у меня их было аж 300 000 шт. Потом всё будет значительно быстрее.

Файл .apk будет в папке bin, дальше его можно скидывать на телефон.

____________________________________

Второе это создать виртуальную машину на базе Ubuntu. Кажется чем то страшным, но в итоге всё довольно просто и даже интересно.

Hyper-V уже встроена в Windows её лишь нужно активировать.

Я делал с помощью PowerShell: 

  • Откройте консоль PowerShell от имени администратора. 
  • Выполните команду:Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
  • После завершения установки перезагрузите компьютер.
Запускаем Hyper-V(ищем в меню Пуск) и создаем вирт машину одним из двух способов
Запускаем Hyper-V(ищем в меню Пуск) и создаем вирт машину одним из двух способов

Запускаем Убунту и уже работает далее там.

-3

Далее в терминале ставим всё необходимое:

sudo apt-get install python3

sudo apt-get install python3-pip

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 cython
sudo apt install git

git clone https://github.com/kivy/buildozer

cd buildozer #переходим в папку Buildozer

sudo python3 setup.py install

Перекидываем наш готовый kivy файл с Windows в Убунту через яндекс диск это самый простой вариант(потом как я можете заморочиться и создать общую папку через пакет Samba). ИМЯ ФАЙЛА ОБЯЗАТЕЛЬНО ДОЛЖНО БЫТЬ «main.py» иначе компиляция прервется.

Запускаем терминал с папки где у вас лежит main.py.

buildozer init

Формируется buildozer.spec, заполняем его по документации: https://buildozer.readthedocs.io/en/latest/specifications.html

Вкраце:

[app]

# (str) Title of your application

title = My Application

Название приложения, которое будет отображаться на рабочем экране смартфона.

# (str) Package name

package.name = myapp

Название приложения.

# (list) Application requirements

# comma separated e.g. requirements = sqlite3,kivy

requirements = python3,kivy

В этом пункте необходимо указать сторонние библиотеки, которые используются в вашем коде.

Библиотеки перечисляются через запятую, без пробелов.

# (str) Presplash of the application

#presplash.filename = %(source.dir)s/data/presplash.png

Изображение экрана загрузки вашего приложения

Обратите внимание, что строку нужно раскомментировать, т.е.  убрать знак #

# (str) Icon of the application

#icon.filename = %(source.dir)s/data/icon.png

Иконка вашего установленного приложения. В моем случае это

____________________________________________-

Начинаем:

buildozer android debug deploy run

Если так всё пойдёт то отлично, но у меня ругался на отсутствие виртуального окружения, создал так:

sudo apt install python3-venv -y

mkdir my_python3_project

cd my_python3_project

python3 -m venv nosta

-4

Всё теперь точно запускаем

buildozer android debug deploy run

Всё процесс пошёл в первый раз часа на два, по том у меня скомпилировалось за 2 минуты. В процессе может остановиться выполнение и начать ругаться на отсутствие какого-нибудь пакета, у меня по сравнению с WSL(первый способ) ругался один раз на пакет cython(хотя ранее я его ставил) ставим:

sudo apt-get install cython

Жмём опять

buildozer android debug deploy run

Всё готовые APK будут храниться в папке bin

-5

Далее забираем через яндекс диск на телефон и проверяем если есть косяки/баги то забираем на Винду и запускаем через Android Studio

-6

Android Studio очень функционально приложение, тут необходимо будет почитать. Очень жаль конечно, что нельзя работать с Питоном сразу в Android Studio (через костыли вроде можно, но у меня не получилось).

Всем удачи. Будут вопросы пишите.