Packen einer App in F-Droid





tl; dr : Verpacken und Versenden einer Trojaner-freien App zur Steuerung meiner Lampen in F-Droid ohne Android-Entwicklungskenntnisse.



Ich habe eine politische Position, ich bin ein Unterstützer des FOSS in vielerlei Hinsicht, ich stimme Stallman zu. Wie so oft wird diese Position durch eine leichte Paranoia ergänzt. Ich versuche, proprietäre Anwendungen loszuwerden, insbesondere wenn sie über Server von Drittanbietern ausgeführt werden.



Außerdem habe ich "intelligente" Xiaomi Yeelight-Lampen, die von einer Anwendung gesteuert werden, die über die Xiaomi-Server ausgeführt wird. Es kann jedoch die API aktivieren , die im LAN der Lampe funktioniert. Um mich wohler zu fühlen, habe ich nach der App auf Github und Gitlab gesucht und beabsichtige nun, sie bei F-Droid zu bewerben, um unsere paranoide Community zu unterstützen.



Bauen und prüfen



Damit die Anwendung in den Katalog aufgenommen werden kann, muss sie mindestens erstellt werden und auf gütliche Weise funktionieren. Meine Wahl erwies sich als dürftig , und auf Gitlab wurde keine einzige Anwendung gefunden. Von den verfügbaren Anwendungen konnte ich nur zwei sammeln, und am Ende startete nur eine. Ich bin weit davon entfernt, für Android zu entwickeln. In wenigen Tagen habe ich nur eine einfache Baugruppe mit Gradle gemeistert. Ich werde sie weiter beschreiben.



Wir brauchen: Git, Java Runtime Environment, Android SDK, Android Debugging Bridge und frisches Gradle. JRE, ADB und git für Debian Testing können aus Paketen installiert werden apt install git adb openjdk-11-jre-headless.



Das Android SDK wird normalerweise mit Android Studio installiert, aber ich habe das Konsolen-Dienstprogramm sdkmanager verwendet :



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


Wenn Sie dachten, ich hätte die Installation des Android SDK selbst verpasst, dann schien es Ihnen nicht so. Ich werde es später erklären. Die Debian-Repositorys enthalten eine faule Version von Gradle, der Build funktioniert nicht damit, der neue muss ebenfalls von der Site installiert werden :



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/


Ich gab mir das Repository und räumte den automatisch generierten Müll auf. Alles läuft so:



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


Mit dem ersten Befehl akzeptieren wir alle Lizenzbedingungen, die sdkmanagerfür eine nicht interaktive Installation erforderlich sind, in großen Mengen . Beim automatischen Generieren des Wrappers ( gradle wrapper) analysiert und installiert Gradle alle erforderlichen Abhängigkeiten. Das Herunterladen der erforderlichen Version des Android SDK, des Assembly-Toolkits und anderer Android-spezifischer Abhängigkeiten erfolgt mithilfe der Hilfe. sdkmanagerDies ist also nicht manuell erforderlich, und die Lizenzen müssen im Voraus akzeptiert werden.



Bild



Es ist Zeit, die API in der offiziellen App zu aktivieren. Schalten Sie das USB-Debugging Ihres Smartphones aus , schließen Sie es an Ihren Computer an und installieren Sie das generierte Debug-Paket : adb install app/build/outputs/apk/debug/app-debug.apk. Denken Sie daran, das Debuggen von Ihrem Computer im Popup-Fenster Ihres Telefons zu aktivieren. Wenn die App auf Ihrem Telefon Lebenszeichen anzeigt, können Sie fortfahren.



Vorbereiten eines Patches in F-Droid



F-Droid hat Regeln für die Katalogisierung einer App. Die Grundlagen sind recht einfach: Keine nicht freien Build-Abhängigkeiten, Datenschutzprobleme und nicht freie Abhängigkeiten der Anwendung selbst sollten markiert werden . Ich habe die Abhängigkeiten nicht selbst überprüft, da F-Droid über ein CI und ein eigenes Build-System verfügt. Auf diese Weise können Sie das Commit einfach über die Pipeline ausführen.



Gehen wir jetzt zu GitLab, wo F-Droid entwickelt wird. Stellen Sie zunächst sicher, dass noch niemand an Ihrer Anwendung arbeitet. Diese Aktivitäten konzentrieren sich auf Verpackungsanfragen und Zusammenführungsanfragen . Verzweigen Sie das Datenrepository und klonen Sie es aus Ihrem Profil.



Damit die Anwendung in F-Droid angezeigt wird, reicht eine YML-Datei aus. Suchen Sie eine geeignete YML-Datei in einem Unterverzeichnis metadata/Ihres Repositorys und kopieren Sie sie im gleichen Format applicationId.yml. Der Wert applicationIdfür Ihre Anwendung kann aus einigen build.gradleeigenen Repositories abgerufen werden , in meinem Fall aus app/build.gradle. Ich erinnere mich nicht, welche der Dateien ich als Referenz genommen habe, ich werde nur die endgültige Datei anzeigen metadata/grmasa.com.open_light.yml: Es war schwierig für mich, ein bestimmtes AntiFeature auszuwählen, aber eine detaillierte Genauigkeit ist nicht erforderlich . Kategorie geeignet für Gerätebegleit-Apps. Der Schlüssel beschreibt, aus welchem ​​Commit / Tag die Anwendung erstellt werden soll. kann auch in gefunden werden . Wenn Sie die Anwendung nicht manuell aktualisieren möchten, können Sie sie ausfüllen



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.gradleUpdateCheckModeund AutoUpdateMode( v%vbeschreibt das Format des Tags).



Für die grundlegende Dateiprüfung benötigen Sie ein Dienstprogramm fdroidaus dem F-Droid Server- Repository , seine Abhängigkeiten und eine 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


Sie können zum Verzeichnis zurückkehren fdroiddataund überprüfen, ob die Metadaten funktionieren:



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


Die ersten beiden Befehle überprüfen die Syntax, der dritte erstellt die Anwendung. Am Ausgang sollte die APK angezeigt werden : unsigned/grmasa.com.open_light_1.apk.



Nur für den Fall, Sie können es ausführen fdroid checkupdates grmasa.com.open_light, um nach Updates fdroid rewritemeta grmasa.com.open_lightzu suchen und die Datei korrekt mit Metadaten zu füllen, und dann die Assembly erneut überprüfen.



Fast Happy End



Jetzt können Sie die Gitlab CI-Pipeline festschreiben und auschecken. Für mich ist alles vorbei !



Ich habe eine Zusammenführungsanforderung ausgefüllt, überprüft und den Autor über die ursprüngliche App informiert. Wenn der Autor mich länger als zwei Wochen ignoriert, schreibe ich einfach die Links in den Metadaten zu meiner Verzweigung um und dann wird es akzeptiert.



Bild



Jetzt kann ich mein spezielles Trojaner-Telefon aus dem Weg räumen. Und ich werde sogar die Möglichkeit haben, sie auf perverse Weise aus dem Internet zu manipulieren , selbst indem ich sie aus dem LAN verbanne !



Leider enthält die Abbildung im Titel etwas Wahres. Im zweiten Schritt wurde in der Anwendung ein unangenehmer Fehler gefundenAssistent: Aus der Liste der erkannten Lampen wird meistens nicht die von mir ausgewählte hinzugefügt. Aus diesem Grund stehen die Lampen auf der Hauptliste. Um dieses Problem zu umgehen, habe ich die Lampen einzeln in die Anwendung eingefügt. Hoffentlich werde ich eines Tages herausfinden, wo das Problem liegt, oder eine andere Anwendung verpacken.










All Articles