
tl; dr : mengemas dan mengirimkan aplikasi bebas Trojan untuk mengontrol lampu saya di F-Droid tanpa pengetahuan pengembangan Android.
Saya memiliki posisi politik, saya adalah pendukung FOSS dalam banyak hal saya setuju dengan Stallman. Seperti yang sering terjadi, posisi ini dilengkapi dengan paranoia ringan. Saya mencoba menyingkirkan aplikasi berpemilik, terutama jika dijalankan melalui server pihak ketiga.
Dan saya juga memiliki lampu "pintar" Xiaomi Yeelight, yang dikendalikan oleh aplikasi yang berjalan melalui server Xiaomi. Tetapi memiliki kemampuan untuk menyalakan API yang bekerja di dalam LAN di lampu. Untuk merasa nyaman, saya mencari aplikasinya di Github dan Gitlab dan sekarang saya bermaksud untuk mempromosikannya ke F-Droid untuk mendukung komunitas paranoid kami.
Bangun dan periksa
Agar aplikasi dapat masuk ke dalam katalog, aplikasi tersebut setidaknya harus dibangun dan, dengan cara yang bersahabat, berfungsi. Pilihan saya ternyata sangat sedikit , dan tidak ada satu aplikasi pun yang ditemukan di Gitlab. Dari aplikasi yang tersedia, saya hanya bisa mengumpulkan dua, dan pada akhirnya hanya satu yang mulai. Saya sangat jauh dari pengembangan untuk Android, dalam beberapa hari saya hanya menguasai perakitan sederhana menggunakan Gradle, saya akan menjelaskannya lebih lanjut.
Kami membutuhkan: git, Java Runtime Environment, Android SDK, Android Debugging Bridge, dan Gradle baru. JRE, ADB dan git untuk Pengujian Debian dapat diinstal dari paket
apt install git adb openjdk-11-jre-headless.
Android SDK biasanya diinstal dengan Android Studio, tetapi saya menggunakan utilitas konsol sdkmanager :
unzip commandlinetools-linux-6609375_latest.zip
export PATH=$PATH:$PWD/tools/bin/
mkdir android-sdk
export ANDROID_SDK_ROOT=$PWD/android-sdk/
Jika Anda mengira saya melewatkan menginstal SDK Android itu sendiri, maka itu tampaknya tidak bagi Anda. Saya akan menjelaskannya nanti. Repositori Debian berisi Gradle versi busuk, build tidak berfungsi dengannya, build baru juga harus diinstal dari situs :
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/
Saya membagi repositori menjadi diri saya sendiri dan membersihkan sampah yang dibuat secara otomatis. Semuanya berjalan seperti ini:
yes | sdkmanager --licenses --sdk_root=$ANDROID_SDK_ROOT
git clone https://github.com/asz/OpenLight.git
cd OpenLight/
gradle wrapper
./gradlew assemble
Dengan perintah pertama kami menerima secara massal semua kondisi perizinan seperti yang diperlukan
sdkmanageruntuk instalasi non-interaktif. Saat membuat wrapper ( gradle wrapper) secara otomatis, Gradle akan mengurai dan menginstal semua dependensi yang diperlukan. Mengunduh versi Android SDK yang diperlukan, toolkit perakitan, dan dependensi khusus Android lainnya dilakukan dengan bantuan sdkmanager, jadi tidak perlu melakukannya secara manual, dan lisensinya harus diterima sebelumnya.
Saatnya mengaktifkan API di aplikasi resmi. Mengubah smartphone Anda debugging dari USB , hubungkan ke komputer Anda dan menginstal paket debug yang dihasilkan:
adb install app/build/outputs/apk/debug/app-debug.apk. Ingatlah untuk mengaktifkan debugging dari komputer Anda di jendela pop-up di ponsel Anda. Jika aplikasi di ponsel menunjukkan tanda-tanda kehidupan, maka Anda dapat melanjutkan.
Mempersiapkan patch di F-Droid
F-Droid memiliki aturan untuk membuat katalog aplikasi. Dasar-dasarnya cukup sederhana: tidak ada dependensi build nonfree, masalah privasi, dan dependensi nonfree dari aplikasi itu sendiri yang harus ditandai . Saya tidak memeriksa dependensi sendiri, karena F-Droid memiliki CI dan sistem build-nya sendiri, ini memungkinkan Anda untuk menjalankan commit melalui pipeline.
Sekarang mari kita pergi ke GitLab, tempat F-Droid dikembangkan. Pertama, pastikan untuk memeriksa bahwa belum ada yang mengerjakan aplikasi Anda. Jenis aktivitas ini terkonsentrasi di permintaan pengemasan dan untuk menggabungkan permintaan . Garpu penyimpanan Data dan klon dari profil Anda.
Satu file YML sudah cukup untuk menampilkan aplikasi di F-Droid. Temukan file YML yang sesuai di subdirektori
metadata/repositori Anda dan salin dalam format yang sama applicationId.yml. Nilai applicationIduntuk aplikasi Anda dapat diperoleh dari beberapa build.gradlerepositori sendiri, dalam kasus saya dari app/build.gradle. Saya tidak ingat file mana yang saya ambil sebagai referensi, saya hanya akan menampilkan file terakhir metadata/grmasa.com.open_light.yml:
Sulit bagi saya untuk memilih AntiFeature tertentu, tetapi tidak diperlukan akurasi detail, yang ditunjukkan . Kategori cocok untuk aplikasi pendamping perangkat. Kunci menjelaskan dari commit / tag mana untuk membangun aplikasi. juga dapat ditemukan di . Jika tidak ingin mengupdate aplikasi secara manual, Anda bisa mengisinya
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.gradleUpdateCheckModedan AutoUpdateMode( v%vmenjelaskan format tag).
Untuk pemeriksaan file dasar, Anda memerlukan utilitas
fdroiddari repositori Server F-Droid , dependensinya, dan variabel 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
Anda dapat kembali ke direktori
fdroiddatadan memeriksa apakah metadata berfungsi:
fdroid readmeta
fdroid lint grmasa.com.open_light
fdroid build -v -l grmasa.com.open_light
Dua perintah pertama memeriksa sintaks, yang ketiga membangun aplikasi. Di pintu keluar Anda akan melihat APK tersebut:
unsigned/grmasa.com.open_light_1.apk.
Untuk berjaga-jaga, Anda dapat menjalankannya
fdroid checkupdates grmasa.com.open_lightuntuk memeriksa pembaruan dan fdroid rewritemeta grmasa.com.open_lightuntuk mengisi ulang file dengan metadata dengan benar, dan kemudian memeriksa ulang perakitan.
Hampir berakhir bahagia
Sekarang Anda dapat melakukan dan memeriksa pipeline Gitlab CI. Semuanya sudah berakhir untukku !
Saya mengisi Permintaan Penggabungan dan memeriksanya serta meminta untuk memberi tahu penulis aplikasi asli. Jika penulis mengabaikan saya selama lebih dari dua minggu, saya hanya akan menulis ulang tautan dalam metadata ke garpu saya dan kemudian akan diterima.
Sekarang saya bisa menyingkirkan telepon Trojan khusus saya. Dan saya bahkan akan memiliki kesempatan untuk mengontrol mereka dari Internet dengan cara yang menyimpang, bahkan dengan melarang LAN bersama mereka !
Sayangnya, ilustrasi di judul itu ada benarnya. Bug yang tidak menyenangkan ditemukan di aplikasi pada langkah keduawizard: dari daftar lampu yang terdeteksi, paling sering bukan yang saya pilih ditambahkan. Karena itu, lampu-lampu itu ada di daftar utama. Untuk mengatasi masalah ini, saya memasang lampu di aplikasi satu per satu. Mudah-mudahan suatu saat nanti saya akan mencari tahu apa masalahnya, atau mengemas aplikasi lain.
