Construindo Aplicações

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

Ao fazer uso deste método, é possível verificar se o aplicativo foi compilado corretamente, se ele corresponde ao código-fonte informado e se contém somente software livre. Infelizmente, no mundo Android, parece ser muito comum para aplicativos 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 arquivos binários de origem desconhecida ou licenças proprietárias.

Por esse motivo, aplicativos compilados 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 aplicativos a partir do fonte, deve-se notar que você os assinará (todos os arquivos APK devem ser assinados para instalação no Android) com sua própria chave. Quando um aplicativo já está instalado em um dispositivo, não é possível atualizá-lo para uma nova versão assinada com uma chave diferente sem primeiro desinstalar o original. Isso pode representar um inconveniente para os usuários, pois o processo de desinstalação perde todos os dados associados à instalação anterior.

O processo para gerenciar um repositório para aplicativos compilados do código-fonte é muito semelhante ao descrito no capítulo Repositório Binário Simples, exceto que agora você precisa:

  1. Incluir entradas de Compilação nos arquivos de metadados.
  2. Executar fdroid build para compilar quaisquer aplicativos 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 do aplicativo, conhecido como fdroiddata

Para fazer qualquer coisa, você precisará de pelo menos um diretório de dados do repositório. É a partir desse diretório que você executa o comando fdroid para executar todas as tarefas de gerenciamento de repositório. Você pode criar um novo, 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, você sempre precisará configurar alguns detalhes básicos de configuração. Isso é feito criando um arquivo chamado config.yml no diretório de dados. Você deve fazer isso copiando o arquivo de exemplo (./examples/config.yml) do projeto fdroidserver para o seu diretório de dados e editando de acordo com as instruções.

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

Você 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 aplicativos que você ainda não tenha no diretório do ‘repositório’ (ou, mais precisamente, no diretório unsigned). Existem várias outras coisas que você 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 um único aplicativo, você 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, permitindo que sua atividade seja limitada a apenas um conjunto limitado de pacotes.

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

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

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

Se você pretendesse publicar esses arquivos, poderia executar:

fdroid publish

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

If you’re building purely for the purposes of testing, and not intending to push the results to a repository, at least yet, the --test option can be used to direct output to the tmp directory instead of unsigned. A similar effect could be achieved by simply deleting the output files from unsigned after the build, but with the risk of forgetting to do so!

Along similar lines (and only in conjunction with --test, you can use --force to force a build of a Disabled application, where normally it would be completely ignored. Similarly a version that was found to contain ELFs or known Non-Free libraries can be forced to build. See also — scanignore and scandelete in the Builds section.

Se a compilação não foi bem-sucedida, você pode descobrir porque, olhando para a saída no diretório logs/. Se isso não estiver esclarecendo, tente compilar o aplicativo 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 o aplicativo estiver sendo considerado para o repositório principal do F-Droid, é importante que todos esses pré-compiladores sejam criados por meio dos metadados ou por uma terceira parte respeitável.

Executando fdroid build no fonte do seu aplicativo

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

Depois de ter essa configuração, você pode criar a versão mais recente do aplicativo usando toda a pilha do F-Droid executando:

fdroid build

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

Instalação direta

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