Empaquetar una aplicación en F-Droid





tl; dr : empaquetado y envío de una aplicación sin troyanos para controlar mis lámparas en F-Droid sin ningún conocimiento de desarrollo de Android.



Tengo un cargo político, soy partidario del software libre en muchos sentidos y estoy de acuerdo con Stallman. Como suele ser el caso, esta posición se complementa con una paranoia leve. Intento deshacerme de las aplicaciones propietarias, especialmente si se ejecutan en servidores de terceros.



Y también tengo lámparas "inteligentes" Xiaomi Yeelight, que son controladas por una aplicación que se ejecuta a través de los servidores Xiaomi. Pero tiene la capacidad de activar la API que funciona dentro de la LAN en la lámpara. Para sentirme a gusto, busqué la aplicación en Github y Gitlab y ahora tengo la intención de promocionarla en F-Droid para apoyar a nuestra comunidad paranoica.



Construir y comprobar



Para que la aplicación entre en el catálogo, al menos debe construirse y, de manera amigable, funcionar. Mi elección resultó ser escasa y no se encontró una sola aplicación en Gitlab. De las aplicaciones disponibles, pude recopilar solo dos y, al final, solo una de ellas comenzó. Estoy muy lejos de desarrollar para Android, en unos días dominé solo un simple ensamblaje usando Gradle, lo describiré más adelante.



Necesitamos: git, Java Runtime Environment, Android SDK, Android Debugging Bridge y Gradle nuevo. JRE, ADB y git para Debian Testing se pueden instalar desde paquetes apt install git adb openjdk-11-jre-headless.



El SDK de Android generalmente se instala con Android Studio, pero usé la utilidad de consola sdkmanager :



unzip commandlinetools-linux-6609375_latest.zip
export PATH=$PATH:$PWD/tools/bin/
mkdir android-sdk
export ANDROID_SDK_ROOT=$PWD/android-sdk/


Si pensabas que me perdí la instalación del SDK de Android, entonces no te pareció. Te lo explicaré más tarde. Los repositorios de Debian contienen una versión podrida de Gradle, la compilación no funciona con ella, la nueva también tendrá que instalarse desde el sitio :



wget https://services.gradle.org/distributions/gradle-6.6.1-bin.zip
unzip gradle-6.6.1-bin.zip
export PATH=$PATH:$PWD/gradle-6.6.1/bin/


Me bifurqué el repositorio y limpié la basura generada automáticamente. Todo va así:



yes | sdkmanager --licenses --sdk_root=$ANDROID_SDK_ROOT
git clone https://github.com/asz/OpenLight.git
cd OpenLight/
gradle wrapper
./gradlew assemble


Con el primer comando, aceptamos de forma masiva todos los términos de licencia necesarios sdkmanagerpara la instalación no interactiva. Al generar automáticamente el contenedor ( gradle wrapper), Gradle analizará e instalará todas las dependencias necesarias. La descarga de la versión requerida del SDK de Android, el kit de herramientas de ensamblaje y otras dependencias específicas de Android se realiza con la ayuda sdkmanager, por lo que no es necesario hacerlo a mano y deberá aceptar la licencia por adelantado.



imagen



Es hora de habilitar la API en la aplicación oficial. Convierte tu teléfono depuración del USB , conectarlo a su ordenador e instalar el paquete de depuración generada: adb install app/build/outputs/apk/debug/app-debug.apk. Recuerde habilitar la depuración desde su computadora en la ventana emergente de su teléfono. Si la aplicación del teléfono muestra signos de vida, puede continuar.



Preparando un parche en F-Droid



F-Droid tiene reglas para catalogar una aplicación. Los fundamentos son bastante simple: no hay dependencias que no son libres de construcción, problemas de privacidad, y las dependencias no libres de la propia aplicación deben ser marcados . No verifiqué las dependencias yo mismo, porque F-Droid tiene un CI y su propio sistema de compilación, esto le permite simplemente ejecutar la confirmación a través de la tubería.



Ahora vayamos a GitLab, donde se está desarrollando F-Droid. Primero, asegúrese de verificar que nadie esté trabajando en su aplicación todavía. Dicha actividad se concentra en las solicitudes de empaque y en las solicitudes de fusión . Bifurque el repositorio de datos y clónelo desde su perfil.



