Desarrollo de aplicaciones Ubuntu Touch con Python con pyOtherSide
Las aplicaciones Ubuntu Touch se desarrollan utilizando Qt5 y C++. Utilizando pyOtherSide podemos utilizar Python en lugar de C++.
Probablemente muchos de ustedes conocen sólo dos sistemas operativos de teléfonos móviles, iOS en Apple , y Googles Android en todos los demás teléfonos (alrededor del 80%). Pero también está Ubuntu Touch (UT) desarrollado originalmente por Canonical Ltd. y continuado por UBports. Escribo un post sobre esto porque estoy usando UT en un Nexus 5 y me preguntaba lo difícil que sería desarrollar aplicaciones para ello. Cuando descubrí que se puede usar Python en lugar de C++, pensé que tal vez podría tentarte a mirar en Ubuntu Touch y empezar a desarrollar una aplicación para ello.
Mi historia con Ubuntu Touch
Pedí el BQ Aquaris E4.5 Ubuntu Edition en abril de 2015 para mí y para un amigo después de que Ubuntu Touch fuera lanzado en 2014. Después de seis meses de actualizaciones la mayoría de los problemas fueron resueltos por Ubuntu y el teléfono se convirtió en mi controlador diario, el maravilloso OS. Perdí el teléfono durante un viaje y cambié a Lineageos sin Gaps. Aunque la seguridad es un tema serio en las comunidades Android custom ROM , la privacidad no es realmente caliente, lo que significa que casi todos los custom ROMs 'phone home' a Google, al abrir el teléfono, tienen habilitada la búsqueda de contactos por defecto por Google , intentan extraer y enviar su ubicación, etc, sin mencionar todas las vulnerabilidades y malas aplicaciones de las que oímos hablar todo el tiempo. Google está haciendo todo lo posible para obtener sus datos, son multados pero continúan. Creo que puedes llamarlos ladrones. Harto de esto, recientemente compré un viejo Nexus 5, flasheé UT en él y estoy feliz de nuevo.
P4_265_TNEMECALPER_4Q hoy
El equipo de UBports hizo grandes progresos el año pasado, pero aún queda mucho por hacer. Por mencionar algunos. Pase a Ubuntu 20.04. Existe un problema de Bluetooth , que le impide utilizar su kit de coche (no hay sonido durante la llamada). No puede bloquear un número de teléfono. El número de aplicaciones es limitado, y un número de aplicaciones todavía están siendo pulidas. FluffyChat, un cliente Matrix , no soporta encriptación end-to-end . Dekko 2, el cliente de correo, se está actualizando. Este es el precio que usted paga por la privacidad.
Ubuntu Touch desarrollo de aplicaciones
Las aplicaciones UT se desarrollan normalmente utilizando Qt5 y C++. Afortunadamente se creó pyOtherSide que nos permite llamar Python desde dentro de QML. Para iniciar el desarrollo debe instalar Clickable, vea los siguientes enlaces. Ejecuto Ubuntu 18.04 con Python 3.6, así que esto es fácil. Primero creé un Python virtual environment y lo activé. Para instalar Clickable tipo:
pip3 install git+https://gitlab.com/clickable/clickable.git
A continuación, puede crear su primera aplicación escribiendo:
clickable create
Esto le hará algunas preguntas y generará una aplicación UT . A continuación, puede ejecutar esta aplicación en su desktop escribiendo:
clickable desktop
Si desea ejecutarlo en su teléfono UT , primero asegúrese de haber activado el modo Desarrollador en su teléfono:
System settings -> About -> Developer mode
A continuación, escriba a máquina:
clickable
y la aplicación está cargada e iniciada en el teléfono. Esto suena fácil y lo es, pero es sólo un punto de partida.
Utilizando Python y pyOtherSide
Podemos sustituir C++ por Python utilizando pyOtherSide. Para que las cosas funcionen, instale pyOtherSide:
sudo ap-get install pyotherside
La siguiente aplicación muestra una ventana, de dimensiones 200x200, con el texto'Nothing here yet' y un botón. Cuando haga clic en el botón, el texto debería cambiar a `Hola desde Python! El nuevo texto proviene de una función hello_world en applogic.py. Creamos dos archivos, en el mismo directorio, el primero es 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;
});
}
}
}
y el otro es applogic.py:
# applogic.py
def hello_world():
print("printing ... Hello from Python!")
return "Hello from Python!"
Ahora podemos hacer esto con qmlscene. Esto nos permite ejecutarlo sin estar completos:
qmlscene hello.qml
Debería mostrar una ventana e imprimir en la consola:
loadRulesFromFile: Loading "/home/peter/.config/QtProject/qtlogging.ini" ...
onCompleted: PyOtherSide version: 1.4.0
onCompleted: Python version: 3.6.2
onCompleted: after importModule
Después de hacer clic en el botón, la consola debería decir:
onClicked: in onClicked
printing ... Hello from Python!
: after call
y el texto en la ventana emergente debería cambiar a: Hola de Python! Si eso está funcionando, entonces eche un vistazo a los ejemplos disponibles en el repositorio pyOtherSide .
Utilizando QtCreator
Definitivamente no queremos diseñar las pantallas nosotros mismos y ahí es donde entra en juego QtCreator . Si aún no está instalado, puede instalarlo utilizando Ubuntu Software Center. Ahora puede abrir hello.qml, editar la pantalla, guardarla y volver a ejecutarla.
Más avanzado
Te sugiero que veas otras aplicaciones de UT creadas usando Python. Un ejemplo es ActivityTracker, el código está en Github. Esta aplicación también utiliza SQLite como base de datos. Puedes conseguirlo escribiendo a máquina:
git clone https://github.com/ernesst/ActivityTracker.git
Puede ejecutarlo en su desktop o utilizando Clickable como se describe anteriormente. Debido a que utiliza GPS usted no puede hacer mucho en su desktop ....
Resumen
Soy un noob total en el desarrollo de aplicaciones Ubuntu Touch , lo anterior es sólo un resumen de mi investigación por un día. Puedes construir aplicaciones Ubuntu Touch con Python y no es tan difícil. Si encuentro tiempo intentaré construir una aplicación Ubuntu Touch , espero que tú también lo hagas.
Enlaces / créditos
[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/
Leer más
Ubuntu Touch
Recientes
- Cómo ocultar las claves primarias de la base de datos UUID de su aplicación web
- Don't Repeat Yourself (DRY) con Jinja2
- SQLAlchemy, PostgreSQL, número máximo de filas por user
- Mostrar los valores en filtros dinámicos SQLAlchemy
- Transferencia de datos segura con cifrado de Public Key y pyNaCl
- rqlite: una alternativa de alta disponibilidad y dist distribuida SQLite
Más vistos
- Usando Python's pyOpenSSL para verificar los certificados SSL descargados de un host
- Usando UUIDs en lugar de Integer Autoincrement Primary Keys con SQLAlchemy y MariaDb
- Conectarse a un servicio en un host Docker desde un contenedor Docker
- Usando PyInstaller y Cython para crear un ejecutable de Python
- SQLAlchemy: Uso de Cascade Deletes para eliminar objetos relacionados
- Flask RESTful API validación de parámetros de solicitud con esquemas Marshmallow