QPython или Kivy для программирования Android с помощью Python — создание устанавливаемого apk

Прочитав несколько вопросов и ответов по SO, я понял, что у одного есть 2 варианта, то есть QPython и Kivy для программирования для Android, однако, по-видимому, оба используют разные подходы. Я пытаюсь проверить свое понимание и посмотреть, не упустил ли я какую-то ключевую информацию.

  • QPython позволяет использовать библиотеку Kivy для разработки графических приложений.
  • QPython и Kivy используют SL4A, в то время как QPython расширил стандартный SL4A (или его привязки для Python), добавив некоторые NFC и аналогичные функции.
  • QPython используется для создания скриптов Python, которые могут использовать широкий спектр модулей, библиотек, но для их выполнения на целевом устройстве требуется установленный QPython. Невозможно упаковать скрипт в apk.
  • Kivy OTOH позволяет разработчику писать приложения, которые компилируются в apk, используя их облачную систему сборки (альтернатива — локальная система сборки может быть настроена в Ubuntu Linux) [Однако я заметил, что большинство примеров apk, использующих Kivy довольно большие, в диапазоне 40 МБ. Я что-то пропустил?]
  • QPython apk имеет 2 версии: одну для Python-2.7, а другую для Python-3.x. Для Kivy я не уверен, какая это версия.
  • Пример скрипта QPython (HelloWorld.py), похоже, ведет себя не так, как ожидалось, из последней версии QPython-3.x из Market в системе Android Kitkat (4.4.2). Я получаю диалоговое окно для ввода текста, но затем я ожидаю появления всплывающего уведомления, но ничего не происходит.
  • Создается впечатление, что и QPython, и Kivy разрабатываются одним разработчиком (или только один человек в настоящее время действительно активен) и еще не имеют большого сообщества. [Это меня больше всего беспокоит] Я заметил, что на SO есть 3-4 вопроса с тегом qpython и более тысячи с kivy!
  • Также складывается впечатление, что на данный момент разработка Kivy несколько более активна (возможно, довольно активна), но для QPython у меня нет четкой картины.
  • Kivy, похоже, пытается расширить природу приложения, которое можно было бы написать с его помощью, по сравнению с QPython. Существуют такие API, как plyer и pyjnius, которые помогают расширить возможности. Возможно, весьма существенно по сравнению с QPython.
  • И QPython, и Kivy, похоже, находятся в стадии разработки. О сбоях программы (/скрипта) (/сбоях), по-видимому, сообщается в обоих наборах инструментов.

В целом, мнение в результате (по вышеуказанным пунктам), кажется, немного больше склоняется в пользу Kivy. Правильно ли понимание? Я пропустил какой-то важный момент? Это не риторический вопрос, и я ищу только фактические ответы.


person bdutta74    schedule 17.01.2015    source источник


Ответы (2)


QPython позволяет использовать библиотеку Kivy для разработки графических приложений.

Да, qpython — это интерпретатор + связанные с ним инструменты, и у него есть хорошая интеграция с kivy. Однако вы не можете скомпилировать код kivy в отдельный apk только с qpython + android.

QPython и Kivy используют SL4A, в то время как QPython расширил стандартный SL4A (или его привязки для Python), добавив некоторые NFC и аналогичные функции.

Kivy не использует SL4A. Мы достигаем интеграции Android API в основном с помощью pyjnius, библиотеки для автоматической упаковки классов Java в Python, которая позволяет напрямую вызывать Java API. Мы также абстрагировали некоторые стандартные вещи в питонический интерфейс с помощью plyer.

(Позже я увидел, что вы их уже нашли)

QPython используется для создания скриптов Python, которые могут использовать широкий спектр модулей, библиотек, но для их выполнения на целевом устройстве требуется установленный QPython. Невозможно упаковать скрипт в apk.

Я не использую qpython много, но я думаю, что это правильно, хотя могут быть некоторые инструменты, превращающие скрипты в apks в некоторых обстоятельствах (например, вы можете использовать инструменты сборки kivy, если у вас есть интерфейс kivy, или, может быть, sl4a имеет что-то для этого ).

