Compilar aplicações

Em vez de (ou além de) incluir APKs binários de fontes externas num repositório, pode compilá-los diretamente a partir do código-fonte.

Ao fazer uso deste método, é possível verificar se a aplicação foi compilada corretamente, se corresponde ao código-fonte e se contém somente software livre. Infelizmente, no mundo do Android, parece ser muito comum para aplicações fornecidos como APK binário se apresentem como Software Livre, quando na verdade:

  1. O código-fonte (seja para uma versão específica, ou mesmo para todas as versões!) está indisponível ou incompleto.
  2. O código-fonte não é capaz de produzir o binário fornecido.
  3. O ‘código-fonte’ contém ficheiros binários de origem desconhecida ou licenças proprietárias.

Por esse motivo, aplicações compiladas da código-fonte são o método preferido pelo repositório principal do F-Droid, embora ocasionalmente, por motivos técnicos ou históricos, sejam feitas exceções a esta política.

Ao compilar aplicações da fonte, deve-se notar que os assinará (todos os ficheiros APK devem ser assinados para instalação no Android) com sua própria chave. Quando uma aplicação já está instalada num aparelho, não é possível atualizá-la para uma nova versão assinada com uma chave diferente sem primeiro desinstalar o original. Isso pode ser inconveniente para os utilizadores, pois o processo de desinstalação perde todos os dados associados à instalação anterior.

O processo para gerir um repositório para aplicações compiladas do código-fonte é muito semelhante ao descrito no capítulo Repositório Binário Simples, exceto que agora precisa:

  1. Incluir entradas de Compilação nos ficheiros de metadados.
  2. Executar fdroid build para compilar quaisquer aplicações que ainda não tenham sido compilados.
  3. Executar fdroid publish para finalizar o empacotamento e assinar quaisquer APKs que foram compilados.

Diretório de dados da app, conhecido como fdroiddata

Para fazer qualquer coisa, precisará de pelo menos um diretório de dados do repositório. É a partir desse diretório que executa o comando fdroid para executar todas as tarefas de gestão de repositório. Pode criar um, ou pegar uma cópia dos dados usados pelo repositório principal do F-Droid:

git clone https://gitlab.com/fdroid/fdroiddata.git

Independentemente do uso pretendido das ferramentas, sempre precisará configurar alguns detalhes básicos de configuração. Isso é feito a criar um ficheiro chamado config.yml no diretório de dados. Deve fazer isso a copiar o ficheiro de exemplo (./examples/config.yml) do projeto fdroidserver para o seu diretório de dados e a editar de acordo com as instruções.

Uma vez configurado desta maneira, toda a funcionalidade das ferramentas é acessada a executar o comando fdroid. Execute-o sozinho para obter uma lista dos subcomandos disponíveis.

Pode seguir qualquer comando com --help para obter uma lista de opções adicionais disponíveis para esse comando.

fdroid update --help

Mais sobre fdroid build

Quando executado sem nenhum parâmetro, o fdroid build criará todas e quaisquer versões de aplicações que não tenha no diretório do ‘repositório’ (ou, mais precisamente, no diretório unsigned). Existem várias outras coisas que pode fazer. Como com todas as ferramentas, a opção --help é sua amiga, mas alguns exemplos anotados e discussões sobre os modos de uso mais comuns são os seguintes:

Para compilar uma única versão de uma única aplicação, pode executar o seguinte:

fdroid build org.fdroid.fdroid:16

Isso tenta criar o código de versão 16 (que é a versão 0.25) do cliente F-Droid. Muitas das ferramentas reconhecem argumentos como pacotes, a permitir que sua atividade seja limitada a apenas um conjunto limitado de pacotes.

Se a compilação acima foi bem-sucedida, dois ficheiros serão postos no diretório unsigned:

org.fdroid.fdroid_16.apk
org.fdroid.fdroid_16_src.tar.gz

O primeiro é o APK (não assinado). Pode assinar isso com uma chave de depuração e enviá-la diretamente para o seu aparelho ou um emulador para teste. O segundo é um tarball de origem que contém exatamente a fonte usada para gerar o binário.

Se pretendesse publicar esses ficheiros, poderia executar:

fdroid publish

O tarball fonte se moveria para o diretório repo (que é o diretório que enviaria ao seu servidor web). Uma versão assinada e zipaligned do APK também apareceria lá, e ambos os ficheiros seriam removidos do diretório unsigned.

Se está a compilar apenas para fins de teste, e não pretende enviar os resultados para um repositório, pelo menos, a opção --test pode ser usada para direcionar a saída para o diretório tmp ao invés de unsigned. Um efeito semelhante poderia ser obtido simplesmente a apagar os ficheiros de saída de unsigned após a compilação, mas com o risco de se esquecer de fazê-lo!

Ao longo de linhas similares (e somente em conjunto com --test, pode usar --force para forçar a construção de uma aplicação Desativada, onde normalmente seria completamente ignorada. Similarmente, uma versão que continha ELFs ou bibliotecas Não Livres conhecidas podem ser forçadas a compilar. Veja também — scanignore e scandelete na secção Builds.

Se a compilação não foi bem-sucedida, pode descobrir porque, a olhar para a saída no diretório logs/. Se isso não estiver a esclarecer, tente compilar o app normalmente, passo a passo: android update project, ndk-build e ant debug.

Observe que os repositórios de código-fonte geralmente contêm bibliotecas pré-compiladas. Se a app estiver a ser considerada para o repositório principal do F-Droid, é importante que todos esses pré-compiladores sejam criados por meio dos metadados ou por terceiros respeitáveis.

Executar fdroid build na fonte da sua app

Outra opção para usar o fdroid build é usar um ficheiro de metadados incluído na fonte da app, em vez de numa pasta metadata/ com muitos outros apps. O ficheiro de metadados .fdroid.yml deve estar na raiz do seu repositório de fonte.

Depois de ter essa configuração, pode criar a versão mais recente da app a usar toda a pilha do F-Droid a executar:

fdroid build

Se quiser compilar toda versão singular, especifique --all.

Instalação direta

Também pode compilar e instalar diretamente num aparelho ou emulador conectado a usar o comando fdroid install. Se fizer isso sem passar pacotes como argumentos, todas as versões mais recentes compiladas e assinadas disponíveis de cada pacote serão instaladas. Geralmente, isso não será o que deseja fazer, portanto, a execução será interrompida imediatamente. No entanto, pode substituir isso, se tiver certeza de que é isso que deseja a usar --all. Observe que, atualmente, nenhuma verificação de integridade é executada com esse modo, portanto, se os ficheiros no diretório de saída assinado forem modificados, não será notificado.