
tl; dr : empacotar e enviar um aplicativo sem Trojan para controlar minhas lâmpadas no F-Droid sem nenhum conhecimento de desenvolvimento Android.
Eu tenho uma posição política, sou um defensor do FOSS em muitos aspectos, concordo com Stallman. Como costuma acontecer, essa posição é complementada por uma leve paranóia. Tento me livrar de aplicativos proprietários, especialmente se eles forem executados em servidores de terceiros.
E também tenho lâmpadas "inteligentes" Xiaomi Yeelight, que são controladas por um aplicativo executado por meio dos servidores da Xiaomi. Mas ele tem a capacidade de ativar a API que funciona dentro da LAN na lâmpada. Para me sentir mais confortável, procurei o aplicativo no Github e Gitlab e agora pretendo promovê-lo para o F-Droid para apoiar nossa comunidade paranóica.
Construir e verificar
Para que a aplicação entre no catálogo, ela deve pelo menos ser construída e, de forma amigável, funcionar. Minha escolha acabou sendo escassa e nem um único aplicativo foi encontrado no Gitlab. Dos aplicativos disponíveis, consegui montar apenas dois, e no final apenas um deles foi iniciado. Estou muito longe de desenvolver para Android, em poucos dias dominei apenas uma montagem simples usando o Gradle, vou descrevê-la melhor.
Precisamos de: git, Java Runtime Environment, Android SDK, Android Debugging Bridge e Gradle novo. JRE, ADB e git para testes Debian podem ser instalados a partir de pacotes
apt install git adb openjdk-11-jre-headless
.
O Android SDK geralmente é instalado com o Android Studio, mas usei o utilitário de console sdkmanager :
unzip commandlinetools-linux-6609375_latest.zip
export PATH=$PATH:$PWD/tools/bin/
mkdir android-sdk
export ANDROID_SDK_ROOT=$PWD/android-sdk/
Se você achou que perdi a instalação do SDK do Android, não o fez. Explicarei mais tarde. Os repositórios Debian contêm uma versão podre do Gradle, a compilação não funciona com ele, o novo também terá que ser instalado a partir do site :
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/
Eu bifurquei o repositório para mim mesmo e limpei o lixo gerado automaticamente. Tudo está indo assim:
yes | sdkmanager --licenses --sdk_root=$ANDROID_SDK_ROOT
git clone https://github.com/asz/OpenLight.git
cd OpenLight/
gradle wrapper
./gradlew assemble
Pelo primeiro comando, aceitamos em massa todas as condições de licenciamento exigidas
sdkmanager
para a instalação não interativa. Ao gerar automaticamente o wrapper ( gradle wrapper
), o Gradle analisará e instalará todas as dependências necessárias. O download da versão necessária do Android SDK, do kit de ferramentas de montagem e de outras dependências específicas do Android é feito com a ajuda sdkmanager
, portanto, não é necessário fazer isso manualmente e você terá que aceitar a licença com antecedência.

É hora de habilitar a API no aplicativo oficial. Transforme seu smartphone depuração do USB , conecte-o ao computador e instalar o pacote de depuração gerado:
adb install app/build/outputs/apk/debug/app-debug.apk
. Lembre-se de habilitar a depuração de seu computador na janela pop-up de seu telefone. Se o aplicativo no telefone mostrar sinais de vida, você pode continuar.
Preparando um patch no F-Droid
F-Droid tem regras para catalogar um aplicativo. O básico é muito simples: nenhuma dependência de compilação não gratuita, problemas de privacidade e quaisquer dependências não gratuitas do próprio aplicativo devem ser sinalizadas . Eu não verifiquei as dependências sozinho, porque F-Droid tem um CI e seu próprio sistema de compilação, isso permite que você simplesmente execute o commit por meio do pipeline.
Agora vamos para o GitLab, onde o F-Droid está sendo desenvolvido. Em primeiro lugar, certifique-se de que ninguém está trabalhando em seu aplicativo ainda. Este tipo de atividade concentra-se nas solicitações de empacotamento e na mesclagem de solicitações . Bifurque o repositório de dados e clone-o de seu perfil.
Um arquivo YML é suficiente para o aplicativo aparecer no F-Droid. Encontre qualquer arquivo YML adequado em um subdiretório
metadata/
de seu repositório e copie-o no mesmo formato applicationId.yml
. O valor applicationId
para seu aplicativo pode ser obtido de alguns de build.gradle
seus próprios repositórios, no meu caso de app/build.gradle
. Não me lembro qual dos arquivos tomei como referência, vou mostrar apenas o arquivo final metadata/grmasa.com.open_light.yml
:
Foi difícil para mim escolher um AntiFeature específico, mas não é necessária precisão detalhada, indicada . Categoria adequada para aplicativos complementares de dispositivo. A chave descreve de qual commit / tag construir o aplicativo. também pode ser encontrado em . Se você não quiser atualizar o aplicativo manualmente, pode preencher
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
NonFreeDep
Connectivity
Build
versionCode
build.gradle
UpdateCheckMode
e AutoUpdateMode
( v%v
descreve o formato da tag).
Para a verificação básica de arquivos, você precisa de um utilitário
fdroid
do repositório do F-Droid Server , suas dependências e uma variável 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
Você pode voltar ao diretório
fdroiddata
e verificar se os metadados estão funcionando:
fdroid readmeta
fdroid lint grmasa.com.open_light
fdroid build -v -l grmasa.com.open_light
Os primeiros dois comandos verificam a sintaxe, o terceiro constrói o aplicativo. Na saída você deve ver o APK:
unsigned/grmasa.com.open_light_1.apk
.
Por precaução, você pode executá-lo
fdroid checkupdates grmasa.com.open_light
para verificar se há atualizações e fdroid rewritemeta grmasa.com.open_light
recarregar corretamente o arquivo com metadados e, em seguida, verificar novamente a montagem.
Final quase feliz
Agora você pode confirmar e verificar o pipeline de CI do Gitlab. Está tudo acabado para mim !
Preenchi uma solicitação de mesclagem , verifiquei e pedi para notificar o autor do aplicativo original. Se o autor me ignorar por mais de duas semanas, simplesmente reescreverei os links nos metadados para o meu fork e então eles serão aceitos.

Agora posso colocar meu telefone Trojan especial fora do caminho. E ainda terei a oportunidade de manipulá-los da Internet de uma forma perversa, até banindo-os da LAN !
Infelizmente, há alguma verdade na ilustração do título. Um bug desagradável foi encontrado no aplicativo na segunda etapaassistente: da lista de lâmpadas detectadas, na maioria das vezes não é adicionada aquela que selecionei. Por isso, as lâmpadas estão na lista principal. Para contornar esse problema, coloquei as lâmpadas no aplicativo uma por uma. Espero que um dia eu descubra qual é o problema ou empacotarei outro aplicativo.