Kivy OTOH позволяет разработчику писать приложения, которые компилируются в apk, используя их облачную систему сборки (альтернатива — локальная система сборки может быть настроена в Ubuntu Linux) [Однако я заметил, что большинство примеров apk, использующих Kivy, довольно большие , в диапазоне 40 МБ. Я ничего не пропустил?]

У нас есть базовая облачная система сборки, но ничего подобного сейчас нет, почти каждый создает apk на своей машине, используя наши инструменты сборки для Android. Они работают на Linux или OSX и при необходимости могут быть легко запущены на виртуальной машине.

Минимальное приложение имеет размер APK около 7 МБ из-за необходимости связывать интерпретатор Python и множество модулей.

QPython apk имеет 2 версии: одну для Python-2.7, а другую для Python-3.x. Для Kivy я не уверен, какая это версия.

Сам Kivy поддерживает python3, но наши инструменты сборки Android пока поддерживают только python2.7.

Создается впечатление, что и QPython, и Kivy разрабатываются одним разработчиком (или только один человек в настоящее время действительно активен) и еще не имеют большого сообщества. [Это меня больше всего беспокоит] Я заметил, что на SO есть 3-4 вопроса с тегом «qpython» и более тысячи с «kivy»!

Разработка Kivy довольно активна с несколькими постоянными участниками и более спорадическими. Например, вы можете увидеть недавнюю активность фиксации на github. Это, безусловно, намного больше, чем один разработчик!

Kivy, похоже, пытается расширить природу приложения, которое можно было бы написать с его помощью, по сравнению с QPython. Существуют такие API, как plyer и pyjnius, которые помогают расширить возможности. Возможно, весьма существенно по сравнению с QPython.

Я думаю, что qpython включает pyjnius. Насчет плайера не уверен.

И QPython, и Kivy, похоже, находятся в стадии разработки. О сбоях программы (/скрипта) (/сбоях), по-видимому, сообщается в обоих наборах инструментов.

Я не уверен, на что вы смотрите, но любой нетривиальный проект будет иметь сообщения о сбоях/сбоях/ошибках. Я не думаю, что kivy особенно нестабилен по своей природе.

В целом, мнение в результате (по вышеуказанным пунктам), кажется, немного больше склоняется в пользу Kivy.

Я бы сказал, что qpython и kivy — это совсем разные вещи. Qpython позволяет писать и запускать сценарии, а kivy — это графическая среда и связанные с ней инструменты для создания автономных приложений. Есть некоторое совпадение с задачами, которые могут быть выполнены с помощью обоих из них, но также есть много вещей, где они оба не подходят - например, я думаю, что qpython, вероятно, намного удобнее для создания быстрых скриптов без графического интерфейса, например. простая автоматизация (я думаю, что это возможно), тогда как я думаю, что kivy — гораздо лучший выбор для создания автономных приложений с нетривиальным графическим интерфейсом. Конечно, вы можете написать kivy-код в qpython, как обсуждалось, но это не лучший пользовательский опыт для чего-то нетривиального, и вам все равно нужен настольный компьютер/ноутбук, чтобы сделать автономный apk.

