Condividi tramite


Processo di compilazione

Il processo di compilazione .NET per Android è responsabile dell'associazione di tutti gli elementi: generazione Resource.designer.csdi , supporto di , @(AndroidResource)e altre azioni di compilazione, generazione di wrapper chiamabili android e generazione di un .apk oggetto per l'esecuzione @(AndroidAsset)nei dispositivi Android.

Pacchetti dell'applicazione

In termini generali, esistono due tipi di pacchetti di applicazioni Android (.apk file) che il sistema di compilazione .NET per Android può generare:

  • Build di versione , che sono completamente autonome e non richiedono pacchetti aggiuntivi da eseguire. Questi sono i pacchetti forniti a un App Store.

  • Build di debug, che sono l'esatto contrario.

Questi tipi di pacchetto corrispondono a MSBuild Configuration che produce il pacchetto.

Fast Deployment

La distribuzione rapida funziona riducendo ulteriormente le dimensioni del pacchetto dell'applicazione Android. Questa operazione viene eseguita escludendo gli assembly dell'app dal pacchetto e distribuendo invece gli assembly dell'app direttamente nella directory interna files dell'applicazione, in genere situata in /data/data/com.some.package. La directory interna files non è una cartella scrivibile a livello globale, quindi lo run-as strumento viene usato per eseguire tutti i comandi per copiare i file in tale directory.

Questo processo accelera il ciclo di compilazione/distribuzione/debug perché il pacchetto non viene reinstallato quando vengono modificati solo gli assembly. Solo gli assembly aggiornati vengono risincronizzati nel dispositivo di destinazione.

Avviso

La distribuzione rapida è nota per avere esito negativo nei dispositivi che bloccano run-as, che spesso include dispositivi precedenti ad Android 5.0.

Fast Deployment è abilitato per impostazione predefinita e può essere disabilitato nelle build di debug impostando la proprietà $(EmbedAssembliesIntoApk) su True.

La modalità di distribuzione rapida avanzata può essere usata insieme a questa funzionalità per velocizzare ulteriormente le distribuzioni. Verranno distribuiti entrambi gli assembly, le librerie native, le mappe dei tipi e gli indici nella files directory. Tuttavia, è necessario abilitare questa funzionalità solo se si modificano librerie native, associazioni o codice Java.

Progetti MSBuild

Il processo di compilazione .NET per Android è basato su MSBuild, che è anche il formato di file di progetto usato da Visual Studio per Mac e Visual Studio. In genere, gli utenti non dovranno modificare manualmente i file di MSBuild. L'IDE crea progetti completamente funzionali e li aggiorna con eventuali modifiche apportate e richiama automaticamente le destinazioni di compilazione in base alle esigenze.

Gli utenti avanzati potrebbero voler eseguire operazioni non supportate dall'interfaccia utente grafica dell'IDE, quindi il processo di compilazione si può personalizzare modificando direttamente il file di progetto. Questa pagina documenta solo .NET per funzionalità e personalizzazioni specifiche di Android. Molti altri elementi sono possibili con gli elementi, le proprietà e le destinazioni msbuild normali.

Binding di progetti

Le proprietà MSBuild seguenti vengono usate con i progetti di binding:

Resource.designer.cs Generazione

Per controllare la generazione del Resource.designer.cs file vengono usate le proprietà MSBuild seguenti:

Proprietà di firma

Le proprietà di firma controllano come viene firmato il pacchetto dell'applicazione in modo che possa essere installato in un dispositivo Android. Per consentire un'iterazione di compilazione più rapida, le attività .NET per Android non firmano i pacchetti durante il processo di compilazione, perché la firma è piuttosto lenta. Vengono invece firmate (se necessario) prima dell'installazione o durante l'esportazione dall'IDE o dalla destinazione di compilazione Install. La chiamata alla destinazione SignAndroidPackage genererà un pacchetto con il suffisso -Signed.apk nella directory di output.

Per impostazione predefinita, la destinazione di firma genera una nuova chiave di firma di debug, se necessario. Se si vuole usare una chiave specifica, ad esempio in un server di compilazione, vengono usate le proprietà MSBuild seguenti:

keytool Mapping delle opzioni

Si consideri la chiamata seguente keytool :

$ 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]

Per usare il file dell'archivio chiavi generato sopra, usare il gruppo di proprietà:

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

Punti di estensione di compilazione

Il sistema di compilazione .NET per Android espone alcuni punti di estensione pubblici per gli utenti che vogliono eseguire l'associazione al processo di compilazione. Per usare uno di questi punti di estensione, sarà necessario aggiungere la destinazione personalizzata alla proprietà MSBuild appropriata in un PropertyGroup. Ad esempio:

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

I punti di estensione includono:

Una parola di cautela sull'estensione del processo di compilazione: se non sono scritte correttamente, le estensioni di compilazione possono influire sulle prestazioni di compilazione, soprattutto se vengono eseguite in ogni compilazione. È consigliabile leggere la documentazione di MSBuild prima di implementare tali estensioni.

Definizioni delle destinazioni

.NET per parti specifiche di Android del processo di compilazione sono definite in $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets, ma per compilare l'assembly sono necessarie anche destinazioni specifiche del linguaggio normali, ad esempio Microsoft.CSharp.targets .

Prima di importare le destinazioni dei linguaggi, è necessario impostare le proprietà di compilazione seguenti:

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

Tutte queste destinazioni e proprietà possono essere incluse per C# importando Xamarin.Android.CSharp.targets:

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

Questo file può essere facilmente adattato per altri linguaggi.