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:
- O código-fonte (seja para uma versão específica, ou mesmo para todas as versões!) está indisponível ou incompleto.
- O código-fonte não é capaz de produzir o binário fornecido.
- 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:
- Incluir entradas de Compilação nos ficheiros de metadados.
- Executar
fdroid buildpara compilar quaisquer aplicações que ainda não tenham sido compilados. - Executar
fdroid publishpara 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.
