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:
- 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 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:
- Incluir entradas de Compilação nos arquivos de metadados.
- Executar
fdroid buildpara compilar quaisquer aplicativos que ainda não tenham sido compilados. - Executar
fdroid publishpara finalizar o empacotamento e assinar quaisquer APKs que foram compilados.
Diretório de dados do app, 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 app 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 app 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.
