Empacotando um aplicativo no F-Droid





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 sdkmanagerpara 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.



imagem



É 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 applicationIdpara seu aplicativo pode ser obtido de alguns de build.gradleseus 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




NonFreeDepConnectivityBuildversionCodebuild.gradleUpdateCheckModee AutoUpdateMode( v%vdescreve o formato da tag).



Para a verificação básica de arquivos, você precisa de um utilitário fdroiddo 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 fdroiddatae 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_lightpara verificar se há atualizações e fdroid rewritemeta grmasa.com.open_lightrecarregar 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.



imagem



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.










All Articles