- Packaging PyQt application using pyqtdeploy for both Linux and Android
- Prerequisite
- Linux
- Android
- Android Studio
- Installing Android SDK
- Installing our Android NDK
- Downloading Qt 5.12.2
- Building the pyqt-demo .apk
- Инструменты для запуска Python на Android
- 1. Пчеловодство
- 2. Chaquopy
- 3. Киви
- 4. Pyqtdeploy
- 5 QPython
- 6. SL4A
- 7. PySide
- 8.Termux
- Радость и грусть разработки на Qt под Android (и не только)
- Проблема №1
- Проблема №2
- Проблема №3
- Проблема №4
- Проблема №5
- Бонус №1
- Бонус №2
- Бонус №3
- Резюме
Packaging PyQt application using pyqtdeploy for both Linux and Android
Aug 21, 2019 · 5 min read
This article is a guide on building the pyqt-demo application for both Linux and Android using pyqtdeploy tool.
It should also be possible to build Android applications on Windows and Linux but this isn’t tested. — Pyqt-demo README
Prerequisite
It is assume that you have already installed python 3 and pip for this part.
Pyqtdeploy is on pip so we can easily install it :
Now we need the pyqt-demo code source. You can find it on the pip website. Download the source code and extract the demo folder : https://pypi.org/project/pyqtdeploy/#files
You should have the following structures :
Now if we open sysroot. j son we will find that we need to download some libraries for our app and it might differ from platforms to platform. Like you might need openssl-1.0.2r.tar.gz for android.
In order to speed up the process and not have to manually download everything. We can use this small script to download everything at once.
Notes: Remember this is for Linux and Android. If you are using another platform you might want to verify the sysroot.json file for openssl version.
Linux
We have basically everything needed to start building our demo app for Linux. It doesn’t get more complicated than that.
Using the —verbose option will show the details of the build. It is not required but can help with understanding what is happening. The build will take time because it will build Qt 5.12.2 from source for us.
We notice also in the sysroot.json that we can specify which modules to build and which to skip. It can really help to speed up the build time. You also obviously don’t need to rebuild it every time. Looking a bit more closely in the build-demo.py file we realize that it execute several steps :
- pyqtdeploy-sysroot
- pyqtdeploy-build
- qmake
- make or nmake for windows
Another file we can take a look at is the pyqt-demo.pdy which is used in step 2. This file is actually auto generated by pyqtdeploy .
This tool will generate a .pdy for you and help you include all the files needed for your application. You can find more details in the official documentation. For now, we don’t need to modify this as we already have our project file.
We have reviewed the basic components of a pyqtdeploy project. I recommend you keep exploring the 3 files we mentioned to understand a little bit more the structure.
Android
Building for Android might be a little bit more tricky and requires extra tools and libraries. The official documentation lacks a bit of information on this. This section will try to complete the official tutorial in particular for people who might have never done Android development like me.
Android Studio
First step would be to install Android Studio. We don’t need the full IDE for android development but it will install all the tools we want and offer an easy to use interface to download the libraries needed. Also you will have an emulator installed for testing your .apk package in case you don’t have an android device on which to test your app.
Installing Android SDK
I have a device (tablet Nexus 9) running Android Nougat (7.1.1) so I am going to build for it.
Open Android Studio and click on Configure -> Settings
Now choose Android 7.0 (Nougat).
Click on Apply to install the SDK.
Note : Why didn’t I choose Android 7.1.1 (Nougat)? Unfortunately, I attempt to use it but always got an error message saying that my NDK wasn’t compatible with this version and that for several NDK version…
Installing our Android NDK
Because we are using Qt 5.12.2 we need Android NDK 19c version. For some unknown reason the latest is not compatible.
You can extract it in your Android folder which should have been created in your user space and already has your Sdk folder with the Android SDK with downloaded previously. You can create an
Downloading Qt 5.12.2
When building for Android, we are not going to build Qt 5.12 from source. Instead you will need to download it : https://www.qt.io/download
You can install it in your user folder under (e.g
/Qt/ ). Be sure to remember the path we will need it.
Now be sure you have a folder named android_armv7 . It is the folder name specify in the sysroot.json for Android target. In our case, it should be here
Building the pyqt-demo .apk
We have all the libraries needed to build the Android app.
This little guide summarize the all process to create the PyQt demo application. One of the advantage of using PyQt is to be able to build for multiple platform app and unlike the more famous Electron it doesn’t ship an entire browser with it.
Источник
Инструменты для запуска Python на Android
Дата публикации Jun 14, 2018
Python зарекомендовал себя как очень способный язык — доступный для новичков, но мощный в руках экспертов. Почему ты не можешьвезде используйте Pythonчто нужно сказать компьютеру что-то сделать? И не должны ваши инструментыиспользовать все возможности Pythonкак язык, а не только биты, которые красиво отображаются на привязку C?
Современные вычисления не происходят в окне консоли 80×25. Это происходит нателефоны, планшеты и настольные компьютерыс богатыми пользовательскими интерфейсами. Разве вы не сможете использовать Python во всех этих местах, ииспользовать уникальные возможности этих платформ?
Конечным пользователям не нужно заботиться о том, на каком языке написаны их инструменты. И это начинается с того, как они выглядят и ведут себя.как полностью родные инструменты, Родной внешний вид, собственное поведение, доставленное способом, которым доставлено нативное приложение. Почему ваши инструменты Python не должны подходить так же хорошо, как нативный инструмент?
Есть несколько способов использовать Python на Android.
1. Пчеловодство
BeeWareпредставляет собой набор инструментов для создания собственных пользовательских интерфейсов
Это то, что предлагает BeeWare. Инструменты, которые помогут вам написать код Python с богатым,родной пользовательский интерфейс; и библиотеки и код поддержки, необходимые для запуска этого кодаiOS, Android, macOS, Linux, Windows, TVOS и многое другое,
Открытый источник
Процесс разработки Open Source зарекомендовал себя как самый надежный способ разработки надежного и надежного программного обеспечения. Вот почему весь набор инструментов BeeWare лицензирован BSD, идоступно всем для использования и изменения,
2. Chaquopy
Chaquopyэто плагин для системы сборки Android на базе Gradle.
Chaquopy позволяет свободно смешивать Java и Python в вашем приложении, используя любой язык, который лучше всего соответствует вашим потребностям:
- СPython APIВы можете написать приложение частично или полностью на Python. Полный Android API и инструментарий пользовательского интерфейса находятся в вашем распоряжении.
Chaquopy работает в стандартной системе сборки Android:
- Если вы используете Android Studio, вы можете начать использовать Chaquopy за 5 минут без изменений в существующем процессе разработки.
- Загрузка и установкаавтоматизированы с помощью Gradle.
- Попробуйте демо-приложение дляPython 2илиPython 3,
- Просмотрите пример исходного кода наGitHub,
- Или просмотритедокументация,
3. Киви
Kivyпредставляет собой кроссплатформенный набор инструментов пользовательского интерфейса на основе OpenGL.
Вы можете запускать приложения Kivy на Android, на (более или менее) любом устройстве с OpenGL ES 2.0 (минимум Android 2.2). Это стандартно для современных устройств; Google сообщает, что требование выполнено99,9% устройств,
Kivy APK — это обычные приложения для Android, которые вы можете распространять, как и любые другие, в том числе в таких магазинах, как магазин Play. Они ведут себя должным образом при приостановке или перезапуске, могут использовать службы Android и иметь доступ к большей части обычного API Java, как описано ниже.
Следуйте инструкциям ниже, чтобы узнать, какупаковать свое приложение для Android,отладить ваш код на устройстве, а такжеиспользовать API для Androidнапример, для датчиков вибрации и считывания.
Проект Kivy предоставляет все необходимые инструменты для упаковки вашего приложения на Android, включая создание собственного автономного APK, который может распространяться на рынке, таком как магазин Play. Это покрыто полностью вСоздать пакет для Androidдокументация.
Использование Android API
Хотя Kivy является платформой Python, проект Kivy поддерживает инструменты, позволяющие легко использовать обычные API-интерфейсы Java — от вибрации до датчиков и отправки сообщений через SMS или электронную почту.
Для новых пользователей мы рекомендуем использоватьPlyer, Для более расширенного доступа или для API, которые в настоящее время не упакованы, вы можете использоватьPyjniusнепосредственно. Киви также поставляетмодуль Androidдля базовой функциональности Android.
Пользователь добавил код Android и примеры доступны наKivy Wiki,
4. Pyqtdeploy
пyqtdeployинструмент для развертывания приложений PyQt Он поддерживает развертывание на настольные платформы (Linux, Windows и OS X) и на мобильные платформы (iOS и Android).
pyqtdeploy работает, беря отдельные модули приложения PyQt, замораживая их, а затем помещая их в файл ресурсов Qt, который конвертируется в код C ++ с помощью инструмента Qt rcc. Стандартная библиотека Python обрабатывается таким же образом.
pyqtdeploy также генерирует файл Qt .pro, который описывает весь сгенерированный код C ++. Из этого инструмента Qmake Qt используется для генерации специфичного для платформы Makefile, который затем генерирует один исполняемый файл. Затем можно использовать дополнительные инструменты Qt и / или платформы для преобразования исполняемого файла в развертываемый пакет для конкретной платформы.
Для установки pyqtdeploy требуются PyQt5 и Python v3.2 или новее.
Поддерживаются приложения PyQt4 и PyQt5, написанные с использованием Python v2.6 и новее и Python v3.3 и новее.
pyqtdeploy выпускается под лицензией BSD.
5 QPython
QPythonэто скрипт-движок на устройстве и среда разработки
В большинстве случаев скрипт может выполнять вашу работу так же хорошо, как и собственное приложение. Теперь вы можете сделать это с помощью QPython.
QPython — это скрипт-движок, который запускает программы на Python на устройствах Android. Это также может помочь разработчикам разрабатывать приложения для Android.
QPython включает в себя полный комплект для разработки, который поможет вам разрабатывать программы с помощью мобильных устройств, предоставляет обычную консоль Python
6. SL4A
SL4A(Scripting Layer для Android), первоначально названный ASE (Android Scripting Environment), представляет собой набор «фасадов», которые предоставляют значительно упрощенное подмножество API Android.
SL4A предоставляет языки сценариев для Android, позволяя редактировать и выполнять сценарии и интерактивные переводчики непосредственно на устройстве Android. Эти сценарии имеют доступ ко многим API-интерфейсам, доступным для полноценных приложений Android, но с очень упрощенным интерфейсом, облегчающим выполнение задач.
Скрипты могут быть запущены в интерактивном режиме в терминале и в фоновом режиме. В настоящее время поддерживаются Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl и shell, и мы планируем добавить еще. УвидетьSL4A Video Helpплейлист на YouTube для различных демонстраций функций SL4A.
SL4A предназначен для разработчиков и являетсяальфакачественное программное обеспечение.
7. PySide
PySide(привязка Python для инструментария Qt) имеет некоторую предварительную поддержку Android.
Проект PySide предоставляет привязанные к LGPL привязки Python дляQt 4, Он также включает полный набор инструментов для быстрой генерации привязок для любых иерархий классов C ++ на основе Qt. Привязки PySide Qt позволяют разрабатывать как бесплатное программное обеспечение с открытым исходным кодом, так и проприетарное программное обеспечение, и в конечном итоге направлены на поддержку платформ Qt.
8.Termux
Termuxявляется эмулятором терминала Android и приложением среды Linux, которое работает напрямую без необходимости рутирования или настройки. Минимальная базовая система устанавливается автоматически — дополнительные пакеты доступны через менеджер пакетов APT.
Источник
Радость и грусть разработки на Qt под Android (и не только)
Qt я использую достаточно давно, начиная с версии 4.1. Не сказать, что я «профессионально» его использую, но опыт был разный — и работы с виджетами и эволюции до версии 5.6.
Некоторые примеры проектов:
- Пульт управления караоке-центром (Android/iOS)
- Русско-Татарский словарь с кастомной клавиатурой (Android/iOS/WP), тогда ещё даже API для iOS кастомных клавиатур не было
- Cоциальная сеть с разными примбамбахами под Android (гео, блютуз, чаты, фотки, профили и т.д.)
- Приложение для быстрого заказа цветов (Android/iOS/WP)
Кроме того, на Qt написано Android приложение 2gis, на котором вы и можете проверить большинство описанного здесь.
Заранее прошу меня поправить, если что-то из описанного здесь имеет ненайденные мною пути решения (буду благодарен, если вы их укажете). Всё нижесказанное относится по большей части к Android.
Проблема №1
Первое и самое главное на сегодняшний момент: если вам нужно много работать с текстом, вводимым пользователем — не выбирайте Qt/Qml!
Крайне не люблю восклицательные знаки, но тут этот знак на своём месте: вам будет крайне сложно реализовать привычное для пользователей целевой платформы работы с полями ввода, а именно:
- Выделение текста
- Copy & Paste
Суть проблемы: баг работы с элементом редактирования текста висит аж с 2014 года, отмечен как Important и зарегистрирован пользователем с Silver подпиской, но до сих пор не исправлен. В багтрекере описан обходной путь, но если вы хотите использовать не Quick.Controls а чистый Quick с TextEdit и TextInput — извините.
Возможно кто-то скажет, что я слишком многого хочу и TextEdit/TextInput это базовые компоненты, но, извините меня, отсутствие Copy & Paste в базовых компонентах и отсутствие его реализации в Controls не будут вам доставлять проблем до первого замечания Заказчика.
TextEdit не содержит сигналов работы с указателем, типичных для MouseArea, поэтому попытка реализовать показ контекстого меню через долгое нажатие (PressAndHold в терминах Qml) успехом не увенчается. Кроме того, попытка в лоб обернуть поле ввода в MouseArea подходит лишь для ограниченного числа сценариев, т.к. вам придётся долго и упорно реализовывать выставление курсора между буквами и словами.
Поэтому, остаётся либо лезть в исходники и кастомизировать поле ввода, либо смириться.
Проблема №2
Второе и самое любимое заказчиками приложений, содержащий социализацию: Emoji
Суть проблемы: отсутствует нативная обработка любимых всеми смайликов, что в полях ввода, что в тексте — развивайте фантазию и реализуйте сами.
Узнать, что такое на самом деле Emoji и какова нелёгкая судьба их реализации в различных ОС вам поможет статья в Википедии. По факту же, какие есть варианты:
- Использовать шрифт с поддержкой символов Emoji. Используйте FontForge для компиляции Roboto с Emoji!
- RichText с заменой символов Emoji на цветные png’шки
- Глубокая кастомизация поля ввода (можете посмотреть в исходниках телеграмма для десктопа)
Итого: либо оно выглядит некрасиво (вариант 1), либо глючит (вариант 2), либо требует отличных знаний внутренностей Qt (вариант 3 — а если они у вас есть, вам не стоит труда решить большинство проблем).
P.S. Забавная забавность — не выставляйте никаких inputMethodHints у поля ввода, иначе встроенная Android клавиатура с Emoji (iWinn IME) у вас просто не покажется.
Проблема №3
Третье и самое раздражающее: Мерцание и BlackScreen’ы — ваши лучшие друзья.
Это будет сопровождать вас при загрузке приложения, при попытке выставить windowSoftInputMode в AdjustResize, куски чёрного экрана будут тоже периодически появлятся. Поэтому тестируйте, тестируйте и ещё раз тестируйте на реальных девайсах.
Проблема №4
Четвёртое и самое трудноловимое: Шрифты
Суть проблемы: на разных девайсах каждый год всплывает одно и то же, симптомами похожее на закрытый баг. Вы не узнаете об этом, пока счастливый обладатель андроид-девайсана начнёт жаловаться на то, что шрифт плывёт, ломается, невидимый и т.д. В основном, это китайско-корейские девайсы.
Выход здесь только один — брать исходники Qt и патчить под конкретный GPU.
Проблема №5
Пятое и самое спорное: продвинутые контролы Qml — Camera и иже с ними.
Суть проблемы: частые краши, нехватка функциональности и прочие несоответствия стандартного пользовательского опыта нативных приложений. Лечится это всё очень просто — не стесняйтесь добавлять нативные компоненты (Activity в случае Android) в своё приложение. Да, от этого его кроссплатформенность снизится, а количество кода увеличится, но оно того стоит.
Бонус №1
Первое и самое важное: реальная кроссплатформенность.
Суть: после того, как ребята из SQLite портировали своё детище под WP, а скромный автор сего произведения указал на это ребятам из Qt, в порт Qt для WP был добавлен LocalStorage. Это счастье для всех любителей Qml.
Вы реально можете создавать приложения из одних исходников, реально под кучу платформ, при этом кастомизировать их в нужных местах исходя из возможностей и необходимостей платформы. Декларативный UI и js затягивают настолько сильно и позволяют писать настолько лаконичный код, что возвращаться после него на многословную Java + xml, либо спорный Swift + Storyboard’ы нет никакого желания.
Любые анимации, поддержка кастомных шрифтов, svg — это ли не счастье для мобильного разработчика?
Бонус №2
Второе и самое любимое заказчиками: нестандартность.
Суть: фраза от заказчика, приводящая к желанию убивать — «Сделайте как на айфоне». Теперь это не проблема, везде будет выглядеть примерно одинаково. Да, это нарушение гайдлайнов, да, это нехорошо и никогда так не делайте, но заказчик хочет так и у вас три пути — убедить его, уступить ему или отказаться от него, выбирайте сами.
Кроме того, при достаточном желании можно подхачить исходники платформы, так, как нужно именно вам. Так, в нескольких приложениях мы просто насовсем отключали клавиатуру и писали свою на базе Qt Virtual Keyboard, тогда как встроенные приложения таких возможностей не имели.
Бонус №3
Третье и самое любимое мной: скорость разработки.
Суть: в любом состоянии вы можете спроектировать UI практически любой сложности (исключая особенности взаимодействия с ОС, такие как поля ввода, обработка устройства ввода и т.д.). Если вы сам себе заказчик — то перед вами все дороги открыты.
Резюме
Начиная новый проект стоит прежде всего правильно для себя оценить границы развития этого проекта. Если в нём мало работы с нативными возможностями платформы и много нестандарта — используйте Qt. Если же наоборот — подумайте, сможете ли вы его доработать так, как вам нужно.
Спасибо за внимание! Поделитесь своим опытом использования Qt в разработке мобильных приложений в комментариях.
Источник