Para que la aplicación aparezca en F-Droid, un archivo YML es suficiente. Busque cualquier archivo YML adecuado en un subdirectorio metadata/de su repositorio y cópielo en el mismo formato applicationId.yml. El valor applicationIdde su aplicación se puede obtener de algunos de build.gradlesus propios repositorios, en mi caso de app/build.gradle. No recuerdo cuál de los archivos tomé como referencia, solo mostraré el archivo final metadata/grmasa.com.open_light.yml: fue difícil para mí elegir un AntiFeature específico, pero no se requiere precisión detallada, indicó . Categoría adecuada para aplicaciones complementarias del dispositivo. La clave describe desde qué confirmación / etiqueta construir la aplicación. también se puede encontrar en . Si no desea actualizar la aplicación manualmente, puede completar



AntiFeatures:

- NonFreeDep

Categories:

- Connectivity

License: GPL-2.0-or-later

AuthorWebSite: https://github.com/grmasa

SourceCode: https://github.com/grmasa/Open_light

IssueTracker: https://github.com/grmasa/Open_light/issues

Changelog: https://github.com/grmasa/Open_light/tags



AutoName: Open Light

Summary: Control Xiaomi Yeelight WiFi smart bulbs

Description: |-

Control Xiaomi Yeelight smart bulbs within your Local Area Network.

Only fits WiFi controlled bulbs.



This app requires enabled LAN control for bulbs: open the official app, set up

all the bulbs, go to LAN control in the menu, and enable it for every device.



RepoType: git

Repo: https://github.com/grmasa/Open_light.git



Builds:

- versionName: 1.1.2

versionCode: 1

commit: v1.1.2

subdir: app

gradle:

- yes



AutoUpdateMode: Version v%v

UpdateCheckMode: Tags

CurrentVersion: 1.1.2

CurrentVersionCode: 1




NonFreeDepConnectivityBuildversionCodebuild.gradleUpdateCheckModey AutoUpdateMode( v%vdescribe el formato de la etiqueta).



Para la verificación básica de archivos, necesita una utilidad fdroiddel repositorio del servidor F-Droid , sus dependencias y una variable ANDROID_HOME:



git clone https://gitlab.com/fdroid/fdroidserver.git
export PATH=$PATH:$PWD/fdroidserver
apt -y install python3-git python3-pyasn1 python3-pyasn1-modules python3-yaml python3-requests
export ANDROID_HOME=$ANDROID_SDK_ROOT


Puede volver al directorio fdroiddatay comprobar si los metadatos funcionan:



fdroid readmeta
fdroid lint grmasa.com.open_light
fdroid build -v -l grmasa.com.open_light


Los dos primeros comandos verifican la sintaxis, el tercero construye la aplicación. A la salida debería ver el archivo APK: unsigned/grmasa.com.open_light_1.apk.



Por si acaso, puede ejecutarlo fdroid checkupdates grmasa.com.open_lightpara buscar actualizaciones y fdroid rewritemeta grmasa.com.open_lightrellenar correctamente el archivo con metadatos, y luego volver a verificar el ensamblaje.



Casi final feliz



Ahora puede comprometerse y verificar la canalización de Gitlab CI. ¡Todo ha terminado para!



Llené una Solicitud de combinación , la revisé y pedí notificar al autor de la aplicación original. Si el autor me ignora durante más de dos semanas, simplemente volveré a escribir los enlaces en los metadatos en mi bifurcación y luego será aceptado.



imagen



Ahora puedo apartar mi teléfono troyano especial. E incluso tendré la oportunidad de manipularlos desde Internet de manera perversa, ¡ incluso prohibiéndolos en LAN !



Lamentablemente, hay algo de verdad en la ilustración del título. Se encontró un error desagradable en la aplicación en el segundo pasoasistente: de la lista de lámparas detectadas, la mayoría de las veces no se agrega la que seleccioné. Debido a esto, las lámparas están en la lista principal. Para solucionar este problema, coloco las lámparas en la aplicación una por una. Con suerte, algún día descubriré cuál es el problema o empaquetaré otra aplicación.










All Articles