Недавно я открыл для себя фреймворк Kivy, с помощью которого можно разрабатывать приложения для множества платформ - десктопных и мобильных, используя язык Python. Так как я очень тепло отношусь к этому языку - пройти мимо возможности создавать мобильные приложения на нем я просто не мог.
Знакомство, пожалуй, стоит начать со среды сборки под Android - Buildozer. Этот инструмент позволяет сильно упростить сборку проектов Kivy, избавляя от необходимости прямого взаимодействия со средством python-for-android (на базе которого Buildozer и построен). К сожалению на текущий момент Buildozer доступен только на unix-подобных системах, так что на Windows придется идти обходными путями и работать в виртуальной машине. Однако, в ближайшем будущем, когда доведут до ума систему WSL проблема наверняка устанится. А пока - качаем VirtualBox, ставим на него мой любимый диструбутив Linux Mint. Процесс установки тривиален и я не буду заострять на нем внимание. По его завершению переходим к самому интересному - непосредственно установке Buildozer. Для этого запускаем консоль и вводим команду:
sudo apt-get install python3-venv
Этой командой мы поставим виртуальное окружеие venv, внутри которого мы и будем уже создавать инфраструктуру для среды сборки. Переходим в домашний каталог и выполняем:
python3 -m venv buildozer
cd buildozer
source bin/activate
pip install buildozer
sudo apt-get install zlib1g-dev git cython openjdk-8-jdk autoconf autotools-dev automake libtool libltdl-dev
Далее нужно убедиться, что мы используем именно восьму версию Java. Для этого вводим команду:
sudo update-alternatives --config java
Если используется не восьмая версия Java - выбираем ее вводом соответствующей цифры.
Этим мы установим :среду сборки Buildozer и все нужные библиотеки. Теперь надо инициализировать новый проект. Для этого вводим:
buildozer init
Данная команда создаст новый проект и файл конфигурации buildozer.spec о котором стоит поговорить отдельно. Пока же, так как мы просто подготавливаем среду для сборки, создадим самое минимальное приложение на Kivy, которое не будет делать ничего интересного, только напишет “Hello”. Для этого код ниже сохраняем в файл main.py:
import kivy
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
def build(self):
return Label(text='Hello world')
if __name__ == '__main__':
MyApp().run()
И тут начинаются некоторые трудности. Я владею уже не новым аппаратом на Android 4.4.4, но он меня полностью устраивает. Однако, API в этой версии - 19, а на текущий момент buildozer поддерживает минимальный API версии 21 (т.е. Android 5.0). Но это не повод расстраиваться - путем нехитрых манипуляций все удалось починить и заставить собраться приложение и под мой аппарат. Для этого нужно скачать специальный NDK CrystaX и куда-нибудь распаковать. Я разместил архив в папке .buildozer/ и распаковал его следующей командой
tar -xvf crystax-ndk-10.3.2-linux-x86_64.tar.xz
Далее следует внести корректировки в файл настроек buildozer.spec
Меняем следующие строчки:
После чего попробуем собрать наше приложение.
buildozer android debug
И тут нас встречает сообщение об ошибке:
[ERROR]: Build failed: The python3crystax recipe can only be built when using the CrystaX NDK. Exiting.
Но как? Мы же указали путь к CrystaX, в чем может быть проблема?
Элементарно! Все ошибаются, и в скрипте сборки есть проблема. Починить ее несложно, для этого надо открыть файл ~/buildozer/.buildozer/android/platform/python-for-android/pythonforandroid/recipes/recipe.py
и закомментировать в нем строчку, чтобы метод изменился вот так:
def prebuild_arch(self, arch):
super(TargetPythonRecipe, self).prebuild_arch(arch)
if self.from_crystax and self.ctx.ndk != 'crystax':
'''raise BuildInterruptingException(
'The {} recipe can only be built when '
'using the CrystaX NDK. Exiting.'.format(self.name))'''
self.ctx.python_recipe = self
После этой правки повторно запускаем сборку, и спустя некоторое время видим сообщение об успехе. После чего спешим испытать свежесобранное приложение на телефоне. Для этого с помощью adb (инструкцию ищем в гугле) устанавливаем наш пакет:
adb install myapp-0.1-debug.apk
Проверяем, радуемся привету от Kivy. Однако, собранный пакет не подписан и не будет устанавливаться кроме как через adb. Чтобы это починить и иметь возможность сбросить приложение друзьям нужно пакет подписать. Об этом будет отдельная заметка.