Ontwikkelen van Ubuntu Touch apps met Python met pyOtherSide.
Ubuntu Touch apps worden ontwikkeld met behulp van Qt5 en C++. Met behulp van pyOtherSide kunnen we Python gebruiken in plaats van C++.
Waarschijnlijk kennen velen van u slechts twee besturingssystemen voor mobiele telefoons, iOS op Apple 's en Google's Android 's op alle andere telefoons (ongeveer 80%). Maar er is ook Ubuntu Touch (UT), oorspronkelijk ontwikkeld door Canonical Ltd. en voortgezet door UBports. Ik schrijf hier een bericht over omdat ik UT gebruik op een Nexus 5 en me afvroeg hoe moeilijk het zou zijn om er apps voor te ontwikkelen. Toen ik ontdekte dat je Python kunt gebruiken in plaats van C++, dacht ik dat ik je misschien kon verleiden om in Ubuntu Touch te kijken en er een app voor te ontwikkelen.
Mijn geschiedenis met Ubuntu Touch
Ik heb de BQ Aquaris E4.5 Ubuntu Edition besteld in april 2015 voor mij en een vriend nadat Ubuntu Touch in 2014 was uitgebracht. Na zo'n zes maanden van updates werden de meeste problemen opgelost met Ubuntu en werd de telefoon mijn dagelijkse driver, prachtig OS. Ik verloor de telefoon tijdens een reis en schakelde over naar Lineageos zonder Gaps. Hoewel veiligheid een serieus onderwerp is in de Android custom ROM gemeenschappen, is privacy niet echt hot, wat betekent dat bijna alle custom ROM's 'telefoon naar huis' naar Google's 'telefoon naar huis', bij het openen van de telefoon, standaard contact zoeken op basis van Google , probeer dan te zoeken, probeer dan om je locatie te extraheren en te verzenden, enz, en dan heb ik het nog niet eens over alle kwetsbaarheden en slechte apps die we de hele tijd horen. Google doet er gewoon alles aan om uw gegevens te verkrijgen, ze krijgen een boete maar gaan verder. Ik denk dat je ze dieven kunt noemen. Ziek hiervan heb ik onlangs een oude Nexus 5 gekocht, UT erop geflitst en ik ben weer gelukkig.
Ubuntu Touch van vandaag
Het UBports team heeft het afgelopen jaar enorme vooruitgang geboekt, maar er is nog veel te doen. Om er een paar te noemen. Ga naar Ubuntu 20.04. Er is een Bluetooth probleem, dat voorkomt dat u uw carkit gebruikt (geen geluid tijdens het bellen). U kunt een telefoonnummer niet blokkeren. Het aantal applicaties is beperkt en een aantal apps wordt nog steeds gepolijst. FluffyChat, een Matrix client, ondersteunt geen end-to-end encryptie. Dekko 2, de mail client, wordt bijgewerkt. Dit is de prijs die u betaalt voor uw privacy.
Ubuntu Touch ontwikkeling van applicaties
UT toepassingen worden meestal ontwikkeld met behulp van Qt5 en C++. Gelukkig is pyOtherSide gemaakt waarmee we Python kunnen aanroepen vanuit QML. Om de ontwikkeling te starten moet u Clickable installeren, zie onderstaande links. Ik start Ubuntu 18.04 met Python 3.6, dus dit is eenvoudig. Eerst heb ik een Python virtual environment aangemaakt en geactiveerd. Voor de installatie van Clickable type:
pip3 install git+https://gitlab.com/clickable/clickable.git
Vervolgens kunt u uw eerste toepassing maken door te typen:
clickable create
Dit zal u enkele vragen stellen en genereert een UT applicatie. U kunt deze toepassing vervolgens op uw desktop uitvoeren door te typen:
clickable desktop
Als je het op je UT telefoon wilt uitvoeren, zorg er dan eerst voor dat je de Developer mode op je telefoon hebt ingeschakeld:
System settings -> About -> Developer mode
Typ dan in:
clickable
en de applicatie in geladen en opgestart in de telefoon. Dit klinkt gemakkelijk en dat is het ook, maar het is slechts een beginpunt.
Gebruik van Python en pyOtherSide.
We kunnen C++ vervangen door Python door pyOtherSide. Om dit te laten werken, installeer je pyOtherSide:
sudo ap-get install pyotherside
De onderstaande toepassing toont een venster met de afmetingen 200x200, met de tekst 'Nothing here yet' en een knop. Wanneer u op de knop klikt, verandert de tekst in 'Hallo van Python'. De nieuwe tekst komt van een functie hello_world in applogic.py. We maken twee bestanden aan, in dezelfde map, de eerste is hallo.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;
});
}
}
}
en de andere is applogic.py:
# applogic.py
def hello_world():
print("printing ... Hello from Python!")
return "Hello from Python!"
Nu kunnen we dit doen met qmlscene. Dit stelt ons in staat om het te runnen zonder compleet te zijn:
qmlscene hello.qml
Het zou een venster moeten tonen en afdrukken naar de console:
loadRulesFromFile: Loading "/home/peter/.config/QtProject/qtlogging.ini" ...
onCompleted: PyOtherSide version: 1.4.0
onCompleted: Python version: 3.6.2
onCompleted: after importModule
Na het klikken op de knop zou de console moeten zeggen:
onClicked: in onClicked
printing ... Hello from Python!
: after call
en de tekst in de popup zou moeten veranderen in...: Hallo van Python! Als dat werkt, kijk dan ook eens naar de voorbeelden in de pyOtherSide repository.
Met behulp van QtCreator
We willen de schermen zeker niet zelf met de hand ontwerpen en dat is waar QtCreator een rol speelt. Als het nog niet geïnstalleerd is, kunt u het installeren met behulp van Ubuntu Software Center. Nu kun je hallo.qml openen, het scherm bewerken, opslaan en opnieuw uitvoeren.
Meer gevorderd
Ik stel voor dat je kijkt naar andere UT apps die zijn gemaakt met Python. Een voorbeeld is ActivityTracker, de code staat op Github. Deze app gebruikt ook SQLite als database. Je kunt het krijgen door te typen:
git clone https://github.com/ernesst/ActivityTracker.git
U kunt het uitvoeren op uw desktop of met Clickable zoals hierboven beschreven. Omdat het GPS gebruikt kan je niet veel doen op je desktop ....
Samenvatting
Ik ben een totale noob op Ubuntu Touch app ontwikkeling, het bovenstaande is slechts een samenvatting van mijn onderzoek voor een dag. Je kunt Ubuntu Touch apps bouwen met Python en het is niet zo moeilijk. Als ik tijd heb om een Ubuntu Touch app te bouwen, hoop ik dat jij dat ook doet.
Links / credits
[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/
Lees meer
Ubuntu Touch
Recent
- Database UUID primaire sleutels van je webapplicatie verbergen
- Don't Repeat Yourself (DRY) met Jinja2
- SQLAlchemy, PostgreSQL, maximum aantal rijen per user
- Toon de waarden in SQLAlchemy dynamische filters
- Veilige gegevensoverdracht met Public Key versleuteling en pyNaCl
- rqlite: een alternatief voor SQLite met hoge beschikbaarheid en distributed
Meest bekeken
- Met behulp van Python's pyOpenSSL om SSL-certificaten die van een host zijn gedownload te controleren
- Gebruik van UUIDs in plaats van Integer Autoincrement Primary Keys met SQLAlchemy en MariaDb
- PyInstaller en Cython gebruiken om een Python executable te maken
- Maak verbinding met een dienst op een Docker host vanaf een Docker container
- SQLAlchemy: Gebruik van Cascade Deletes om verwante objecten te verwijderen
- Flask RESTful API verzoekparametervalidatie met Marshmallow-schema's