Compartilhar via


Processo de Compilação

O processo de compilação do .NET para Android é responsável por unir tudo: gerar Resource.designer.cs, dar suporte a @(AndroidAsset), @(AndroidResource), e outras ações de compilação, gerar wrappers que podem ser chamados pelo Android e gerar um .apk para execução em dispositivos Android.

Pacotes de Aplicativos

Em termos gerais, há dois tipos de pacotes de aplicativos Android (.apk arquivos) que o sistema de build do .NET para Android pode gerar:

  • Compilações de lançamento , que são totalmente independentes e não exigem pacotes extras para serem executadas. Esses são os pacotes fornecidos a uma loja de aplicativos.

  • Builds de depuração, que não o são.

Esses tipos de pacote correspondem ao MSBuild Configuration que produz o pacote.

Fast Deployment

A implantação rápida funciona reduzindo ainda mais o tamanho do pacote do aplicativo Android. Isso é feito excluindo os assemblies do aplicativo do pacote e, em vez disso, implantando os assemblies do aplicativo diretamente no diretório interno files do aplicativo, geralmente localizado no /data/data/com.some.package. O diretório interno files não é uma pasta globalmente gravável, portanto, a run-as ferramenta é usada para executar todos os comandos para copiar os arquivos para esse diretório.

Esse processo acelera o ciclo de compilação/implantação/depuração porque o pacote não é reinstalado quando apenas os assemblies são alterados. Somente os assemblies atualizados são ressincronizados com o dispositivo de destino.

Aviso

Sabe-se que a implantação rápida falha em dispositivos que bloqueiam run-as, o que geralmente inclui dispositivos anteriores ao Android 5.0.

O Fast Deployment é habilitado por padrão e pode ser desabilitado em builds de depuração, definindo a propriedade $(EmbedAssembliesIntoApk) para True.

O modo de implantação rápida aprimorada pode ser usado em conjunto com esse recurso para acelerar ainda mais as implantações. Isso implantará assemblies, bibliotecas nativas, mapas de tipos e dexes no files diretório. Mas você só deve realmente precisar habilitar isso se estiver alterando bibliotecas nativas, ligações ou código Java.

Projetos do MSBuild

O processo de build do .NET para Android é baseado no MSBuild, que também é o formato de arquivo de projeto usado pelo Visual Studio para Mac e pelo Visual Studio. Normalmente, os usuários não precisarão editar os arquivos do MSBuild manualmente – o IDE cria projetos totalmente funcionais e os atualiza com as alterações feitas e invoca automaticamente os destinos de compilação conforme necessário.

Usuários avançados talvez queiram realizar ações sem suporte na interface gráfica do IDE, portanto, o processo de build pode ser personalizado editando-se o arquivo de projeto diretamente. Esta página documenta apenas os recursos e personalizações específicos do .NET para Android – muito mais coisas são possíveis com os itens, propriedades e destinos normais do MSBuild.

Projetos de Encadernação

As seguintes propriedades de MSBuild são usadas com projetos de associação:

Resource.designer.cs Geração

As seguintes propriedades do MSBuild são usadas para controlar a Resource.designer.cs geração do arquivo:

Propriedades de assinatura

As propriedades de assinatura controlam como o pacote do aplicativo é assinado, para que ele possa ser instalado em um dispositivo Android. Para permitir uma iteração de build mais rápida, as tarefas do .NET para Android não assinam pacotes durante o processo de build, pois a assinatura é muito lenta. Em vez disso, eles são assinados (se necessário) antes da instalação ou durante a exportação, pelo IDE ou pelo destino de build Install. Invocar o destino SignAndroidPackage produzirá um pacote com o sufixo -Signed.apk no diretório de saída.

Por padrão, o destino da assinatura gera uma nova chave de assinatura de depuração, se necessário. Se você quiser usar uma chave específica, por exemplo, em um servidor de build, as seguintes propriedades do MSBuild serão usadas:

keytool Mapeamento de opções

Considere a seguinte keytool invocação:

$ keytool -genkey -v -keystore filename.keystore -alias keystore.alias -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password: keystore.filename password
Re-enter new password: keystore.filename password
...
Is CN=... correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
        for: ...
Enter key password for keystore.alias
        (RETURN if same as keystore password): keystore.alias password
[Storing filename.keystore]

Para usar o armazenamento de chaves gerado acima, use o grupo de propriedades:

<PropertyGroup>
    <AndroidKeyStore>True</AndroidKeyStore>
    <AndroidSigningKeyStore>filename.keystore</AndroidSigningKeyStore>
    <AndroidSigningStorePass>keystore.filename password</AndroidSigningStorePass>
    <AndroidSigningKeyAlias>keystore.alias</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>keystore.alias password</AndroidSigningKeyPass>
</PropertyGroup>

Criar pontos de extensão

O sistema de build do .NET para Android expõe alguns pontos de extensão públicos para usuários que desejam se conectar ao nosso processo de build. Para usar um desses pontos de extensão, você precisará adicionar seu destino personalizado à propriedade apropriada do MSBuild em um PropertyGroup. Por exemplo:

<PropertyGroup>
   <AfterGenerateAndroidManifest>
      $(AfterGenerateAndroidManifest);
      YourTarget;
   </AfterGenerateAndroidManifest>
</PropertyGroup>

Os pontos de extensão incluem:

Uma palavra de cautela sobre como estender o processo de compilação: se não forem escritas corretamente, as extensões de compilação podem afetar o desempenho da compilação, especialmente se forem executadas em todas as compilações. É altamente recomendável que você leia a documentação do MSBuild antes de implementar essas extensões.

Definições de destino

As partes específicas do .NET para Android do processo de compilação são definidas em $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets, mas destinos específicos de linguagem normal, como Microsoft.CSharp.targets , também são necessários para compilar o assembly.

As seguintes propriedades de build devem ser definidas antes de importar quaisquer destinos de linguagem de programação:

<PropertyGroup>
  <TargetFrameworkIdentifier>MonoDroid</TargetFrameworkIdentifier>
  <MonoDroidVersion>v1.0</MonoDroidVersion>
  <TargetFrameworkVersion>v2.2</TargetFrameworkVersion>
</PropertyGroup>

Todos esses destinos e propriedades podem ser incluídos para C# importando Xamarin.Android.CSharp.targets:

<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />

Esse arquivo pode ser facilmente adaptado para outras linguagens de programação.