person inclement    schedule 17.01.2015
comment
Спасибо за подробный ответ. Картинка определенно стала четче. Если не SL4A, я думаю, что и QPython, и Kivy используют «Python для Android», хотя до сих пор я не очень понимаю, что это такое, и может быть, это другое имя для SL4A? Я видел заметку о том, что в будущем будет доступна коммерческая поддержка kivy. Есть ли известное время прибытия (даже приблизительная оценка)? Изменит ли это лицензирование kivy в любом случае? т.е. перейти на двойную лицензию или что-то подобное? - person bdutta74; 17.01.2015
comment
Кроме того, ответ на вопрос о среде сборки (только для облака), означает ли это, что предварительно созданный образ Virtualbox пока не работает должным образом? - person bdutta74; 17.01.2015
comment
Образ виртуального бокса должен работать нормально, хотя в настоящее время он немного устарел, и мы, вероятно, скоро его обновим. - person inclement; 17.01.2015
comment
На самом деле существует как минимум два проекта Python для Android: один от sl4a и один от kivy. Kivy создает apks из приложений kivy. Qpython использует части начальной загрузки Android, чтобы вы могли запускать приложения kivy (по крайней мере, я предполагал, что это так), но, возможно, использует и sl4a, я не знаю природу его установки на python. - person inclement; 17.01.2015
comment
Что касается коммерческой поддержки, вы уже можете попросить об этом, и некоторые разработчики делают это профессионально, хотя я не знаю никаких подробностей. Лицензия уже в порядке (очень разрешительная). - person inclement; 17.01.2015
comment
Отлично... так что пока это облачная сборка. И, спасибо, я понял цель проекта python-for-android после прочтения этого. Приятно знать, что при необходимости доступна коммерческая поддержка. - person bdutta74; 17.01.2015
comment
Нет облачной сборке, почти все строят локально! Используем ли мы этот термин, чтобы использовать здесь две разные вещи? У нас есть android.kivy.org, но он мало используется и может быть ненадежным, и у одного из разработчиков (тито) есть служба облачной сборки в альфа-/бета-версии, но это не основной способ, которым люди создают kivy apks. - person inclement; 17.01.2015
comment
Извините, я неправильно понял пункт о средах сборки. Сейчас ясно. - person bdutta74; 17.01.2015
comment
@icarus74, для производительных Android-приложений, есть ли смысл иметь APK, который сочетает Python 3.4 для всего, кроме графического интерфейса, и JavaScript Cordova для пользовательского интерфейса? Графическому интерфейсу нужно только выглядеть/чувствовать себя родным, а также иметь сенсорные возможности, в идеале APK должен быть упакован и запускаться после установки, не требуя от пользователей загрузки цепочки зависимостей. не планирует переходить на кросс-платформу с iOS. Windows 8+/Linux Ubuntu 14.04 — это кроссплатформенные среды, на которые я, возможно, попытаюсь ориентироваться позже. - person codeReview; 29.07.2015
comment
@codeReview, это звучит как потенциально хороший подход, хотя я не совсем уверен, есть ли очевидный способ соединить нативную часть Kivy/Qpython и Cordova, если только кто-то не напишет (или уже не написал) плагин. Это особенно хорошо, когда много бизнес-логики может быть написано / уже существует — написано на питоне, а взаимодействие с пользователем происходит лишь изредка. Во всяком случае, что-то стоящее изучения. - person bdutta74; 29.07.2015
comment
Я работаю над обновленным python-for-android. Помимо прочего, он поддерживает несколько бэкэндов, и должно быть довольно легко создать тот, в котором бэкэнд python использует, например. flask с интерфейсом веб-просмотра с использованием html и javascript. - person inclement; 29.07.2015
comment
Меня беспокоят модули: numpy, scipy и matplotlib. Они поддерживают только numpy. Поэтому я не могу заставить свою работу двигаться дальше. - person Slim_user71169; 26.08.2015
comment
Matplotlib, вероятно, довольно легко запустить на Android, у нас только что был проект gsoc, поэтому часть работы выполнена. Я думаю, что поддержка scipy маловероятна. - person inclement; 26.08.2015

Есть как минимум еще два (хотя, насколько мне известно, только теоретические) способа запуска кода Python на Android:

  • Используйте jython и преобразуйте байт-код Java в Dalvik, как упоминается в другом месте. К сожалению, не все библиотеки CPython, например. numpy доступны для jython, и если вы используете библиотеки Java, имейте в виду, что Android не предоставляет те же самые, что, например. настольная JRE
  • Используйте nuitka, который генерирует код C++ из вашего кода Python. . Затем используйте .
person Tobias Kienzler    schedule 02.03.2015
comment
Спасибо за ответ, Тобиас. Читая связанные вопросы и ответы SO, кажется, что jython - это только теоретическая возможность, которая, как позже оказалось, является почти непрактичным подходом. Если, конечно, я что-то не упустил. За наводку на Nuitka, в общем, спасибо. Никогда не знал, что он существует, и это очень интересно для ситуаций, когда важна производительность. - person bdutta74; 02.03.2015
comment
Я бы не назвал jython непрактичным подходом, просто непроверенным (поэтому, вероятно, утомительным для работы), который я планирую изменить в какой-то момент в недалеком будущем... Что касается оптимизации производительности, вам следует также проверьте numpy (или PyPy, Cython и, возможно, Shedskin) - person Tobias Kienzler; 02.03.2015