Développement d'applications Ubuntu Touch avec Python avec pyOtherSide
Les applications Ubuntu Touch sont développées avec Qt5 et C++. En utilisant pyOtherSide on peut utiliser Python au lieu de C++.
Probablement beaucoup d'entre vous ne connaissent que deux systèmes d'exploitation de téléphonie mobile, iOS sur les téléphones Apple et Googles Android sur les autres téléphones (environ 80%). Mais il y a aussi Ubuntu Touch (UT) développé à l'origine par Canonical Ltd et poursuivi par UBports. J'écris un post à ce sujet parce que j'utilise UT sur un Nexus 5 et je me demande à quel point il serait difficile de développer des applications pour cela. Quand j'ai découvert que vous pouvez utiliser Python au lieu de C++, j'ai pensé pouvoir vous inciter à regarder dans Ubuntu Touch et à commencer à développer une application pour elle.
Mon historique avec Ubuntu Touch
J'ai commandé le BQ Aquaris E4.5 Ubuntu Edition en avril 2015 pour moi et un ami après que Ubuntu Touch soit sorti en 2014. Après environ six mois de mises à jour, la plupart des problèmes ont été résolus par Ubuntu et le téléphone est devenu mon pilote quotidien, OS merveilleux. J'ai perdu le téléphone pendant un voyage et je suis passé à Lineageos sans Gaps. Bien que la sécurité soit un sujet sérieux dans les communautés Android custom ROM , la confidentialité n'est pas vraiment chaud, ce qui signifie que presque tous les custom ROMs'phone home' à Google, lorsque le téléphone, ont par défaut recherche contact Google activé, essayer de extraire et envoyer votre localisation, etc sans parler des vulnérabilités et des mauvaises applications qu'on entend tout le temps. Google fait tout ce qu'il faut pour obtenir vos données. Je pense qu'on peut les traiter de voleurs. J'en ai eu marre de cela, j'ai récemment acheté un vieux Nexus 5, j'ai flashé UT dessus et je suis à nouveau heureux.
Ubuntu Touch aujourd'hui
L'équipe UBports a fait d'énormes progrès l'année dernière mais il reste encore beaucoup à faire. Pour n'en mentionner que quelques-uns. Passez à Ubuntu 20.04. Il y a un problème Bluetooth qui vous empêche d'utiliser votre carkit (aucun son pendant l'appel). Vous ne pouvez pas bloquer un numéro de téléphone. Le nombre d'applications est limité et un certain nombre d'applications sont encore en cours de développement. FluffyChat, un client Matrix , ne supporte pas le chiffrement end-to-end . Dekko 2, le client de messagerie, est mis à jour. C'est le prix à payer pour la vie privée.
Ubuntu Touch développement d'applications
Les applications UT sont généralement développées en utilisant Qt5 et C++. Heureusement pyOtherSide a été créé qui nous permet d'appeler Python depuis QML. Pour démarrer le développement, vous devez installer Clickable, voir les liens ci-dessous. J'exécute Ubuntu 18.04 avec Python 3.6, donc c'est facile. J'ai d'abord créé un Python virtual environment et l'ai activé. Pour installer Clickable , tapez :
pip3 install git+https://gitlab.com/clickable/clickable.git
Ensuite, vous pouvez créer votre première application en tapant :
clickable create
Cela vous posera quelques questions et générera une application UT . Vous pouvez ensuite exécuter cette application sur votre desktop en tapant :
clickable desktop
Si vous voulez l'exécuter sur votre téléphone UT , assurez-vous d'abord que vous avez activé le mode Developer sur votre téléphone :
System settings -> About -> Developer mode
Ensuite, tapez :
clickable
et l'application est chargée et démarrée dans le téléphone. Cela semble facile et c'est le cas, mais ce n'est qu'un point de départ.
Utilisation de Python et pyOtherSide
On peut remplacer C++ par Python en utilisant pyOtherSide. Pour que les choses fonctionnent, installez pyOtherSide :
sudo ap-get install pyotherside
L'application ci-dessous affiche une fenêtre, dimensions 200x200, avec un texte'Nothing here yet' et un bouton. Lorsque vous cliquez sur le bouton, le texte devrait devenir'Hello from Python'. Le nouveau texte provient d'une fonction hello_world dans applogic.py. Nous créons deux fichiers, dans le même répertoire, le premier est hello.qml :
// hello.qml
import QtQuick 2.6
import QtQuick.Controls 1.2
import io.thp.pyotherside 1.0
Rectangle {
width: 200
height: 200
color: 'blue'
Python {
id: py
Component.onCompleted: {
// Print version of plugin and Python interpreter
console.log('PyOtherSide version: ' + pluginVersion());
console.log('Python version: ' + pythonVersion());
addImportPath(Qt.resolvedUrl('.'));
importModule('applogic', function() {});
console.log('after importModule');
}
}
Label {
id: label;
text: "Nothing here yet"
}
Button {
text: "press"
anchors.centerIn: parent
onClicked: {
console.log('in onClicked');
py.call('applogic.hello_world', [], function(result) {
// async call
console.log('after call');
label.text = result;
});
}
}
}
et l'autre est applogic.py :
# applogic.py
def hello_world():
print("printing ... Hello from Python!")
return "Hello from Python!"
Maintenant, nous pouvons exécuter ceci avec qmlscene. Cela nous permet de l'exécuter sans être complet :
qmlscene hello.qml
Il devrait montrer une fenêtre et imprimer sur la console :
loadRulesFromFile: Loading "/home/peter/.config/QtProject/qtlogging.ini" ...
onCompleted: PyOtherSide version: 1.4.0
onCompleted: Python version: 3.6.2
onCompleted: after importModule
Après avoir cliqué sur le bouton, la console devrait dire :
onClicked: in onClicked
printing ... Hello from Python!
: after call
et le texte dans le popup devrait devenir : Bonjour de Python ! Si cela fonctionne alors jetez aussi un oeil aux exemples disponibles dans le référentiel pyOtherSide .
Utilisation de QtCreator
Nous ne voulons absolument pas concevoir nous-mêmes les écrans à la main et c'est là qu'intervient QtCreator . S'il n'est pas encore installé, vous pouvez l'installer en utilisant Ubuntu Software Center. Vous pouvez maintenant ouvrir hello.qml, éditer l'écran, l'enregistrer et le relancer.
Plus avancés
Je vous suggère de regarder les autres applications UT créées avec Python. Un exemple est ActivityTracker, le code est sur Github. Cette application utilise également SQLite comme base de données. Vous pouvez l'obtenir en tapant :
git clone https://github.com/ernesst/ActivityTracker.git
Vous pouvez l'exécuter sur votre desktop ou utiliser Clickable comme décrit ci-dessus. Parce qu'il utilise GPS vous ne pouvez pas faire grand chose sur votre desktop ...
Résumé
Je suis un noob total sur le développement de l'application Ubuntu Touch , ce qui précède n'est qu'un résumé de mes recherches pour une journée. Vous pouvez construire des applications Ubuntu Touch avec Python et ce n'est pas si difficile. Si je trouve du temps, je vais essayer de construire une application Ubuntu Touch , j'espère que vous aussi.
Liens / crédits
[SOLVED]How to Import Python library to clickable?
https://forums.ubports.com/topic/1321/solved-how-to-import-python-library-to-clickable
ActivityTracker app for Ubuntu
https://github.com/ernesst/ActivityTracker
App development
http://docs.ubports.com/en/latest/appdev/
Asynchronous Python 3 Bindings for Qt 5
https://github.com/thp/pyotherside
Clickable
http://clickable.bhdouglass.com/en/latest/
Creating Ubuntu Phone Apps using Python and Qt
https://github.com/timsueberkrueb/ubports-gettogether/blob/master/timsueberkrueb/pyotherside/presentation.md
How do I get my QML program to utilize Unity7 notifications? Is there an API I can use?
https://askubuntu.com/questions/540352/how-do-i-get-my-qml-program-to-utilize-unity7-notifications-is-there-an-api-i-c
No valid kits found, although a kit exists
https://askubuntu.com/questions/696740/no-valid-kits-found-although-a-kit-exists
Qt 5 Hello World Tutorial using Qt Creator
https://prognotes.net/2016/11/qt-5-hello-world-tutorial-using-qt-creator/
En savoir plus...
Ubuntu Touch
Récent
- Masquer les clés primaires de la base de données UUID de votre application web
- Don't Repeat Yourself (DRY) avec Jinja2
- SQLAlchemy, PostgreSQL, nombre maximal de lignes par user
- Afficher les valeurs des filtres dynamiques SQLAlchemy
- Transfert de données sécurisé grâce au cryptage à Public Key et à pyNaCl
- rqlite : une alternative à haute disponibilité et dist distribuée SQLite
Les plus consultés
- Utilisation des Python's pyOpenSSL pour vérifier les certificats SSL téléchargés d'un hôte
- Utiliser UUIDs au lieu de Integer Autoincrement Primary Keys avec SQLAlchemy et MariaDb
- Connexion à un service sur un hôte Docker à partir d'un conteneur Docker
- Utiliser PyInstaller et Cython pour créer un exécutable Python
- SQLAlchemy : Utilisation de Cascade Deletes pour supprimer des objets connexes
- Flask RESTful API validation des paramètres de la requête avec les schémas Marshmallow