Compartir a través de


Proceso de compilación

El proceso de compilación de .NET para Android es responsable de pegar todo lo mismo: generar Resource.designer.cs, admitir las @(AndroidAsset)acciones de compilación , @(AndroidResource)y otras acciones de compilación, generar contenedores que se pueden llamar a Android y generar un .apk para su ejecución en dispositivos Android.

paquetes de aplicación

En términos generales, hay dos tipos de paquetes de aplicaciones Android (.apk archivos) que el sistema de compilación .NET para Android puede generar:

  • Compilaciones de versión, que son totalmente independientes y no requieren la ejecución de paquetes adicionales. Se trata de los paquetes que se ofrecen en una tienda de aplicaciones.

  • Compilaciones de depuración, los que no.

Estos tipos de paquete coinciden con el objeto MSBuild Configuration que genera el paquete.

Implementación rápida

La implementación rápida funciona reduciendo aún más el tamaño del paquete de aplicaciones Android. Para ello, se excluyen los ensamblados de la aplicación del paquete y, en su lugar, se implementan los ensamblados de la aplicación directamente en el directorio interno de la aplicación files, que normalmente se encuentra en /data/data/com.some.package. El directorio interno files no es una carpeta de escritura global, por lo que se usa la herramienta run-as para ejecutar todos los comandos para copiar los archivos en ese directorio.

Este proceso acelera el ciclo de compilación, implementación y depuración porque el paquete no se vuelve a instalar cuando solo se cambian ensamblados. Solo los ensamblados actualizados se vuelven a sincronizar con el dispositivo de destino.

Advertencia

Se sabe que la implementación rápida no funciona en los dispositivos que bloquean run-as, lo que suele incluir dispositivos anteriores a Android 5.0.

La implementación rápida está habilitada de forma predeterminada y puede deshabilitarse en las compilaciones de depuración si se establece la propiedad $(EmbedAssembliesIntoApk) en True.

Se puede usar el modo de implementación rápida mejorada con esta característica para acelerar aún más las implementaciones. Así se implementarán tanto ensamblados, como bibliotecas nativas, typemaps y dexes en el directorio files. Sin embargo, realmente solo debe habilitarlo si va a cambiar bibliotecas nativas, enlaces o código Java.

Proyectos de MSBuild

El proceso de compilación de .NET para Android se basa en MSBuild, que también es el formato de archivo de proyecto usado por Visual Studio para Mac y Visual Studio. Normalmente, los usuarios no necesitarán editar los archivos de MSBuild a mano: el IDE crea proyectos completamente funcionales y los actualiza con los cambios realizados e invoca automáticamente los objetivos de compilación según sea necesario.

Puede que los usuarios avanzados quieran realizar operaciones que no se admiten en la interfaz gráfica de usuario del IDE, así que el proceso de compilación se puede personalizar mediante la edición directa del archivo de proyecto. Esta página solo documenta las características y personalizaciones específicas de .NET para Android: muchas más cosas son posibles con los elementos, propiedades y destinos normales de MSBuild.

Proyectos de enlace

Las siguientes propiedades de MSBuild se usan con proyectos de enlace:

Generación de Resource.designer.cs

Las propiedades de MSBuild siguientes se utilizan para controlar la generación del archivo Resource.designer.cs:

Propiedades de firma

Las propiedades de firma controlan cómo se firma el paquete de aplicación para que se pueda instalar en un dispositivo Android. Para permitir una iteración de compilación más rápida, las tareas de .NET para Android no firman paquetes durante el proceso de compilación, ya que la firma es bastante lenta. En su lugar, se firman (si es necesario) antes de la instalación o durante la exportación, por medio del IDE o del destino de compilación Install. Al invocar el destino SignAndroidPackage se produce un paquete con el sufijo -Signed.apk en el directorio de salida.

De forma predeterminada, el destino de firma genera una nueva clave de firma de depuración, si es necesario. Si desea usar una clave específica, por ejemplo, en un servidor de compilación, se usan las propiedades siguientes de MSBuild:

Asignación de opciones keytool

Considere la invocación de keytool siguiente:

$ 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 el almacén de claves generado anteriormente, use el grupo de propiedades:

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

Crear puntos de extensión

El sistema de compilación de .NET para Android expone algunos puntos de extensión públicos para los usuarios que desean enlazar con nuestro proceso de compilación. Para usar uno de estos puntos de extensión, deberá agregar su destino personalizado a la propiedad de MSBuild correspondiente en un PropertyGroup. Por ejemplo:

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

Los puntos de extensión incluyen lo siguiente:

Una advertencia sobre la extensión del proceso de compilación: si no se escriben correctamente, las extensiones de compilación pueden afectar el rendimiento de la compilación, especialmente si se ejecutan en cada compilación. Es muy recomendable que lea la documentación de MSBuild antes de implementar estas extensiones.

Definiciones de destino

Las partes específicas de .NET para Android del proceso de compilación se definen en $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets, pero los destinos normales específicos del lenguaje, como Microsoft.CSharp.targets , también son necesarios para compilar el ensamblado.

Las siguientes propiedades de compilación deben establecerse antes de importar los destinos de lenguaje:

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

Todos estos destinos y propiedades se pueden incluir para C# mediante la importación de Xamarin.Android.CSharp.targets:

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

Este archivo se puede adaptar fácilmente para otros lenguajes.