Як розробляти на Python під Android?


Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.

Розповідає Олександр Тейлор, розробник проекту Kivy


Останнім часом з’являється велика кількість ресурсів з розробки на Python під Android. Все частіше згадується призначений для цієї задачі фреймворк Kivy (і його відгалуження), адже він є одним з найбільш перевірених часом і надійних проектів у цій галузі. Проте одну важливу деталь незаслужено обділяють увагою, що взагалі ми зможемо робити після того, як Python стане запускатися на пристрої? Чи є якісь обмеження? Чи всі бібліотеки можна підключати? Чи можна робити те саме, що і при написанні додатка на Java? Ці питання хвилюють багатьох, і вони розглядаються і вирішуються у рамках проекту Kivy. У цій статті я розгляну найцікавіші й важливіші деталі.

Python-for-android

Передусім давайте подивимося на те, за допомогою чого Python дістає можливість працювати під Android- інструмент, названий, як не дивно, python-for-android. Його основна функція полягає в тому, щоб створити дистрибутив – теку проекту, що містить усе необхідне для запуску Вашого додатка. А точніше, сам інтерпретатор, Kivy і бібліотеки, від яких він залежить: Pygame, SDL і декілька інших. Також дистрибутив має завантажувач Java, що відображає OpenGL, і виступає посередником між Kivy та операційною системою. Потім Ви додаєте до всього цього свої скрипти, налаштування на зразок іконки та імені, компілюєте за допомогою Android NDK. Ось і все – APK з Вашим додатком готовий!

І це лише базова процедура, насправді згенерований пакетний файл може включати (і включає) значно більше. Разом з усім іншим в APK ушивається велика частина стандартної бібліотеки, а будь-який сторонній модуль, написаний на Python, може бути легко доданий – все так само, як і при розробці десктоп-додатків. Додавання модулів з компільованими компонентами не становить труднощів, необхідно лише вказати, як їх треба складати. Як правило, достатньо лише поставити дві галочки перед запуском процедури складання, хоча в окремих випадках можуть знадобитися додаткові дії. Python-for-android вже включає вказівки для компіляції таких популярних модулів, як: numpy, sqlite3, twisted і навіть django!

Вищеописані принципи лише в загальних рисах пояснюють, як працює python-for-android. У будь-який момент Ви можете отримати більше інформації на цю тему, переглянувши документацію Kivy. Я рекомендую Вам Buildozer – надбудову для python-for-android, що являє собою зручний інтерфейс і автоматичний дозвіл деяких залежностей. Ми намагаємося зробити так, щоб написаний вище ланцюжок дій використовувався не лише в Kivy, але й в інших проектах. Основний процес складання залишиться таким самим, але завантажувач Java виявиться зайвим, оскільки він необхідний тільки для підтримки деяких специфічних потреб фреймворка.

Звернення до Android API за допомогою PyJNIus

Взаємодія з Android API: отримання інформації із сенсорів, створення повідомлень, вібрація, пауза і перезапуск, та що завгодно – важлива частина Вашого додатка. Kivy за Вас потурбується про основний, але багатьма речами Ви захочете управляти самі. Для цього створений PyJNIus – інструмент, що автоматично обертає код на Java в інтерфейс Python.

Як приклад наведемо програму, яка змусить телефон вібрувати протягом 10 сек.:

from jnius import autoclass# Спершу нам потрібне посилання на Java Activity, в якому# запущений додаток, вона зберігається в завантажувачі Kivy PythonActivityPythonActivity = autoclass ('org.renpy.android.PythonActivity') activity = PythonActivity.mActivity
Context = autoclass ('android.content.Context') vibrator = activity.getSystemService (Context.VIBRATOR_SERVICE) vibrator.vibrate (10000)  # аргумент вказується в мілісекундах

Якщо Ви ознайомлені з Android API, то без зусиль помітите, що код вище дуже схожий на аналогічний на Java – PyJNIus просто дозволяє нам звертатися до того ж API, але прямо з Python. Велика частина Android API може бути викликана так само, що дає змогу досягти того ж функціонала, що і за розробки на Java.

Головний мінус PyJNIus полягає в тому, що він потребує докладного розуміння структури Android API, а код виходить громіздким, хоча його еквівалент на Java виглядає так само. Для розв’язання цієї проблеми Kivy включає Plyer.

Plyer: кросплатформенне API для платформоспецифічних задач

Проект Plyer ставить собі метою створити простий “питонічний” інтерфейс для функцій, наявних на більшості платформ. Наприклад, код, наведений вище, легким рухом руки перетворюється на…

from plyer.vibrator import vibratevibrate (10)  # В Plyer аргументи вказуються в секундах

Більше того, написаний код спробує виконати свою задачу на всіх підтримуваних Plyer платформах, на даний момент це Android, iOS, Linux, Windows і OS X (для iOS також є аналог PyJNIus, що набула назви PyOBJus). Насправді, вібрація не кращий приклад, оскільки зараз вона реалізована тільки для Android, але такі функції як перевірка рівня заряду батареї:

from plyer import battery; print (battery.status)

чи text-to-speech:

from plyer import tts; tts.speak ('hello world')

працюють як в десктопних, так і в мобільних додатках, а отримання даних з компаса/гіроскопа і відправка SMS без проблем реалізуються на Android й iOS.

Plyer знаходиться на початковій стадії розвитку, так що будь-яка допомога в розробці вітається. Також ми беремо участь з ним у Google Summer of Code цього року.

Не лише заради Kivy

Усі вищеперелічені інструменти були розроблені для нашого фреймворка, але насправді вони більше призначені для розробки під Python у цілому. У Plyer ми спеціально уникаємо якоїсь залежності від Kivy, а PyJNIus потрібний лише для доступу до Android JNI. Сподіваємося, що ці інструменти будуть корисними для будь-кого, хто пише на Python під Android. Ви можете спробувати PyJNIus, використовуючи QPython. Python-for-android більше зав’язаний на взаємодії з Kivy, але ми радо обговоримо це питання з Вами.

Багато чого можна реалізувати при розробці на Android за допомогою Python, незважаючи на всі відмінності з Java, яка призначена для цього, але ці можливості можуть бути розширені ще більше в найближчому майбутньому. І якщо Ви зацікавилися описаними вище проектами, то саме час приєднатися до нашої команди!

Переклад статті “Python on Android”

Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?


Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *